# GPU/DCU 资源看板 一个通过 SSH 采集服务器 GPU/DCU 占用情况的 Web 看板。适合集中查看多台服务器的加速卡状态,支持海光 DCU 和 NVIDIA GPU。 看板会定时在目标服务器上执行 `hy-smi` 或 `nvidia-smi`,展示每台服务器的卡数、型号、显存占用、算力占用、温度、功耗、在线状态和分组信息。 ## 界面预览 主界面: ![主界面](docs/主界面.png) 添加服务器: ![添加服务器界面](docs/添加服务器界面.png) ## 功能 - 添加、编辑、删除服务器。 - 按服务器状态和分组筛选。 - 支持海光 DCU:通过 `hy-smi` 采集占用,通过 `hy-smi --showproductname` 识别型号。 - 支持 NVIDIA GPU:通过 `nvidia-smi` 采集占用和识别型号。 - 自动识别卡数,不需要手动填写 4 卡或 8 卡。 - 同时显示显存占用和算力占用。 - 根据显存占用和算力占用综合判断每张卡是否可用。 - 主界面用水位色块展示每张卡的显存和算力占用。 - 盘点每台服务器 `/models`、`/public`、`/data` 等目录下的模型文件/目录,并展示 Docker images。 - 提供“模型镜像检索”视图,按模型名、路径、Docker 镜像名或 tag 查找资产所在服务器。 - 检索结果显示服务器分组、IP、当前占用状态,并支持复制 IP、SSH 命令、模型路径和镜像名称。 - 支持多站点入口切换,可以在昆山/天津中心和太原中心等多套独立部署之间跳转。 - 右上角支持按服务器名称、IP、分组、标签、型号、模型路径和镜像名称进行模糊搜索。 - 型号只在新增服务器和手动刷新时重新识别,日常自动刷新只采集占用数据。 - 定期备份服务器配置文件,便于误操作后恢复。 ## 环境准备 部署机器需要: - Node.js:建议 18 或更高版本;当前代码兼容 Node.js 12+。 - npm:通常随 Node.js 一起安装。 - OpenSSH 客户端:需要能执行 `ssh`。 - 网络能访问被监控服务器的 SSH 端口,默认 `22`。 被监控服务器需要: - 海光 DCU 服务器能执行 `hy-smi`。 - NVIDIA GPU 服务器能执行 `nvidia-smi`。 - 部署机器必须能免密 SSH 登录被监控服务器。 添加服务器前,先在部署机器上验证免密访问和采集命令,例如: ```bash ssh root@10.0.0.12 hy-smi ssh root@10.0.0.13 nvidia-smi ``` 如果这里需要输入密码,网页里添加后也会采集失败。需要先把部署机器的 SSH 公钥加入目标服务器的 `authorized_keys`。 ## Windows 部署 1. 安装 Node.js。 下载并安装 Node.js LTS 版本。安装后在 PowerShell 验证: ```powershell node -v npm -v ssh -V ``` 2. 配置免密 SSH。 如果本机还没有 SSH key: ```powershell ssh-keygen -t ed25519 ``` 将 `C:\Users\你的用户名\.ssh\id_ed25519.pub` 的内容追加到每台被监控服务器的 `~/.ssh/authorized_keys`。 3. 启动服务。 在项目目录执行: ```powershell npm start ``` 或双击: ```text start-windows.bat ``` 4. 打开页面。 ```text http://localhost:3066 ``` 如果要让同网段其他机器访问,需要放行 Windows 防火墙的 `3066` 端口,然后访问: ```text http://部署机器IP:3066 ``` ## Linux 部署 1. 安装 Node.js、npm 和 OpenSSH 客户端。 RHEL/Kylin/CentOS 类系统: ```bash sudo dnf install -y nodejs npm openssh-clients ``` Ubuntu/Debian 类系统: ```bash sudo apt update sudo apt install -y nodejs npm openssh-client ``` 2. 配置免密 SSH。 ```bash ssh-keygen -t ed25519 ``` 将部署机器的公钥追加到每台被监控服务器的 `~/.ssh/authorized_keys`。验证: ```bash ssh root@10.0.0.12 hy-smi ssh root@10.0.0.13 nvidia-smi ``` 3. 启动服务。 ```bash cd gpu-dcu-monitor npm start ``` 4. 后台常驻运行。 可以使用 systemd。创建 `/etc/systemd/system/gpu-dcu-monitor.service`: ```ini [Unit] Description=GPU DCU Server Monitor After=network-online.target Wants=network-online.target [Service] Type=simple WorkingDirectory=/opt/gpu-dcu-monitor Environment=PORT=3066 Environment=POLL_INTERVAL_MS=10000 Environment=SSH_TIMEOUT_MS=20000 Environment=ASSET_REFRESH_INTERVAL_MS=1800000 ExecStart=/usr/bin/node /opt/gpu-dcu-monitor/server.js Restart=always RestartSec=3 User=root [Install] WantedBy=multi-user.target ``` 启动并设置开机自启: ```bash sudo systemctl daemon-reload sudo systemctl enable --now gpu-dcu-monitor sudo systemctl status gpu-dcu-monitor ``` ## 添加服务器 在页面点击“添加服务器”,填写: - 名称:看板上显示的服务器名称。 - Host / IP:服务器 IP 或主机名。 - SSH 用户:默认 `root`。 - 端口:默认 `22`。 - 分组:例如通信组、政府组、金融组、NV 环境等。 - 标签:可选,用于补充公共池、回归、临时等信息。 - 采集命令:海光选择 `hy-smi`,NVIDIA 选择 `nvidia-smi`。 保存后会立即采集一次,并自动识别卡数和型号。 ## 配置文件 真实服务器配置保存在: ```text data/servers.json ``` 示例配置: ```text data/servers.sample.json ``` 服务器配置支持 `group` 分组字段。页面会根据已有服务器自动生成分组筛选入口;`tags` 用于补充额外标签。 多站点入口配置保存在: ```text data/sites.json ``` 示例配置: ```text data/sites.sample.json ``` 每套部署可以维护自己的 `current` 和 `sites`。例如昆山服务可以把当前站点写成“昆山 / 天津中心”,并在 `sites` 里加入太原服务地址;太原服务则把当前站点写成“太原中心”,同时保留返回昆山服务的地址。`data/sites.json` 属于本地运行配置,不会提交到仓库。 程序会定期把服务器配置备份到: ```text data/backups/ ``` 默认保留最近 30 份备份。 ## 环境变量 Windows PowerShell 示例: ```powershell $env:PORT=3066 $env:POLL_INTERVAL_MS=10000 $env:SSH_TIMEOUT_MS=20000 npm start ``` Linux 示例: ```bash PORT=3066 POLL_INTERVAL_MS=10000 SSH_TIMEOUT_MS=20000 npm start ``` 常用配置: - `PORT`:网页端口,默认 `3066`。 - `POLL_INTERVAL_MS`:自动采集间隔,默认 `10000` 毫秒。 - `SSH_TIMEOUT_MS`:单台服务器 SSH/采集命令超时,默认 `20000` 毫秒。部分 NVIDIA 机器执行 `nvidia-smi` 较慢时可以继续调大。 - `REFRESH_CONCURRENCY`:GPU/DCU 状态采集并发数,默认 `8`。 - `ASSET_REFRESH_INTERVAL_MS`:模型资产和 Docker 镜像盘点间隔,默认 `1800000` 毫秒。 - `ASSET_SSH_TIMEOUT_MS`:单台服务器资产盘点 SSH 超时,默认 `30000` 毫秒。 - `ASSET_CONCURRENCY`:资产盘点并发数,默认 `3`。 - `ASSET_PATHS`:模型目录扫描路径,默认 `/models,/public,/data`。 - `ASSET_MAX_ITEMS`:每台服务器最多返回的模型条目和镜像条目数量,默认 `160`。 - `BACKUP_INTERVAL_MS`:服务器配置定期备份间隔,默认 `86400000` 毫秒。 - `BACKUP_RETENTION`:服务器配置备份保留份数,默认 `30`。 - `SITE_ID`:当前站点 ID,默认 `local`。 - `SITE_NAME`:当前站点显示名称,默认 `本地中心`。 - `SITE_DESCRIPTION`:当前站点说明,默认 `共享测试资源`。 - `SITE_URL`:当前站点访问地址,默认 `/`。 - `SITE_LINKS`:无 `data/sites.json` 时使用的站点列表,支持 JSON 数组,或 `名称|地址|说明;名称|地址|说明` 格式。 - `SSH_PATH`:自定义 SSH 程序路径。Windows 默认使用 `C:\Windows\System32\OpenSSH\ssh.exe`。 ## 运维命令 systemd 部署时常用命令: ```bash systemctl status gpu-dcu-monitor systemctl restart gpu-dcu-monitor journalctl -u gpu-dcu-monitor -f ``` 检查端口: ```bash ss -lntp | grep 3066 ``` ## 注意事项 - 如果页面能打开但服务器显示离线,优先在部署机器上手动执行 `ssh root@目标IP hy-smi` 或 `ssh root@目标IP nvidia-smi`。 - 如果 NVIDIA 服务器偶发超时,可以调大 `SSH_TIMEOUT_MS`。 - 如果多人共同查看,建议部署在一台固定机器上,由这台机器统一采集。 - 模型资产盘点默认不计算目录大小,避免对大模型盘产生明显 IO 压力。