从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

GPU 指标语义:利用率的真相与多租户归因

草稿

“GPU 利用率 97%”是一句没有信息量的话:在你补齐另外两个数字之前,它既可能是“忙而无效”,也可能是“带宽满载的健康态”。

阅读位置:上一章《可观测与计量:十个问题》 · 下一章《基准、验收与容量规划》。

可观测与计量一章给出了平台必须回答的十个问题;本章为其中最容易被误读的部分,即利用率与归因,提供字段级语义。它是故障模式手册的前置,也是微架构两个屋顶在监控层的直接应用。

GPU-Util 到底测的是什么

nvidia-smi 的“GPU-Util”(DCGM 字段 1001)的精确定义:

采样周期内,“至少有一个 kernel 在 GPU 上运行”的时间占比。

表示:用了多少 SM、跑了多少 FLOPS、带宽吃没吃满、活干得好不好。一个只来回搬运数据的循环也能让它显示 100%。它的正确用途只有一个:“这台卡有没有东西在跑”。

必须同看的三件套

字段测的是什么回答的问题
1001 GPU_UTIL有 kernel 驻留的时间占比有没有东西在跑
1002 SM_ACTIVE平均多少比例的 SM 在工作用了多少“机器”
1005 DRAM_ACTIVE显存带宽利用率带宽是不是瓶颈
表 1: 利用率三件套(DCGM 字段)

三个数字放在一起才能读出负载状态。三个标准签名:

100110021005诊断
解码型推理的正常态(带宽满、算力闲,见推理物理层),不要再加租户
低/中训练/预填充(算力型),健康
小 kernel 风暴或纯搬运,即“忙但没干活”
真空闲,或主机侧卡住(见 eBPF 一节)
表 2: 三件套签名速查

配套字段:1003(SM 占用率,kernel 配置健康度)、功耗/时钟/降频原因(共享场景的隐形干扰源,见微架构的功耗墙)。dcgm-exporter 默认只导出 1001 类指标。把 1002/1005 加进 gpu-metrics ConfigMap,是“把监控从假变真”的第一个动作。

采样看不见尾延迟

1 秒采样的 1001 是“这一秒有没有 kernel”,对 p99 的信息量为零:一个租户的解码步每秒被同卡邻居切断数次,在任何平均指标上都是不可见的。因此监控必须分层:

  • 常驻(零成本):三件套 + 功耗降频 + 引擎指标(TTFT/ITL、KV 水位、前缀命中率);
  • 触发式(低成本):由告警自动抓取 10 秒级的追踪快照(nsys / torch profiler)。GPU 问题几乎无法事后复现,证据必须当场留;
  • 事故级(高成本):单 kernel 深度剖析。注意此类工具会重放 kernel、串行化设备,禁止对生产流量使用

多租户归因的四条路径

“哪个 Pod 用了多少 GPU”没有原生答案,四条路径各有盲区:

路径原理盲区
nvidia-smi pmon驱动按进程采样 SM/显存需自制 pid→Pod 映射;MPS 下全记在服务进程头上
软切分监控(如 HAMi monitor)采样 + 设备 cgroup 映射成 Pod采样平均,看不见尾延迟;口径是配额口径
MIG 实例指标按实例天然分离只有切了 MIG 的节点有
引擎指标推理引擎按请求记账(TTFT/TPOT/前缀命中)只覆盖引擎内流量
表 3: 归因路径对比

分层结论:计费看配额计数器,排障看追踪,SLO 看引擎指标,不要用采样平均的“利用率”回答“谁用了多少”。归因口径与配额口径的对账(软切分账本 vs 设备真值)应作为周期任务,偏差是配额体系失信任的第一信号(见HAMi)。

eBPF 边界观测:把 GPU 延迟连回主机原因

eBPF 看不到 GPU 内部,但能看到边界:CUDA 运行时/驱动 API 调用(uprobes)、设备节点上的 ioctl(内核探针)、以及主机侧事件(cgroup 限流、调度迁移、网络重传)。把三者按时间戳与进程关联,就能构建因果链:“推理延迟尖刺 ← kernel 发射停顿 ← launch 线程被 cgroup 限流 ← 嘈杂的 sidecar”。

这类工具(如开源的 Ingero 等)填补的是传统 GPU 工具的反向盲区:Nsight 回答“GPU 做了什么”,eBPF 回答“主机为什么让 GPU 这么做”。对共享节点上的排障(谁拖慢了谁)、分布式训练的 straggler 定位(哪个 rank 因主机原因变慢)价值最大,且开销低(边界采样而非设备内省),适合常驻。

告警的语义化

把告警从计数器移到语义,是可观测层最划算的改进。三个示例:

  • DRAM_ACTIVE > 85% 持续 5 分钟(推理节点)→ 该节点带宽接近满,冻结新的解码型负载调度
  • TTFT/ITL p99 连续越线 → 触发自动追踪快照 + 通知(而不是等工单);
  • XID 79 级错误 → 节点隔离 + 硬件工单(见故障模式)。

常见误区

误区真相
利用率 30% 说明还有富余30% 的什么?带宽 90% 时加租户就是事故
平均没问题就是没问题尾延迟在平均里消失;采样窗口 ≥ 突发周期时全盲
pmon 能看到每个容器是每个进程,且 MPS 下失真
显存 100% 是泄漏先分清框架缓存(reserved)与真实张量(allocated),见显存管理
深度剖析工具挂上去看看会重放 kernel、串行化设备,生产禁止
表 4: 观测层的常见误区

总结

指标语义层的三个纪律:利用率必须三件套同读(否则既会误判健康也会误判故障);SLO 与归因不依赖采样平均(追踪与引擎指标才是依据);告警挂在语义上(带宽满载、SLO 越线、账实偏差),而不是挂在百分比上。它们与基准与验收共同构成“从能跑到可交付”的观测闭环。

参考资料

创建于 2026/08/28 更新于 2026/08/28 1957 字 阅读约 4 分钟