前言¶
在 DeepSeek Harness(DSH)里写智能体或跑长任务时,若手头有一到四台 DGX Spark 节点,你往往还要另开终端或脚本,用 SSH 看温度、内存和 swap,再单独执行 nvidia-smi -lgc 做频率限制。信息分散,Composer 界面里也看不到集群概况。
下面介绍的 dsh-spark-monitor(维护者 zer0kara)是 DSH 社区插件:在 Composer 状态栏最右侧显示聚合状态,并从同一入口切换各节点的 GPU 频率档。采样走 SSH,不依赖插件自带主机名;未配置节点时状态栏不绘制任何内容。
这是什么¶
插件全名 @zer0kara/dsh-spark-monitor(npm 包名),当前版本 1.0.1,许可证 MIT。它面向 1–4 台 DGX Spark,通过你在 ~/.ssh/config 里配置的 SSH 别名连到各节点,读取 sysfs hwmon 与 /proc/meminfo 做温度、内存与 swap 采样;频率档则在各节点上执行 sudo -n nvidia-smi -lgc(或 unlimited 时用 -rgc)。
运行环境要求 DeepSeek Harness >= 0.2.1-rc.2(Web UI / Desktop profile)。本地开发需 Node.js >= 20。插件以当前 DSH 进程权限运行;安装前建议在 GitHub 仓库核对源码与许可证。
核心功能¶
状态栏聚合与悬停明细¶
- 温度 pill:展示当前最热节点;悬停列出每台节点及其温度与采样年龄(
ageSeconds)。 - 内存 pill:展示内存占用最高的节点;悬停同样按节点列出内存与 swap 相关数据及采样年龄。
可配置节点与采样项¶
支持 1–4 个节点,每个节点可单独设置 SSH alias、显示 label,以及是否采样 temperature / memory。
GPU 频率档¶
配置项 tiers 为 MHz 数值列表,并可包含 unlimited;从状态栏按钮一次点击应用到所有已配置节点,弹层会高亮当前档。驱动无法查询已锁定的频率,界面显示的是插件最后一次应用的档位(或可选开机服务写入的记录文件中的档位)。
故障隔离与国际化¶
某一节点 SSH 失败不影响其他节点;失败节点的 pill 行会显示错误。插件提供 en / zh 文案,Desktop 插件管理器内有原生设置表单。
安装与启用¶
本包自 GitHub 分发,未发布到 npm。
Desktop: 打开 Plugins 页,选择 Add plugin,输入 github:zer0kara/dsh-spark-monitor(或本地 checkout 的绝对路径),然后刷新页面。Desktop profile 由 Electron 应用管理,不要用 dsh plugin --profile desktop 在该场景安装。
CLI profile(例如 web):
dsh plugin --profile web add github:zer0kara/dsh-spark-monitor
# 本地 checkout 同样可用:
dsh plugin --profile web add file:/absolute/path/to/dsh-spark-monitor
前置条件¶
- 每个节点在
~/.ssh/config中有 SSH 别名,且 BatchMode=yes 下可连(无交互式密码)。 - 采样温度与内存不需要 root;若启用频率档,各节点需对
nvidia-smi配置免密 sudo(sudo -n nvidia-smi ...必须成功),且已安装nvidia-smi。 - 无 sudoers 规则时,监控 pill 仍可用;将配置里
clock: false可完全隐藏频率按钮。
频率功能专用的 sudoers 示例(README 原文):
# /etc/sudoers.d/dsh-spark-monitor
your-user ALL=(root) NOPASSWD: /usr/bin/nvidia-smi
将 your-user 换成 SSH 登录用户。
典型配置¶
在 profile 的 patch 层(~/.dsh/profiles/<profile>/cordis.patch.yml)或 Desktop 插件管理器表单中增加节点。alias 必须对应你自己的 ~/.ssh/config 条目;未配置 hosts 时插件不采样、状态栏也不显示监控 UI。
- id: spark-monitor
name: "@zer0kara/dsh-spark-monitor"
config:
hosts:
- alias: node-1
label: node 1
temperature: true
memory: true
- alias: node-2
label: node 2
temperature: true
memory: true
tiers:
- 1710
- 1950
- 2190
- unlimited
clock: true
intervalSeconds: 300
timeoutSeconds: 20
常用字段含义(默认值以 README 为准):
| 字段 | 默认 | 含义 |
|---|---|---|
hosts[].alias |
必填 | ~/.ssh/config 中的 SSH 别名 |
hosts[].label |
同 alias | 悬停提示中的显示名 |
hosts[].temperature |
true |
是否采样该节点温度 |
hosts[].memory |
true |
是否采样内存与 swap |
tiers[] |
1710, 1950, 2190, unlimited |
弹层提供的频率档(MHz 或 unlimited) |
clock |
true |
是否显示频率控制;无免密 sudo 时可设为 false |
intervalSeconds |
300 |
采样间隔(30–86400 秒) |
timeoutSeconds |
20 |
单次 SSH 命令超时(5–120 秒) |
工作原理简述¶
采样: Host 侧每个间隔对每个节点执行一次 SSH 命令,读取 hwmon 的 temp*_input(毫摄氏度)、/proc/meminfo 中的 MemTotal / MemAvailable / SwapTotal / SwapFree,以及 uptime 与 load;各节点快照独立存储。
频率档: 应用某一档时在节点上执行 sudo -n sh -c 'nvidia-smi -lgc 0,<MHz> && …'(unlimited 用 -rgc),并在 /var/lib/gpu-clock-lock/tier 写入记录,供状态栏显示(驱动不提供查询锁定频率的接口)。
适用场景与注意¶
适合: 已在 DSH Web 或 Desktop 中开发、且固定管理少量 DGX Spark 节点、希望 Composer 内一眼看到最热/最满节点并统一切换 GPU 频率档的用户。
注意:
nvidia-smi -lgc为运行时设置,重启后失效;若需开机恢复,README 提供了可选的 systemd 示例服务,插件本身不会安装或修改任何系统服务。- 在插件外手动执行
nvidia-smi -lgc时,界面无法感知,仍显示插件上次应用的档位。 - 社区目录 SkillHub 插件页 与 GitHub 仓库为独立信息源,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库为准。
链接¶
- 社区目录:https://www.skillhub.cn/plugins/zer0kara/dsh-spark-monitor
- 源码与文档:https://github.com/zer0kara/dsh-spark-monitor
经过上面的步骤,你可以在 DSH Composer 状态栏集中查看 1–4 台 Spark 节点的温度与内存概况,并在具备 SSH 与可选 sudo 的前提下,从同一入口切换 GPU 频率档,减少在终端与 Harness 之间来回切换的成本。