dsh-spark-monitor:在 DSH 状态栏监控 DGX Spark 温度与显存并切换 GPU 频率档

前言

在 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

前置条件

  1. 每个节点在 ~/.ssh/config 中有 SSH 别名,且 BatchMode=yes 下可连(无交互式密码)。
  2. 采样温度与内存不需要 root;若启用频率档,各节点需对 nvidia-smi 配置免密 sudo(sudo -n nvidia-smi ... 必须成功),且已安装 nvidia-smi。
  3. 无 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 之间来回切换的成本。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜