README.md 7.31 KB
Newer Older
zk's avatar
zk committed
1
2
# GPU/DCU 资源看板

zk's avatar
zk committed
3
一个通过 SSH 采集服务器 GPU/DCU 占用情况的 Web 看板。适合集中查看多台服务器的加速卡状态,支持海光 DCU 和 NVIDIA GPU。
zk's avatar
zk committed
4

zk's avatar
zk committed
5
看板会定时在目标服务器上执行 `hy-smi``nvidia-smi`,展示每台服务器的卡数、型号、显存占用、算力占用、温度、功耗、在线状态和分组信息。
zk's avatar
zk committed
6

zk's avatar
zk committed
7
## 界面预览
zk's avatar
zk committed
8

zk's avatar
zk committed
9
主界面:
zk's avatar
zk committed
10

zk's avatar
zk committed
11
![主界面](docs/主界面.png)
zk's avatar
zk committed
12

zk's avatar
zk committed
13
添加服务器:
zk's avatar
zk committed
14

zk's avatar
zk committed
15
![添加服务器界面](docs/添加服务器界面.png)
zk's avatar
zk committed
16

zk's avatar
zk committed
17
## 功能
zk's avatar
zk committed
18

zk's avatar
zk committed
19
20
21
22
23
24
- 添加、编辑、删除服务器。
- 按服务器状态和分组筛选。
- 支持海光 DCU:通过 `hy-smi` 采集占用,通过 `hy-smi --showproductname` 识别型号。
- 支持 NVIDIA GPU:通过 `nvidia-smi` 采集占用和识别型号。
- 自动识别卡数,不需要手动填写 4 卡或 8 卡。
- 同时显示显存占用和算力占用。
zk's avatar
zk committed
25
- 根据显存占用和算力占用综合判断每张卡是否可用。
zk's avatar
zk committed
26
- 主界面用水位色块展示每张卡的显存和算力占用。
zk's avatar
zk committed
27
- 盘点每台服务器 `/models``/public``/data` 等目录下的模型文件/目录,并展示 Docker images。
zk's avatar
zk committed
28
29
- 提供“模型镜像检索”视图,按模型名、路径、Docker 镜像名或 tag 查找资产所在服务器。
- 检索结果显示服务器分组、IP、当前占用状态,并支持复制 IP、SSH 命令、模型路径和镜像名称。
zk's avatar
zk committed
30
- 右上角支持按服务器名称、IP、分组、标签、型号、模型路径和镜像名称进行模糊搜索。
zk's avatar
zk committed
31
- 型号只在新增服务器和手动刷新时重新识别,日常自动刷新只采集占用数据。
zk's avatar
zk committed
32
- 定期备份服务器配置文件,便于误操作后恢复。
zk's avatar
zk committed
33

zk's avatar
zk committed
34
## 环境准备
zk's avatar
zk committed
35

zk's avatar
zk committed
36
部署机器需要:
zk's avatar
zk committed
37

zk's avatar
zk committed
38
39
40
41
- Node.js:建议 18 或更高版本;当前代码兼容 Node.js 12+。
- npm:通常随 Node.js 一起安装。
- OpenSSH 客户端:需要能执行 `ssh`
- 网络能访问被监控服务器的 SSH 端口,默认 `22`
zk's avatar
zk committed
42

zk's avatar
zk committed
43
被监控服务器需要:
zk's avatar
zk committed
44

zk's avatar
zk committed
45
46
47
- 海光 DCU 服务器能执行 `hy-smi`
- NVIDIA GPU 服务器能执行 `nvidia-smi`
- 部署机器必须能免密 SSH 登录被监控服务器。
zk's avatar
zk committed
48

zk's avatar
zk committed
49
添加服务器前,先在部署机器上验证免密访问和采集命令,例如:
zk's avatar
zk committed
50

zk's avatar
zk committed
51
```bash
zk's avatar
zk committed
52
53
54
55
ssh root@10.0.0.12 hy-smi
ssh root@10.0.0.13 nvidia-smi
```

zk's avatar
zk committed
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
如果这里需要输入密码,网页里添加后也会采集失败。需要先把部署机器的 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 部署
zk's avatar
zk committed
107

zk's avatar
zk committed
108
1. 安装 Node.js、npm 和 OpenSSH 客户端。
zk's avatar
zk committed
109

zk's avatar
zk committed
110
   RHEL/Kylin/CentOS 类系统:
zk's avatar
zk committed
111

zk's avatar
zk committed
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
   ```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
zk's avatar
zk committed
159
   Environment=ASSET_REFRESH_INTERVAL_MS=1800000
zk's avatar
zk committed
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
   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`

保存后会立即采集一次,并自动识别卡数和型号。

## 配置文件

真实服务器配置保存在:
zk's avatar
zk committed
194
195
196
197
198

```text
data/servers.json
```

zk's avatar
zk committed
199
示例配置:
zk's avatar
zk committed
200
201
202
203
204

```text
data/servers.sample.json
```

zk's avatar
zk committed
205
服务器配置支持 `group` 分组字段。页面会根据已有服务器自动生成分组筛选入口;`tags` 用于补充额外标签。
zk's avatar
zk committed
206

zk's avatar
zk committed
207
208
209
210
211
212
213
214
程序会定期把服务器配置备份到:

```text
data/backups/
```

默认保留最近 30 份备份。

zk's avatar
zk committed
215
216
## 环境变量

zk's avatar
zk committed
217
218
Windows PowerShell 示例:

zk's avatar
zk committed
219
220
221
```powershell
$env:PORT=3066
$env:POLL_INTERVAL_MS=10000
zk's avatar
zk committed
222
$env:SSH_TIMEOUT_MS=20000
zk's avatar
zk committed
223
224
225
npm start
```

zk's avatar
zk committed
226
227
228
229
230
231
Linux 示例:

```bash
PORT=3066 POLL_INTERVAL_MS=10000 SSH_TIMEOUT_MS=20000 npm start
```

zk's avatar
zk committed
232
233
234
235
常用配置:

- `PORT`:网页端口,默认 `3066`
- `POLL_INTERVAL_MS`:自动采集间隔,默认 `10000` 毫秒。
zk's avatar
zk committed
236
- `SSH_TIMEOUT_MS`:单台服务器 SSH/采集命令超时,默认 `20000` 毫秒。部分 NVIDIA 机器执行 `nvidia-smi` 较慢时可以继续调大。
zk's avatar
zk committed
237
238
239
240
241
242
243
244
- `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`
zk's avatar
zk committed
245
246
- `SSH_PATH`:自定义 SSH 程序路径。Windows 默认使用 `C:\Windows\System32\OpenSSH\ssh.exe`

zk's avatar
zk committed
247
## 运维命令
zk's avatar
zk committed
248

zk's avatar
zk committed
249
systemd 部署时常用命令:
zk's avatar
zk committed
250

zk's avatar
zk committed
251
252
253
254
```bash
systemctl status gpu-dcu-monitor
systemctl restart gpu-dcu-monitor
journalctl -u gpu-dcu-monitor -f
zk's avatar
zk committed
255
256
```

zk's avatar
zk committed
257
检查端口:
zk's avatar
zk committed
258

zk's avatar
zk committed
259
260
```bash
ss -lntp | grep 3066
zk's avatar
zk committed
261
262
263
264
```

## 注意事项

zk's avatar
zk committed
265
266
267
- 如果页面能打开但服务器显示离线,优先在部署机器上手动执行 `ssh root@目标IP hy-smi``ssh root@目标IP nvidia-smi`
- 如果 NVIDIA 服务器偶发超时,可以调大 `SSH_TIMEOUT_MS`
- 如果多人共同查看,建议部署在一台固定机器上,由这台机器统一采集。
zk's avatar
zk committed
268
- 模型资产盘点默认不计算目录大小,避免对大模型盘产生明显 IO 压力。