コンテンツにスキップ

How it works

lote submit <host> <script> はリポジトリをホストへ rsync し、ひとつの ssh 接続を開き、オンホストエグゼキュータを通じてスクリプトをそのホストのスケジューラに渡します。lote はホストが実際に持っているものからバックエンドを選ぶため、同じスクリプトがコードの変更なしに素のマシン、slurm クラスタ、pbs スーパーコンピュータのいずれにも届きます。

flowchart TB
    subgraph control["control plane (lote, on your laptop)"]
        direction LR
        SETUP["lote setup<br/>ホストをオンボード"]
        SUBMIT["lote submit<br/>ジョブをディスパッチ"]
        PS["lote ps / reconcile<br/>すべてのホストを追跡"]
    end

    subgraph onhost["on-host executor (lote exec, over ssh)"]
        direction LR
        DETECT["スケジューラ探査<br/>command -v qsub / sbatch"]
        ADAPT["submit / run / monitor<br/>ひとつのスクリプトが適応"]
    end

    subgraph clients["typed clients (thin wrappers)"]
        direction LR
        PUEUE["pueue<br/>素のホスト"]
        SBATCH["sbatch<br/>slurm クラスタ"]
        QSUB["qsub<br/>pbs クラスタ"]
        BASH["bash<br/>スケジューラなし"]
    end

    RSYNC(["リポジトリを rsync で上げる<br/>lote.toml の許可リスト"]):::brand
    DB(["状態ストア<br/>.lote/db.json"]):::brand

    SETUP --> RSYNC
    SUBMIT --> RSYNC
    RSYNC --> DETECT
    DETECT --> ADAPT
    ADAPT --> PUEUE
    ADAPT --> SBATCH
    ADAPT --> QSUB
    ADAPT --> BASH

    SUBMIT --> DB
    PS --> DB

    classDef brand fill:#eab308,stroke:#1a1a1a,stroke-width:2px,color:#1a1a1a;

3 つの層

コントロールプレーンlote)はあなたのノートパソコンで動きます。lote setup でホストをオンボードし、lote submit でジョブをディスパッチし、lote pslote reconcile ですべてのホストの実行状態を追跡します。それ自身がジョブを実行することは決してありません。ssh 越しにオンホストエグゼキュータを駆動し、すべてのディスパッチをローカルの状態ストアに記録します。

オンホストエグゼキュータlote exec)はひとつのホストで動きます。ジョブスクリプトを見つけ、そのホストが実際に持つスケジューラを検出し、ジョブを submit、run、monitor して、そのスケジューラに自動的に適応します。ログインノードで手動で実行することもできますが、通常は lote が chefe run lote exec ... としてあなたの代わりに呼び出します。

型付きクライアントは、実際のツール(qsubsbatchpueuersync)に対する薄いラッパーです。それぞれがそのツールの出力を型付きレコードへパースするため、エグゼキュータはどこでも同じやり方でジョブの状態を読み取れます。新しいバックエンドは新しいクラスであり、決して新しい if host == ... の分岐ではありません。

スケジューラの自動検出

lote は lote setup でホストを一度オンボードし、ログインシェルで探査することでクラスタのツールチェーンを PATH に乗せます。見つけたものから、そのホストへの以降のすべてのジョブをルーティングします。

ホスト lote が見つけるもの バックエンド
ssh 越しの DGX や PC スケジューラなし pueue
slurm クラスタ(例: miyabi) sbatch sbatch
pbs クラスタ(例: Pegasus) qsub qsub
素のログインノード スケジューラに乗せられるものなし bash

同じ job.sh が 4 つすべてで動きます。ジョブスクリプトは module loadcommand -v module でガードするため、クラスタ外では何もしません。また、位置引数はスクリプトがそのエントリポイントへ転送する ARGS 環境変数を通って流れます。

ディスパッチフロー

lote setup miyabi              # probe + rsync + chefe install, then cache the host's facts
lote submit miyabi train.sh    # rsync up, pick sbatch, submit, print + record the handle
lote ps                        # the run shows up across every host
lote reconcile miyabi          # compare recorded runs with the live scheduler
lote pull <handle>             # rsync the recorded results path back

ホストはオンボード中に chefe install が成功して初めてターゲットになるため、環境をビルドできないマシンは決してターゲットになりません。その後、各ディスパッチは rsync で上げ、lote exec へのひとつの ssh 呼び出し、そして状態ストアへの 1 行の書き込みです。

次は、コマンドリファレンス設定リファレンスです。