第 7 章
GPU 监控与虚拟化
集群跑起来之后,日常运维要回答三个问题:机器还活着吗?GPU 健康吗、有没有被用满?一张卡能不能分给多个人用?这一章依次讲管理面、GPU 监控和 GPU 虚拟化。
管理面:BMC 与带外网络
BMC
BMC(基板管理控制器)是焊在服务器主板上的一台独立小电脑,有自己的处理器、网口和固件。只要服务器插着电,哪怕操作系统死机、甚至整机关着,BMC 都在工作。它能做的事:
- 电源控制:远程开机、关机、强制重启;
- 硬件传感器:温度、风扇转速、电压、电源状态;
- 事件日志(SEL):记录硬件故障,比如内存报错、电源掉电;
- 远程控制台(KVM):在浏览器里看到服务器的显示器画面,像坐在机器前面一样操作,包括进 BIOS;
- 虚拟介质:把远程的系统镜像挂载成服务器的光驱,远程重装系统;
- 固件更新:升级 BIOS 和各种硬件固件。
访问 BMC 的协议主要有两种:老一代的 IPMI,和现在主推的 Redfish(基于 HTTPS 的 REST API,返回 JSON,方便自动化)。第 3 章的 DGX H100 规格里,BMC 有单独的 1 GbE 网口,支持 Redfish、IPMI、SNMP 和 KVM。
# 用 ipmitool 查询远程服务器的电源状态(-a 会提示输入密码)
ipmitool -I lanplus -H <BMC 地址> -U <用户名> -a chassis power status
# 读取传感器和硬件事件日志
ipmitool -I lanplus -H <BMC 地址> -U <用户名> -a sdr list
ipmitool -I lanplus -H <BMC 地址> -U <用户名> -a sel list
# 用 Redfish 查询系统信息
curl -k -u <用户名> https://<BMC 地址>/redfish/v1/Systems
带外管理网络
BMC 的网口接在带外管理网络上,这就是第 4 章四张网里的最后一张。它和业务网络物理隔离,有两个原因:
- 可用性:服务器系统崩溃、带内网络出故障时,仍然能通过带外网络远程排查和恢复,不用派人进机房;
- 安全:BMC 权限极高(能开关机、能重装系统),历史上漏洞也不少,必须放在隔离的网络里,绝不能暴露到公网。
交换机、PDU、存储设备的管理口一般也接在带外网络上。
数据中心管理还包括什么
除了远程控制,大规模集群的日常管理还包括:资产台账(每台机器的型号、序列号、位置)、固件和驱动版本的一致性、作业开始前的节点健康检查、指标采集和告警。这些工作大多由第 6 章的 BCM 这类集群管理软件统一完成。
网络本身也要监控:InfiniBand 网络用 UFM 查看链路状态、拥塞和错误计数,NVIDIA 的以太网交换机用 NetQ。多机训练变慢时,除了看 GPU,也要排查是不是某条链路出了问题。
GPU 监控看什么
核心指标
| 指标 | 看什么 | 异常意味着 |
|---|---|---|
| 利用率 | GPU 忙不忙 | 长期偏低说明资源浪费,要查瓶颈 |
| 显存占用 | 用了多少显存 | 接近上限会 OOM;占着显存却不计算说明有闲置进程 |
| 温度 | GPU 核心和显存温度 | 过高会降频,长期高温影响寿命 |
| 功耗 | 当前功耗和功耗上限 | 顶到上限会降频 |
| 时钟与降频原因 | 当前频率,是否因功耗或温度降频 | 性能下降时先看这里 |
| ECC 错误 | 显存的可纠正和不可纠正错误 | 不可纠正错误要重置 GPU,频繁出现要考虑换卡 |
| XID 错误 | 驱动报告的错误事件 | 区分硬件故障还是应用问题 |
| NVLink / PCIe | 吞吐和链路错误 | 链路错误会让多卡通信变慢甚至失败 |
GPU-Util 为什么会骗人
nvidia-smi 显示的 GPU-Util,定义是:采样周期内,有至少一个 kernel 在 GPU 上运行的时间占比。它只说明 GPU"在干活",不说明"干了多少活"。一个只用到几个 SM 的小 kernel 一直在跑,GPU-Util 也能显示 100%,实际上大部分计算单元闲着。
要看真实的计算效率,得用 DCGM 的性能分析指标:
| 指标 | 含义 |
|---|---|
DCGM_FI_PROF_SM_ACTIVE | SM 处于活跃状态的时间比例 |
DCGM_FI_PROF_SM_OCCUPANCY | SM 上驻留的线程束占最大容量的比例 |
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE | Tensor Core 的活跃比例 |
DCGM_FI_PROF_DRAM_ACTIVE | 显存带宽的利用程度 |
ECC 错误
数据中心 GPU 的显存带 ECC(错误检查与纠正):
- 可纠正错误(单比特错误):硬件自动纠正,程序无感。偶尔出现正常,数量持续增长说明显存可能在老化;
- 不可纠正错误(双比特错误):数据已经错了,正在运行的程序会出错,需要重置 GPU。
计数分两种:volatile 从驱动上次加载起计,aggregate 是这张卡整个生命周期的累计。从 A100 开始,GPU 用行重映射(row remapping)处理有问题的显存行:把坏行换到备用行上,重置 GPU 后生效。备用行用完了,就该换卡了。
XID 错误
XID 是 NVIDIA 驱动报告错误事件的编号,出现在系统内核日志里:
dmesg | grep -i xid
不用背编号,知道几个典型的,理解"XID 能帮你区分是硬件坏了还是程序写错了"就行:
| XID | 含义 | 通常指向 |
|---|---|---|
| 13 | 图形引擎异常 | 多半是应用程序的问题 |
| 31 | GPU 显存页错误(非法地址访问) | 多半是应用程序的问题 |
| 48 | 双比特 ECC 错误 | 显存硬件 |
| 79 | GPU 从总线上掉了(fallen off the bus) | 硬件、PCIe、供电或过热 |
降频
GPU 频率下降时,驱动会记录原因,常见的有:功耗达到上限(SW Power Cap)、温度过高(HW / SW Thermal Slowdown)、硬件保护触发的降速(HW Slowdown)。训练变慢时先查这里:
nvidia-smi -q -d PERFORMANCE
GPU 利用率低的常见原因
- 数据喂不饱:数据加载、解码、预处理跟不上,GPU 等 CPU 或存储(第 1、4 章);
- 批太小:每次计算量太小,kernel 启动开销占了大头;
- 通信等待:多机训练时网络慢,GPU 在等 all-reduce(第 4 章);
- CPU 亲和性不对:数据加载进程跑在离 GPU 远的 CPU 上(第 3 章
topo -m的 CPU Affinity); - 没用上 Tensor Core:还在用 FP32 计算,没开混合精度;
- 分配了却不用:交互式开发占着整卡,大部分时间空闲。这个靠调度(第 6 章)和 GPU 共享(本章后半)解决。
nvidia-smi 与 DCGM
| nvidia-smi | DCGM | |
|---|---|---|
| 定位 | 单机命令行工具,随驱动安装 | 数据中心级的 GPU 管理和监控框架 |
| 范围 | 本机的 GPU | 可以统一管理一组 GPU、多个节点 |
| 适合 | 临时查看、简单脚本 | 长期监控、健康检查、自动化 |
| 性能分析指标 | 只有 GPU-Util 这类粗粒度指标 | SM Active、Tensor Active 等细粒度指标 |
| 诊断 | 无 | 分级主动诊断 |
| 告警策略 | 无 | 可以设置策略,出现特定错误时自动响应 |
nvidia-smi 常用法
nvidia-smi # 总览
nvidia-smi -q # 详细信息,可用 -d 指定类别(ECC、PERFORMANCE、POWER 等)
nvidia-smi dmon # 按秒滚动输出功耗、温度、利用率
nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used,temperature.gpu,power.draw \
--format=csv -l 5 # 每 5 秒输出一行 CSV,方便脚本处理
DCGM
DCGM(Data Center GPU Manager)由一个后台服务 nv-hostengine 和命令行工具 dcgmi 组成:
- 健康监控:后台持续监测 ECC、XID、温度、功耗、NVLink 等,发现问题及时报告;
- 主动诊断:
dcgmi diag -r 1到-r 4,级别越高检查越全面、耗时越长,从几秒的快速检查到一两个小时的压力测试。新机器上线、作业开始前、怀疑硬件有问题时跑; - 策略:设置规则,比如出现双比特 ECC 错误时自动通知或执行动作;
- 指标导出:DCGM Exporter 把指标暴露给 Prometheus,再用 Grafana 画看板、配告警。第 6 章的 GPU Operator 会自动部署它。
实验室的 GPU 服务器监控也是 Prometheus + Grafana 这套思路,不过用的是 nvidia_gpu_exporter,它通过调用 nvidia-smi 取数据,消费级显卡也能用,但拿不到 SM Active 这类细粒度指标。
动手:读懂自己机器上的 nvidia-smi
数据盘上架那篇里截过一台双卡 RTX 4000 Ada 服务器的 nvidia-smi,对照本章逐项看:
| 字段 | 截图里的值 | 含义 |
|---|---|---|
| Driver Version | 595.71.05 | 驱动版本 |
| CUDA Version | 13.2 | 这版驱动最高支持的 CUDA 版本,不是装了哪个 Toolkit(第 2 章) |
| Persistence-M | Off | 持久模式关闭:没有程序用 GPU 时驱动会卸载状态,下次启动程序要多花点时间初始化。服务器上一般建议打开 |
| Perf | P8 | 性能状态,P0 最高,P8 是空闲时的低功耗状态 |
| Pwr:Usage/Cap | 4W / 130W | 当前功耗 / 功耗上限 |
| Volatile Uncorr. ECC | Off | ECC 功能处于关闭状态;不支持 ECC 的卡这里显示 N/A |
| GPU-Util | 0% | 空闲,没有 kernel 在跑 |
| Compute M. | Default | 计算模式,Default 表示允许多个进程同时使用 |
GPU 虚拟化与共享
为什么要共享
一张数据中心 GPU 很贵,但很多负载用不满一整张卡:小模型推理、Jupyter 开发、CI 测试。另外,很多企业的基础设施建在虚拟机上(比如 VMware),GPU 也要能分给虚拟机用。
几种方式
直通(Passthrough):把整张物理 GPU 直接分配给一台虚拟机。性能接近物理机,但一张卡只能给一台虚拟机,谈不上共享。
vGPU:NVIDIA 的 vGPU 软件装在虚拟化平台(VMware vSphere、基于 KVM 的平台等)上,把一张物理 GPU 分给多台虚拟机:
- 显存按配置文件(profile)静态切分,每台虚拟机拿固定的一份;
- 计算默认按时间片轮流使用,也可以基于 MIG 做硬件切分;
- 需要购买许可证,通过 NVIDIA License System 管理授权;
- 按用途有不同的授权版本:办公桌面(vPC、vApps)、专业图形工作站(RTX vWS)、AI 和计算负载(包含在 NVIDIA AI Enterprise 里);
- 宿主机上的 vGPU Manager 和虚拟机里的驱动版本要匹配。
MIG(多实例 GPU):从 Ampere 开始的硬件级切分。A100、H100、H200、B200 等最多能切成 7 个实例,每个实例有自己独占的 SM、L2 缓存、显存和显存带宽:
- 实例之间性能互不干扰,一个实例出错不影响其他实例;
- 按固定的配置切,比如 A100 80GB 可以切成
1g.10gb(七分之一的算力、10 GB 显存)、3g.40gb等规格; - 裸机、容器、虚拟机(配合 vGPU)都能用;
- 只有部分数据中心卡和专业卡支持,实验室的 3090 这类消费卡不支持。
时间片(Time-Slicing):K8s 的 Device Plugin 可以配置成把一张卡"虚报"成多张,多个 Pod 轮流使用。配置简单、任何卡都能用,但显存不隔离(每个进程都能看到全部显存,一个进程吃满显存别人就 OOM),也没有错误隔离。
MPS(多进程服务):让多个进程的 kernel 真正同时在 GPU 上运行,而不是轮流,能提高小负载的利用率。可以限制每个进程能用的 SM 比例,但隔离程度不如 MIG。
对照
| 方式 | 隔离程度 | 共享粒度 | 适用环境 | 额外成本 | 适合 |
|---|---|---|---|---|---|
| 直通 | 独占 | 整卡 | 虚拟机 | 无 | 需要整卡性能的虚拟机 |
| vGPU | 显存隔离,计算默认分时 | 按 profile | 虚拟机 | 需要许可证 | 虚拟桌面、虚拟化环境下的 AI |
| MIG | 硬件级,算力和显存都隔离 | 固定规格,最多 7 份 | 裸机、容器、虚拟机 | 无(限支持的型号) | 多租户推理、需要稳定 QoS 的场景 |
| 时间片 | 几乎不隔离 | 任意份数 | K8s | 无 | 开发、测试等不挑性能的轻负载 |
| MPS | 部分隔离 | 按 SM 比例 | 裸机、容器 | 无 | 同一用户的多个小进程 |
选择时考虑什么
- 隔离要求:多租户、对外服务要硬件级隔离(MIG),内部开发测试时间片就够;
- 性能可预期性:时间片下邻居负载一重,你的延迟就抖;MIG 的性能是固定的;
- 环境:虚拟机环境要看 vGPU 或直通,容器环境看 MIG、时间片、MPS;
- 型号支持:MIG 只有部分型号支持,vGPU 也有支持列表;
- 授权成本:vGPU 需要许可证;
- 运维:MIG 的切分方案改起来要先停掉卡上的任务;虚拟机能否热迁移取决于虚拟化平台和 vGPU 的支持;
- 监控:虚拟化之后,要能看到每个实例、每台虚拟机的 GPU 使用情况,DCGM 支持按 MIG 实例采集指标。
安全与隔离
前几章陆续提到的隔离措施,放在一起看就是 AI 基础设施的安全面:
- 网络隔离:四张网物理分开,带外管理网络不接公网(第 4 章、本章前半);多租户之间再用 VLAN、VXLAN 隔开;
- 基础设施与租户隔离:基础设施的控制面跑在 DPU 上,和主机分属两个信任域,主机被攻破也改不了网络和安全策略(第 4 章);
- GPU 隔离:多租户共用 GPU 要用 MIG 这类硬件隔离,时间片不隔离显存,不适合互不信任的用户;
- 机密计算:从 H100 开始,GPU 支持机密计算(Confidential Computing)。CPU 和 GPU 之间传输的数据加密,GPU 上的计算由硬件隔离保护,宿主机、管理员和云厂商都看不到正在处理的数据和模型。以前的加密只保护存储中和传输中的数据,机密计算补上了"使用中"这一块;
- 安全启动与固件:服务器、GPU、DPU 的固件都带签名,启动时由硬件信任根逐级验证,被篡改的固件无法运行。固件更新要走官方渠道,全集群保持版本一致;
- 数据与访问控制:训练数据和模型权重是核心资产。存储按项目划分权限,静态数据和传输中的数据加密;谁能用哪些资源,由调度系统的账户和 K8s 的 RBAC 控制;操作留审计日志;
- 软件供应链:用 NGC 这类经过安全扫描的官方镜像,靠 AI Enterprise 这类渠道及时获得安全补丁(第 2 章)。
速查
| 词 | 一句话 |
|---|---|
| BMC | 主板上的独立小电脑,系统死了也能远程开关机、看画面、重装 |
| IPMI / Redfish | 访问 BMC 的老协议 / 新的 REST API |
| 带外管理网络 | BMC 等管理口专用的隔离网络 |
| GPU-Util | 有 kernel 在跑的时间占比,不等于算力用满 |
| SM Active | DCGM 的指标,更接近真实计算利用率 |
| ECC 可纠正 / 不可纠正 | 硬件自动修 / 数据已错,要重置 GPU |
| 行重映射 | A100 起用备用行替换坏的显存行 |
| XID | 驱动错误编号,看 dmesg |
| DCGM | 数据中心级 GPU 监控、诊断、策略框架 |
| DCGM Exporter | 把 GPU 指标交给 Prometheus |
| 直通 | 整卡给一台虚拟机 |
| vGPU | 一卡分给多台虚拟机,需要许可证 |
| MIG | 硬件切分,最多 7 个完全隔离的实例 |
| 时间片 | 轮流用,不隔离显存 |
| 机密计算 | H100 起支持,保护"使用中"的数据和模型 |
| UFM / NetQ | InfiniBand / NVIDIA 以太网的网络监控 |
| MPS | 多进程同时跑 kernel,部分隔离 |