README.md 5.95 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
- 右上角支持按服务器名称、IP、分组、标签和型号进行模糊搜索。
zk's avatar
zk committed
28
- 型号只在新增服务器和手动刷新时重新识别,日常自动刷新只采集占用数据。
zk's avatar
zk committed
29

zk's avatar
zk committed
30
## 环境准备
zk's avatar
zk committed
31

zk's avatar
zk committed
32
部署机器需要:
zk's avatar
zk committed
33

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

zk's avatar
zk committed
39
被监控服务器需要:
zk's avatar
zk committed
40

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

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

zk's avatar
zk committed
47
```bash
zk's avatar
zk committed
48
49
50
51
ssh root@10.0.0.12 hy-smi
ssh root@10.0.0.13 nvidia-smi
```

zk's avatar
zk committed
52
53
54
55
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
如果这里需要输入密码,网页里添加后也会采集失败。需要先把部署机器的 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
103

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

zk's avatar
zk committed
106
   RHEL/Kylin/CentOS 类系统:
zk's avatar
zk committed
107

zk's avatar
zk committed
108
109
110
111
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
159
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
   ```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
   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
189
190
191
192
193

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

zk's avatar
zk committed
194
示例配置:
zk's avatar
zk committed
195
196
197
198
199

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

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

## 环境变量

zk's avatar
zk committed
204
205
Windows PowerShell 示例:

zk's avatar
zk committed
206
207
208
```powershell
$env:PORT=3066
$env:POLL_INTERVAL_MS=10000
zk's avatar
zk committed
209
$env:SSH_TIMEOUT_MS=20000
zk's avatar
zk committed
210
211
212
npm start
```

zk's avatar
zk committed
213
214
215
216
217
218
Linux 示例:

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

zk's avatar
zk committed
219
220
221
222
常用配置:

- `PORT`:网页端口,默认 `3066`
- `POLL_INTERVAL_MS`:自动采集间隔,默认 `10000` 毫秒。
zk's avatar
zk committed
223
- `SSH_TIMEOUT_MS`:单台服务器 SSH/采集命令超时,默认 `20000` 毫秒。部分 NVIDIA 机器执行 `nvidia-smi` 较慢时可以继续调大。
zk's avatar
zk committed
224
225
- `SSH_PATH`:自定义 SSH 程序路径。Windows 默认使用 `C:\Windows\System32\OpenSSH\ssh.exe`

zk's avatar
zk committed
226
## 运维命令
zk's avatar
zk committed
227

zk's avatar
zk committed
228
systemd 部署时常用命令:
zk's avatar
zk committed
229

zk's avatar
zk committed
230
231
232
233
```bash
systemctl status gpu-dcu-monitor
systemctl restart gpu-dcu-monitor
journalctl -u gpu-dcu-monitor -f
zk's avatar
zk committed
234
235
```

zk's avatar
zk committed
236
检查端口:
zk's avatar
zk committed
237

zk's avatar
zk committed
238
239
```bash
ss -lntp | grep 3066
zk's avatar
zk committed
240
241
242
243
```

## 注意事项

zk's avatar
zk committed
244
245
246
- 如果页面能打开但服务器显示离线,优先在部署机器上手动执行 `ssh root@目标IP hy-smi``ssh root@目标IP nvidia-smi`
- 如果 NVIDIA 服务器偶发超时,可以调大 `SSH_TIMEOUT_MS`
- 如果多人共同查看,建议部署在一台固定机器上,由这台机器统一采集。