跳转至

工作原理

lote submit <host> <script> 将你的仓库 rsync 到主机上,打开一条 ssh 连接,并通过主机端执行器把脚本交给那台主机的调度器。同一个脚本无需任何代码改动,就能落地到一台普通机器、一个 slurm 集群或一台 pbs 超级计算机上,因为 lote 会根据主机实际拥有的东西来挑选后端。

flowchart TB
    subgraph control["控制平面(lote,在你的笔记本上)"]
        direction LR
        SETUP["lote setup<br/>接入一台主机"]
        SUBMIT["lote submit<br/>分发一个作业"]
        PS["lote ps / reconcile<br/>跟踪每一台主机"]
    end

    subgraph onhost["主机端执行器(lote exec,通过 ssh)"]
        direction LR
        DETECT["调度器探测<br/>command -v qsub / sbatch"]
        ADAPT["submit / run / monitor<br/>一个脚本,自适应"]
    end

    subgraph clients["带类型的客户端(轻量封装)"]
        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;

三个层次

控制平面lote)运行在你的笔记本上。它用 lote setup 接入主机,用 lote submit 分发作业,并用 lote pslote reconcile 跨每一台主机跟踪运行状态。它从不自己运行作业。它通过 ssh 驱动主机端执行器,并把每一次分发记录到本地状态存储。

主机端执行器lote exec)运行在某一台主机上。它找到作业脚本,检测主机实际拥有的调度器,然后提交、运行并监控作业,自动适配该调度器。你也可以在登录节点上手动运行它,但 lote 通常会以 chefe run lote exec ... 的形式替你调用它。

带类型的客户端是对真实工具(qsubsbatchpueuersync)的轻量封装。每一个都把对应工具的输出解析成带类型的记录,因此执行器在任何地方都以相同方式读取作业的状态。新增后端意味着新增类,而绝不是新增 if host == ... 分支。

调度器自动检测

lote 用 lote setup 接入主机一次,在登录 shell 中探测它,以便集群工具链处于 PATH 上。根据探测到的结果,它为该主机后续的每一个作业进行路由。

主机 lote 发现了什么 后端
通过 ssh 连接的 DGX 或 PC 无调度器 pueue
slurm 集群(例如 miyabi) sbatch sbatch
pbs 集群(例如 Pegasus) qsub qsub
普通登录节点 无可调度内容 bash

同一个 job.sh 在这四种情况下都能运行。作业脚本用 command -v module 来守护 module load,因此在非集群环境中它们会变成空操作;而位置参数则通过 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 调用,以及向状态存储写入一行。

接下来是命令参考配置参考