第 7 章

GPU 监控与虚拟化

·约 21 分钟

集群跑起来之后,日常运维要回答三个问题:机器还活着吗?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_ACTIVESM 处于活跃状态的时间比例
DCGM_FI_PROF_SM_OCCUPANCYSM 上驻留的线程束占最大容量的比例
DCGM_FI_PROF_PIPE_TENSOR_ACTIVETensor 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图形引擎异常多半是应用程序的问题
31GPU 显存页错误(非法地址访问)多半是应用程序的问题
48双比特 ECC 错误显存硬件
79GPU 从总线上掉了(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-smiDCGM
定位单机命令行工具,随驱动安装数据中心级的 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 Version595.71.05驱动版本
CUDA Version13.2这版驱动最高支持的 CUDA 版本,不是装了哪个 Toolkit(第 2 章)
Persistence-MOff持久模式关闭:没有程序用 GPU 时驱动会卸载状态,下次启动程序要多花点时间初始化。服务器上一般建议打开
PerfP8性能状态,P0 最高,P8 是空闲时的低功耗状态
Pwr:Usage/Cap4W / 130W当前功耗 / 功耗上限
Volatile Uncorr. ECCOffECC 功能处于关闭状态;不支持 ECC 的卡这里显示 N/A
GPU-Util0%空闲,没有 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 ActiveDCGM 的指标,更接近真实计算利用率
ECC 可纠正 / 不可纠正硬件自动修 / 数据已错,要重置 GPU
行重映射A100 起用备用行替换坏的显存行
XID驱动错误编号,看 dmesg
DCGM数据中心级 GPU 监控、诊断、策略框架
DCGM Exporter把 GPU 指标交给 Prometheus
直通整卡给一台虚拟机
vGPU一卡分给多台虚拟机,需要许可证
MIG硬件切分,最多 7 个完全隔离的实例
时间片轮流用,不隔离显存
机密计算H100 起支持,保护"使用中"的数据和模型
UFM / NetQInfiniBand / NVIDIA 以太网的网络监控
MPS多进程同时跑 kernel,部分隔离