前言¶
在集群上跑训练或批处理时,常见做法是另开终端 sbatch,再反复 squeue 看状态,结束后再回到对话里说明结果。DeepSeek Harness(DSH)把 Agent 和工具链放在同一套界面里;若要把 Slurm 队列接进这条工作流,就需要在 Host 侧通过 SSH 访问登录节点、在对话里提供提交与查询工具,并在作业结束时把日志摘要送回当前 Chat。下面介绍社区插件 dsh-slurm(仓库 zghehejun233/dsh-slurm,SkillHub 分类为工作流),它面向上述场景,且不在计算节点上部署额外 Agent 或守护进程。
这是什么¶
dsh-slurm 是 DSH 的 Slurm 队列插件(README 简述:Slurm queue for DeepSeek Harness)。维护者与分发以 GitHub 仓库 zghehejun233/dsh-slurm 为准;package.json 中作者字段为 ThuRAY,许可证为 MIT,当前包版本为 0.5.10。插件要求 DSH 0.2.2-rc.1 区间(>=0.2.2-rc.1 <0.2.3-0),Node.js 为 ^22.19.0 或 >=24。
它解决三件事:用结构化参数 sbatch 提交作业;在右侧边栏合并展示跟踪作业与实时队列;作业到达终态时向所属 Chat 投递一次完成消息(含状态、退出码、耗时与日志尾部),并可附带继续提示,让 Agent 在作业结束后自动接着做后续步骤。
环境与依赖¶
| 项目 | 要求 |
|---|---|
| DeepSeek Harness | 0.2.2-rc.1(见 README 兼容性说明) |
| Node.js | ^22.19.0 或 >=24 |
| SSH | OpenSSH 客户端;密钥或 ssh-agent(BatchMode=yes) |
| 可选 | dsh-better-sidebar(≥0.28.2)用于面板;未安装时工具与完成跟进仍可用 |
集群侧不需要安装本插件对应的 Agent、守护进程或额外包:DSH 的 Host 进程通过 OpenSSH 连接登录节点,并复用 dsh-ssh 中的主机配置。
核心功能¶
集群选择¶
边栏面板标题区有 Cluster 下拉框,列表来自 ~/.dsh/dsh-ssh.json 以及插件配置中的 config.host。选中主机后写入 $DSH_HOME/slurm/prefs.json(权限 0600)并立即生效;各 slurm_* 工具默认使用该主机,单次调用仍可通过 host 参数覆盖。Agent 系统提示中会渲染「当前集群:host 为 user@host[:port],再从同一下拉框选择。
右侧边栏面板¶
打开右侧边栏,点击 +,选择 Slurm queue / Slurm 队列。面板为只读:展示集群选择、运行中/排队/已完成计数、合并后的作业行(跟踪账本与实时 squeue 在 Host 侧合并,不重复显示)、进度条、最近完成记录与分区容量摘要。轮询在页面隐藏时暂停;有活跃作业时默认每 8 秒刷新(panelRefreshSeconds),空闲时 20 秒。连接失败会保留上一帧快照并提示。
Agent 工具¶
| 工具 | 作用 |
|---|---|
slurm_status |
分区/GRES、节点 CPU/GPU、个人队列、账务历史及指定作业的 scontrol 详情 |
slurm_submit |
经 stdin 写入批处理脚本,sbatch --parsable 返回作业 ID;followUp 注册完成唤醒;dryRun 仅打印命令 |
slurm_jobs |
跟踪账本:最近状态、是否已通知、所属 Chat |
slurm_logs |
尾随 stdout/stderr,路径来自账本或 scontrol |
slurm_cancel |
scancel 单个作业,不自动重提 |
slurm_watch |
将已提交作业绑定到当前 Chat(attach)或停止跟踪(detach) |
slurm_fetch |
经 SFTP 递归下载到会话工作区或 $DSH_HOME/slurm/results 下的新目录,并拒绝符号链接逃逸 |
提交示例(摘自 README):
slurm_submit({
script: "#!/bin/bash\n#SBATCH --job-name=train\npython train.py\n",
partition: "gpu", gpus: 1, cpus: 8, mem: "64G", time: "02:00:00",
followUp: true, prompt: "Training finished: inspect the log and report loss."
})
完成跟进(completion follow-up)¶
被跟踪作业进入终态后,监视器向所属 Chat 注入一条用户角色消息,包含作业 ID、主机、名称、状态、退出码、耗时、日志路径,以及不可信标注下的日志最后若干行(默认 40 行,logTailLines)和可选的 <continue prompt>。等待过程不消耗模型 token;仅完成消息触发新一轮对话。若 Chat 忙碌,消息进入收件箱;投递为至少一次语义,失败时按 30s / 2m / 10m / 30m / 1h 退避重试,最多五次,slurm_jobs 可查看 notifyFailedAt。若作业同时从 squeue 与 sacct 消失,状态保留为 MISSING,不会自动当作成功结束。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前建议阅读仓库源码与 MIT 许可证。DSH 生态采用「一切皆插件」思路;SkillHub(插件目录页)为社区站点,与 DeepSeek / 幻方无官方从属关系。
桌面端(profile 为 desktop):
dsh plugin --profile desktop add dsh-slurm
# 然后退出并重新打开 DeepSeek Harness
由 dsh web 提供的 Web GUI(profile 为 web):
dsh plugin --profile web add dsh-slurm
dsh web
也可在 Web UI 中:Plugins → Add plugin,粘贴包名、release 的 .tgz 绝对路径或源码目录。安装或替换代码后需重启 DSH 一次,并对页面硬刷新(Cmd/Ctrl+Shift+R),以便 Host 与 Client 加载新模块代。
配置要点¶
Bundle 默认插入一行插件项,不自带默认主机:
- insert:
- id: dsh-slurm
name: dsh-slurm
常用字段(默认值见 README 配置表):
| 字段 | 默认 | 含义 |
|---|---|---|
host |
'' |
未在面板选择时的回退主机:dsh-ssh 别名或 user@host[:port] |
workdir |
'' |
远程脚本/日志默认目录,空则为 $HOME |
pollSeconds |
60 |
监视器间隔(15–600) |
panelRefreshSeconds |
8 |
面板可见时轮询(3–60) |
followUpByDefault |
true |
提交时默认跟踪,除非显式关闭 |
continuePrompt |
内置模板 | 支持 {jobId} {name} {state} 等占位符 |
maxLogBytes |
65536 |
单次日志读取上限 |
connectTimeoutMs |
10000 |
SSH 连接超时 |
安全与适用注意¶
批处理脚本经 stdin 发送;模型提供的值在到达远程 shell 前会加单引号,ssh 使用 -- 调用。面板 API 仅监听 loopback;切换集群的写入需 JSON 与同源 Origin。插件不存储密码或私钥,认证交给 OpenSSH 与 dsh-ssh 主机定义。完成消息中明确标注作业输出为不可信数据。slurm_fetch 使用 SFTP 批命令、不启远程 shell,并限制目标路径在工作区或 $DSH_HOME/slurm/results 内。
适合已在 Slurm 集群上工作、且希望把提交、查队列、读日志与「作业结束后继续对话」收拢到 DSH 里的开发者。若不配置 SSH 密钥或 dsh-ssh 主机,需先解决登录节点可达性,否则工具与面板无法读队列。
结尾¶
dsh-slurm 把 Slurm 的提交与观测接到 DSH 工具与边栏上,并用一次性完成消息把长跑作业和 Agent 回合衔接起来;集群侧仅需 SSH 可达的登录节点。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库 中的 README 与 CHANGELOG。