精打细算 - GPU 监控
精打细算 - GPU 监控
在上一篇,咱们历经千辛万苦,终于让应用程序在 Pod
的“驾驶舱”里成功地“点火”并用上了 GPU
。太棒了!但是,车开起来是一回事,知道车速多少、油耗多少、引擎水温是否正常,则是另一回事,而且同样重要,对吧?
我们的 GPU 应用跑起来了,但新的问题接踵而至:
- 这块昂贵的
GPU
,是真的在“全力以赴”地计算,还是大部分时间在“摸鱼划水”?(利用率如何?) - 显存(Framebuffer Memory)用了多少?是不是快要“爆仓”了?
GPU
的“体温”(温度)怎么样?会不会太热导致降频甚至损坏?- 我的程序是不是
GPU
瓶颈?还是说GPU
总是在等数据,瓶颈在CPU
或 IO?
要回答这些问题,就离不开监控。
为啥要监控 GPU?火眼金睛看资源
在 k8s
环境下监控 GPU
至关重要,主要有以下几个原因:
- 资源利用率与成本优化:
GPU
很贵!监控能帮你了解GPU
的实际使用情况,发现那些长期低负载运行的GPU
,为资源调整(比如用小一点的卡,或者后面提到的 MIG 技术)和成本优化提供数据支撑。别让宝贵的GPU
闲置浪费! - 性能分析与瓶颈定位:通过观察
GPU
利用率、显存带宽使用率等指标,结合CPU
、网络、磁盘 IO 的监控,可以帮助你判断应用的性能瓶颈到底在哪里。到底是GPU
算不过来,还是数据喂不进去? - 故障排查与健康诊断:监控能及时发现
GPU
的异常状态,比如温度过高、出现硬件错误(如 ECC 错误)、功耗异常等,帮助你提前预警或快速定位问题。 - 容量规划:了解当前
GPU
资源的使用趋势,可以为未来的资源采购和扩容提供依据。
监控“铁三角”:DCGM + Prometheus + Grafana
要在 k8s
里优雅地监控 GPU
,目前最流行、也最推荐的组合拳通常是基于以下几个开源组件:
- 类比:把它想象成一个给
GPU
做高端体检的专业团队:
- DCGM (NVIDIA Data Center GPU Manager):专业的体检医生/精密仪器。它直接运行在每个
GPU
节点上,是 NVIDIA 官方提供的工具,能够深入GPU
内部,采集非常详细、准确的性能指标和健康状态信息(比nvidia-smi
提供的更丰富、更适合机器采集)。比如 GPU 利用率、显存使用率、显存带宽、功耗、温度、时钟频率、各种硬件单元(如 Tensor Core, NVLink)的使用情况、错误计数等等。 - DCGM Exporter:体检报告翻译/格式转换员。DCGM 收集到的原始数据很详细,但不一定符合监控系统(如 Prometheus)的“口味”。DCGM Exporter 的作用就是从 DCGM 那里获取指标数据,然后把它们转换成 Prometheus 能理解的标准文本格式(metrics format)。它通常也部署在每个
GPU
节点上,比如作为DaemonSet
的一部分。 - Prometheus:中心化的健康档案数据库。Prometheus 是目前云原生领域最主流的监控数据存储和查询系统。它会定期地(比如每 15 秒)去各个节点上的 DCGM Exporter 那里“拉取”(scrape)最新的
GPU
指标数据,并存储为时间序列数据。它也负责存