gpu-observatory
v2.1.0
Published
Self-hosted, push-based dashboard showing which user and process is using every NVIDIA GPU across your hosts, plus CPU, memory, disk and Slurm.
Maintainers
Readme
GPU Observatory
在一个紧凑的面板里,查看多台主机的显卡由哪个用户、哪个进程占用。
English · 给 Agent 的部署文档 · 安全说明 · MIT 许可
这是一个自托管、主动上报的 NVIDIA GPU 监控面板,同时支持 CPU、系统内存以及可选的 Slurm 队列。各台主机向中心服务器推送数据,登录后统一查看。

所有效果图均来自独立的虚拟面板。主机名、用户、任务和指标全部为合成数据,不包含真实部署信息。
用户与设备管理
管理员可以创建用户账号,并查看仅含所属用户、设备名称和 GPU 型号的设备清单。每个用户拥有独立的“我的设备”页面,只查看和管理自己的设备;可以添加、重命名和移除设备。点击“添加设备”后复制安装命令,在自己的 Linux GPU 服务器上运行,即可自动安装依赖、注册到当前中心并通过隔离的 PM2 启动上报端,无需 sudo。安装链接 15 分钟有效,只能注册一次。

用户管理与升级文档包含账号权限、一键安装、撤销凭据、失败恢复和旧版本迁移。原账号自动成为管理员,原设备继续归它所有。
功能
- 历史分析:SQLite 保存历史汇总,查看每日利用率、显存趋势、GPU 用量与进程用户占卡排行;支持日期和设备筛选。存储与统计口径
- GPU 利用率、显存、温度、功耗;展开查看用户名、PID、进程名与占用显存。
- CPU 独立标签页:总利用率、各核心热力图、负载、进程占用和用户。
- 内存独立标签页:RAM、可用内存、缓存、Swap、带用户名的进程 RSS 排名。RSS 包含共享页,不能直接相加作为用户独占内存。
- 硬盘独立标签页:本地物理文件系统的总量、已用/可用空间、占用率、挂载点、设备和只读状态;并后台扫描可读的共享数据根目录(
/mnt/ssd、/mnt/data_*、/mnt/nas/*),按顶层目录 owner 提供尽力而为的按用户用量统计。网络、临时及无权限目录不计入或标记为部分结果。 - 可选 Slurm 面板:账号可见的排队/运行任务、分区、原因、优先级、等待和运行时长;并新增按用户汇总的参数表,展示全集群的 FairShare 因子、标准化份额、已用/有效用量(带衰减)以及运行中 GPU / CPU 小时(由当前运行作业的 TRES 分钟数换算),数据只读取自
sshare。前端每秒推算时长,过期数据停止推算。 - 中文/英文切换、紧凑布局、搜索、空闲筛选、点击展开、移动端适配、PWA 安装。
- GPU/CPU/内存/硬盘每 5 秒上报;Slurm 至少间隔 60 秒查询。中心服务器不会通过 SSH 轮询主机。
- 密码登录、每台主机独立令牌、HTTPS、接口限流;PM2 用户态部署,无需 sudo。
与其他方案的对比
GPU Observatory 介于单机终端工具和完整的监控体系之间,面向共享 GPU 服务器或 Slurm 集群的实验室和小团队,重点回答"哪张卡空着、其余的卡被谁占着"。
| | GPU Observatory | nvitop / gpustat | gpustat-web | DCGM Exporter + Prometheus + Grafana |
| --- | --- | --- | --- | --- |
| 多主机统一查看 | ✅ | ❌ 每个终端看一台 | ✅ | ✅ |
| 采集方式 | 主机通过出站 HTTPS 主动上报 | 仅本机 | 中心通过 SSH 轮询主机 | Prometheus 拉取(每台主机需开放入站端口) |
| GPU 进程对应用户名 | ✅ 含 PID、进程名、显存 | ✅ | ✅ | ❌ 默认没有 |
| 历史数据 | ✅ SQLite:30 天分钟汇总、365 天每日汇总、用户排行 | ❌ 仅实时 | ❌ 仅实时 | ✅ 灵活,取决于保留策略 |
| CPU / 内存 / 硬盘 | ✅ 各核心、进程 RSS、按用户硬盘用量 | 部分(nvitop 显示主机 CPU/内存) | ❌ | ✅ 需 node_exporter |
| Slurm | ✅ 内置且只读:队列、排队原因、FairShare、GPU 小时 | ❌ | ❌ | 需另装 exporter 和面板 |
| GPU 主机需要 root / sudo | ❌ 用户态 PM2 | ❌ | ❌(但需要 SSH 权限) | 通常以系统服务安装 |
| 账号体系 | ✅ 按用户管理设备,有管理员角色 | — | ❌ | ✅ Grafana 用户 |
| 添加主机 | 一次性安装链接(15 分钟有效,仅能使用一次) | pip install | 修改 SSH 主机列表 | 部署 exporter 并修改抓取配置 |
| 移动端 | ✅ 响应式界面,可安装为 PWA | ❌ | 简单网页 | Grafana 网页 |
| 告警 | ❌ | ❌ | ❌ | ✅ Alertmanager |
| 平台 | Linux + NVIDIA 上报端 | NVIDIA | NVIDIA | NVIDIA |
只想快速查看一台机器,用 nvitop 或 gpustat;需要告警、大规模集群或长期自定义查询,用 Prometheus/Grafana。需要跨几台主机看清每张卡被谁占用、没法安装 root 服务,或者想把 Slurm 和 GPU 用量放在同一个页面上,用 GPU Observatory。
必须有一台中心服务器
可以是 VPS、家用服务器、Mac 或长期在线的工作站,不需要 GPU。它负责运行网站并接收所有主机的 HTTPS 上报,因此需要持续开机联网。中心运行 Node.js 22.16+;GPU 上报端目前支持 Linux NVIDIA 主机,需要 Python 3.10+、可用驱动/NVML,以及管理进程的 Node/PM2。
没有域名:使用 Cloudflare Quick Tunnel 起步。 无需注册 Cloudflare 账号或购买域名,会获得随机的 *.trycloudflare.com HTTPS 地址。但隧道每次重启后地址都会变化,需要更新中心配置及所有上报端地址。它面向开发测试,没有可用性保证,有 200 并发请求限制,不支持 SSE;本项目使用轮询。官方说明
长期使用:推荐自己的域名和具名隧道。 地址固定,上报端、书签和已安装的桌面应用都更方便;需要 Cloudflare 账号与已配置的域名,也可使用已有的 HTTPS 反向代理。
先试试虚拟面板
不需要 GPU、账号或 Python 依赖,只要 Node.js 22.16+:
npx gpu-observatory demo在克隆的仓库里运行 npm run demo 效果相同。
打开 http://127.0.0.1:8790。演示服务仅监听本机,只使用虚构数据,不读取真实机器指标或生产配置,不能作为正式部署使用。
快速开始
在中心服务器上安装(Node.js 22.16+,不需要 sudo,也不需要 GPU):
npm install -g gpu-observatory
gpu-observatory setup --quick-tunnel # 或 --origin https://monitor.example.com,或 --tunnel-config 文件setup 会生成私有配置、安装隔离的用户态 PM2 并启动中心;使用 --quick-tunnel 时会自动获取随机 HTTPS 地址并写入配置。命令会提示首次登录凭据所在的文件,凭据本身不会打印出来。登录后在 我的设备 → 添加设备 复制一次性安装命令,到每台 Linux GPU 服务器上运行即可。
日常管理:gpu-observatory status | logs | restart | stop | url。升级:npm install -g gpu-observatory@latest && gpu-observatory restart,~/.local/share/gpu-observatory-hub 中的数据和配置会保留。运行 gpu-observatory --help 查看全部命令。
让 Agent 帮你部署
把下面的话交给 Agent,并私下提供中心服务器及 GPU 主机的 SSH 信息:
按照 AGENTS.md 和 docs/DEPLOYMENT_FOR_AGENTS.md 部署 GPU Observatory。使用一台中心服务器,先接入一台 GPU 主机验证,再接入其余已授权主机。如果我没有域名,使用 Cloudflare Quick Tunnel,并说明地址变化后的处理方式。密码、令牌和主机清单放在仓库外。使用隔离的用户态 PM2,不使用 sudo。验证鉴权、数据新鲜度和进程恢复;接入 Slurm 前检查集群政策。
完整部署文档包含初始化、两种隧道方案、单独注册主机、上报端安装、PM2、Linux 开机恢复、macOS 登录后启动、Slurm、故障排查、更新和回滚。集群上的持久进程及开机设置需要符合所在站点政策。
Quick Tunnel 换址后,gpu-observatory set-origin --origin <新地址> 会保留凭据并更新中心配置和本地注册文件;还需要将各自的配置安全分发至对应上报端并重启。它不会自动修改远端主机。换址步骤
更多效果图





用户参数表直接读取调度器的关联(association)数据,仅作只读遥测,不会提交、占位或取消任何作业。
使用边界
本项目面向小型主机集群,保存实时快照及 SQLite 历史汇总,默认保留 30 天分钟汇总和 365 天每日汇总。它不是分布式监控或企业级身份平台。不同用户分别登录,只能查看自己的设备及分配给自己的 Slurm 来源;管理员负责管理账号,中心重启后需要重新登录。进程可见性取决于操作系统权限;未知数据不会伪装成零。
Slurm 只显示采集账号被允许查看的任务,空队列不代表集群空闲。部署时无需提交 GPU 测试任务。PWA 安装取决于浏览器、操作系统和 HTTPS 条件;离线时只展示占位页,不缓存私有指标。
开发与测试步骤见 English README 和 CONTRIBUTING.md。使用 gpustat、psutil 及 NVIDIA NVML 绑定;项目采用 MIT 许可,依赖保留各自许可。
