---
title: Pro6000
canonical_url: "https://www.modelscope.cn/studios/zzrzzr/Pro6000"
md_url: "https://www.modelscope.cn/studios/zzrzzr/Pro6000.md"
repository: zzrzzr/Pro6000
last_updated: 2026-09-16
sdk_type: streamlit
sdk_version: 5.49.1
downloads: 0
stars: 0
---

# Pro6000

> Pro6000 - zzrzzr 在 ModelScope 创建的在线 Demo。Streamlit 浅色看板，默认展示 node1–node5 全部 40 张 GPU。显存统一为 GiB；无模拟数据。 浏览器入口：https://modelscope.cn/studios/zzrzzr/Pro6000 （使用有权限的 ModelScope 账号登录）。

zzrzzr/Pro6000 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 streamlit 5.49.1 构建。

- **Repository**: zzrzzr/Pro6000
- **SDK**: streamlit
- **SDK version**: 5.49.1
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2026-09-16

Source: https://www.modelscope.cn/studios/zzrzzr/Pro6000

---

# Pro6000 实时 GPU 监控

Streamlit 浅色看板，默认展示 node1–node5 全部 40 张 GPU。显存统一为 GiB；无模拟数据。
浏览器入口：https://modelscope.cn/studios/zzrzzr/Pro6000 （使用有权限的 ModelScope 账号登录）。

## 部署

创空间 SDK 使用 **Streamlit**，免费 CPU，私有可见性。Python 依赖固定在 `requirements.txt`。
`streamlit run app.py --server.address 0.0.0.0 --server.port 7860` 或 `python app.py` 均可启动。
`app.py` 使用 Streamlit 的 `st.App` 同时提供页面及 HTTP 接口，无须 Docker 或额外端口。
在空间 Secret 中保留 `PRO6000_INGEST_TOKEN`。

本地安装：

```sh
uv venv
uv pip install --index-url https://mirrors.aliyun.com/pypi/simple -r requirements.txt
```

## 实时数据与显示

node1 原采集服务继续查询五个节点。每个节点八张卡，GPU、进程查询独立处理；未知指标为 null。
采集目标间隔 5 秒，实际可能因 SSH 或驱动查询而延长。浏览器每 5 秒读取最近快照，不保证每轮都有新采样。

`node/modelscope_agent.py` 每 5 秒读取本地 `http://127.0.0.1:8080/api/state` 并向云端上传。
`/etc/pro6000-modelscope.env` 为 root-only，包含：

```text
MODELSCOPE_SPACE_URL=https://studio-zzrzzr-pro6000.api-inference.modelscope.net
MODELSCOPE_API_TOKEN=<ModelScope 访问令牌>
PRO6000_INGEST_TOKEN=<空间 Secret 中相同的上传密钥>
PRO6000_UPLOAD_PROTOCOL=json
```

私有应用的程序调用使用上述专用 API 主机，浏览器使用 `ms.show` 及平台登录 Cookie。
上报认证头为 `Authorization: Bearer ...` 和 `X-Pro6000-Token: ...`。

- `POST /api/ingest`：JSON 快照，返回 `accepted`、`updated`、`gpu_count`。无效密钥 403，无效数据 400，超出 2 MB 为 413，旧快照 409。
- `GET /api/state`：最近快照及 `server_time`，`Cache-Control: no-store`。云端由 ModelScope 私有空间入口控制访问；本地启动时应限制监听网络。
- 快照沿用 `updated`、`nodes.node1`～`nodes.node5`、各节点 `online/updated/data_status/gpus`。原始显存仍为 MiB，显示除以 1024。

页面通过固定实例的 Streamlit Components v2 接收 JSON，仅更新变化字段，不定时重跑 Streamlit 脚本或替换看板 HTML。
筛选保留；GPU 指标排序只在主动选择排序或点击重新排序时调整。
用户用量榜始终单行横排；每个节点的 8 张 GPU 也始终同排。窄屏在对应区域横向滚动，可通过触屏、滚动条或键盘操作；自动更新保留滚动位置。
节点显示确认空闲数量与 GPU 编号，可一键筛选空闲卡或打开详情。只有新鲜、完整且无进程、零利用率、零显存的卡才计为空闲。
卡片直接展示全部用户及各自进程显存合计；用户榜随节点切换范围，独立于搜索及 GPU 状态筛选，并始终按显存降序排列。
同卡进程按节点、GPU、PID 去重后累加显存；进程数量按节点、PID 去重，跨卡显存仍累加。未知显存不计作零，部分已知时以 ≥ 标注。
计算负载及显存占比分别着色：低于 30% 蓝色、30–60% 黄色、60–85% 橙色、85% 及以上红色；确认空闲单独使用绿色。
详情展示用户排行和按用户分组的实时进程表。浏览器和采集器不积累历史采样；本地接口仅保留空 history 数组以兼容旧客户端。
暂停仅停止当前浏览器获取快照，后台采集和上传继续运行。手动更新在暂停时也可用。
30 秒未获得新鲜数据标记过期，保留最后记录；超时会重试。空间重启后等待下一次上报恢复。

## 测试与回滚

```sh
uv pip install httpx
python -m unittest discover -s tests -v
node --test tests/metrics.test.cjs
```

浏览器回归：安装 Playwright 和 Chromium，在测试服务运行时执行 `python tests/browser_realtime.py`。
浏览器测试使用本地请求拦截数据，不向生产环境注入模拟快照。

检查 `systemctl status pro6000-modelscope-agent` 与 `journalctl -u pro6000-modelscope-agent`。
上传程序同时保留 Gradio 协议以便回滚：恢复升级前 Git 版本和 Gradio 5.49.1 设置，
将 `PRO6000_UPLOAD_PROTOCOL=gradio` 并重启上传服务。
本次用户用量改版的上一版本为 `d2dad62`（Streamlit）。node1 采集器备份保存在 `/root/.config/pro6000-deploy/allocation-rollback-20260916-171909/server.py`；该目录同时记录上版 Git 提交。回滚本次界面不需要切换回 Gradio。
默认不写入任何 Token、SSH 私钥或完整命令行到仓库、浏览器或日志。

## 设计参考

- [nvidia-smi-web/dashboard](https://github.com/nvidia-smi-web/dashboard)：浅色分组布局、双进度条、进程详情。
- [nvitop](https://github.com/XuehaiPan/nvitop)：GPU 与进程对应展示。

界面为本项目独立实现，采集服务保持只读。
