news 2026/1/10 1:01:49

如何监控GPU算力使用情况?NVIDIA-smi进阶用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何监控GPU算力使用情况?NVIDIA-smi进阶用法

如何监控GPU算力使用情况?NVIDIA-smi进阶用法

在现代深度学习和大模型训练中,GPU早已不是“插上就能跑”的简单加速器。当你启动一个千亿参数的模型训练任务时,如果发现GPU利用率长期徘徊在10%以下,而CPU却满载运转——这种典型的“算力空转”现象,往往意味着资源的巨大浪费。问题出在哪?数据加载瓶颈?显存碎片?还是某个隐藏进程偷偷占用了显存?

这时候,最直接、最可靠的诊断工具就是nvidia-smi

作为NVIDIA官方提供的系统管理接口,nvidia-smi不仅是查看GPU状态的第一道窗口,更是深入性能调优的核心利器。它不像某些第三方工具那样依赖Python封装或存在兼容性问题,而是直接对接底层NVML(NVIDIA Management Library),具备极高的稳定性和权威性。掌握它的进阶用法,相当于给你的AI系统装上了“实时心电监护仪”。


从硬件到命令:nvidia-smi是如何工作的?

nvidia-smi的本质,是 NVML 库的一个命令行前端。NVML 是一个C语言级别的API集合,运行在内核态驱动之上,能够直接读取GPU硬件寄存器中的运行时信息。这意味着它获取的数据几乎是“零中间层”的原始指标。

当你执行一条nvidia-smi命令时,整个流程如下:

  1. 用户输入命令;
  2. nvidia-smi可执行程序调用 NVML API;
  3. NVML 通过 GPU 驱动与物理设备通信;
  4. 硬件返回当前状态(如SM利用率、显存占用、温度等);
  5. 数据被格式化后输出到终端。

这个过程不需要额外服务进程支持,只要安装了CUDA驱动即可使用,因此具有极强的通用性和低侵入性。

更重要的是,由于它是轮询机制,默认每秒刷新一次数据,非常适合用于长时间监控训练任务的状态变化趋势。


实战中的六种高阶用法

1. 快速体检:一眼看懂GPU健康状况

最基础也是最常用的命令:

nvidia-smi

这条命令会列出所有GPU设备的基本信息:型号、驱动版本、CUDA兼容性、温度、功耗、显存使用率以及正在运行的进程。对于刚登录服务器的工程师来说,这是第一道“安检门”。

但要注意,默认输出可能会隐藏一些关键细节。例如,某些后台服务(如编码器、推理守护进程)可能不会出现在主列表中。建议结合--query-gpu显式指定字段,确保无遗漏。


2. 动态追踪:让GPU负载“动起来”

如果你正在调试一个训练脚本,想观察其GPU利用率是否平稳上升,可以启用自动刷新模式:

nvidia-smi -l 2

这会让终端每2秒自动重绘一次GPU状态。相比手动重复敲命令,这种方式能更直观地捕捉到瞬时波动。

⚠️ 小贴士:不要设置过短的刷新间隔(如-l 0.1)。频繁调用虽然看起来更“实时”,但实际上会给系统带来不必要的I/O压力,尤其在多卡环境下可能导致显示延迟甚至卡顿。

推荐生产环境中设为2~5秒,既能满足监控需求,又不影响系统稳定性。


3. 进程溯源:谁在偷我的显存?

当PyTorch报出“CUDA out of memory”错误,但你发现nvidia-smi显示显存并未占满时,别急着调小batch size——很可能是因为显存碎片或僵尸进程作祟。

此时应该精准定位每个进程的显存消耗:

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

该命令只查询参与计算的进程(compute apps),排除视频解码等非计算类应用干扰,并以CSV格式输出,便于后续脚本处理。

举个真实案例:某次训练失败后排查发现,一个小时前结束的Jupyter内核并未完全退出,其残留进程仍持有近8GB显存。正是这条命令帮助我们快速锁定了“真凶”。


4. 日志归档:构建可回溯的性能轨迹

对于需要长期运行的大模型预训练任务,仅靠肉眼观察远远不够。我们需要结构化的日志记录,以便事后分析性能拐点。

这时就要用到dmon模式(daemon monitor):

nvidia-smi dmon -s u -o TD -f gpu_log.csv
  • -s u表示采集利用率相关数据(包括GPU、内存带宽等);
  • -o TD添加时间戳和设备ID;
  • -f指定输出文件。

生成的日志类似这样:

#Time gpu pwr gtemp mtemp sm mem enc dec 2025/04/05-10:00:01, 0, 250W, 67C, N/A, 98%, 75%, 0%, 0% 2025/04/05-10:00:02, 0, 250W, 67C, N/A, 97%, 74%, 0%, 0% ...

这类数据可以直接导入Python进行可视化分析,比如绘制训练过程中GPU利用率随epoch的变化曲线,识别是否存在周期性空闲,进而优化数据流水线设计。


5. 资源隔离:限制功耗防止“一人超载,全员断电”

在共享服务器或多租户环境中,经常出现某个用户启动超大规模训练任务,导致整机功耗超标、电源保护跳闸的情况。

解决方案之一是使用功耗墙(power limit)功能:

nvidia-smi -pl 250

将指定GPU的最大功耗锁定在250W(前提是硬件支持)。A100/H100通常默认为300W以上,适当下调可在牺牲少量性能的前提下大幅提升系统稳定性。

⚠️ 注意事项:
- 此操作需 root 权限;
- 修改后重启失效(除非写入持久化脚本);
- 过度限制可能导致SM频率降频,影响吞吐量。

建议先在测试环境验证性能衰减程度再上线使用。


6. 减少冷启动延迟:开启持久模式

在高频调用的推理服务中,频繁创建和销毁CUDA上下文会导致明显的初始化延迟。这是因为GPU默认处于“节能模式”,每次调用都需要重新唤醒。

解决办法是启用持久模式(Persistence Mode):

nvidia-smi -pm 1

开启后,GPU驱动始终保持激活状态,即使没有任务运行也不会休眠。虽然会略微增加待机功耗,但对于QPS较高的在线服务而言,响应延迟可降低数十毫秒级别。

特别适合部署在 Triton Inference Server 或自研推理框架中的场景。


在真实AI系统中的角色定位

在一个典型的AI训练架构中,nvidia-smi并不参与实际计算,而是作为“旁观者”存在于操作系统层,位于GPU驱动与上层框架之间:

+---------------------+ | 训练框架 (ms-swift) | +----------+----------+ | v +----------+----------+ | PyTorch / CUDA | +----------+----------+ | v +----------+----------+ | NVIDIA Driver | +----------+----------+ | v +----------+----------+ | nvidia-smi (NVML) | +----------+----------+ | v +----------+----------+ | GPU 硬件 | +---------------------+

它就像一位沉默的审计员,默默记录着每一颗GPU的心跳、呼吸与负荷。这些数据不仅可以用于人工排查,还能成为自动化运维系统的“燃料”。

例如,在Kubernetes集群中,可通过Device Plugin暴露GPU指标,并结合Prometheus抓取nvidia-smi输出,最终在Grafana中实现全集群GPU资源热力图展示。


典型问题诊断实战

问题一:GPU利用率低,但训练慢得离谱

现象描述
GPU compute utilization 长期低于30%,显存充足,但每个step耗时很长。

排查步骤
1. 执行nvidia-smi -l 1观察利用率是否呈锯齿状波动;
2. 同时打开htoptop查看CPU使用率;
3. 若发现CPU核心持续接近100%,基本可判定为数据加载瓶颈

根本原因
DataLoader 的num_workers设置过小,或磁盘IO性能不足,导致GPU经常“饿着等数据”。

优化建议
- 增加num_workers(一般设为CPU核心数的一半);
- 使用prefetch_factor提前加载下一批数据;
- 考虑将数据集缓存至SSD或内存中。


问题二:显存报错,但监控显示还有空余

典型错误信息
RuntimeError: CUDA out of memory. Tried to allocate 1.2 GiB.

nvidia-smi显示显存仅用了16/24GB。

可能原因
- PyTorch 的内存池机制导致碎片化;
- 已释放的张量未及时归还给操作系统;
- 存在隐式缓存(如autograd graph、kernel launch cache)。

应对策略
- 主动调用torch.cuda.empty_cache()清理缓存;
- 使用torch.utils.checkpoint减少中间激活存储;
- 检查是否有循环引用阻止GC回收;
- 最终手段:重启进程或容器。


问题三:多人共用服务器,资源争抢严重

典型场景
团队共享一台8卡A100服务器,不同成员同时训练模型,互相抢占显存和算力。

治理思路
1.透明化:编写定时脚本,每天汇总各用户的GPU使用时长、峰值显存、平均功耗,生成报表;
bash nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used --format=csv -l 60 >> daily_usage.log
2.规范化:制定资源使用守则,鼓励使用Docker或Slurm进行资源隔离;
3.技术约束:通过sudo规则限制普通用户执行危险命令(如nvidia-smi -r重置GPU);
4.自动化报警:当某卡显存占用超过90%持续5分钟,自动发送邮件提醒负责人。


设计与工程实践建议

监控频率怎么选?

  • 交互式调试:1~2秒刷新一次足够;
  • 批量任务监控:可设为5秒,减少日志体积;
  • 短时任务(<1分钟):无需持续监控,任务前后各采样一次即可;
  • 长期训练:推荐使用dmon模式记录完整生命周期数据。

避免盲目追求“高精度”采样,否则会产生大量冗余数据,反而增加分析成本。


日志如何管理?

  • 输出格式优先选择CSV 或 JSON,便于程序解析;
  • 文件命名包含日期和任务ID,如gpu_log_train_llama3_20250405.csv
  • 自动归档脚本每日压缩并上传至对象存储;
  • 敏感信息(如PID)可在脱敏后再上传至中心化日志平台(如ELK);

权限控制不可忽视

nvidia-smi默认需要访问/dev/nvidiactl设备节点,通常属于video组。在多用户环境中应做好权限划分:

  • 普通用户允许查看状态;
  • 禁止修改功耗、重置GPU等高危操作;
  • 可通过sudoers配置细粒度命令白名单:
# /etc/sudoers.d/nvidia-smi %ai-team ALL=(ALL) NOPASSWD: /usr/bin/nvidia-smi --query-*, /usr/bin/nvidia-smi -l * !%ai-team ALL=(ALL) ALL: /usr/bin/nvidia-smi -r *, /usr/bin/nvidia-smi -pl *

与其他工具协同增效

虽然nvidia-smi功能强大,但在大规模集群中往往需要配合其他工具使用:

工具适用场景nvidia-smi关系
dcgmi数据中心级GPU监控基于同一NVML,提供更丰富的遥测
gpustat更友好的终端显示底层仍调用nvidia-smi
Prometheus + Node Exporter指标采集与告警可通过文本收集器抓取nvidia-smi输出
Kubernetes Device Plugin容器化资源调度向Pod暴露GPU状态

特别是在云原生AI平台中,nvidia-smi的结构化输出已成为构建可观测性的基石。


写在最后

nvidia-smi看似只是一个简单的命令行工具,但它承载的是对GPU资源的深刻理解与精细掌控。它不像高级框架那样炫目,却始终站在幕后,默默守护每一次训练的顺利进行。

真正优秀的AI工程师,不会等到OOM才去查显存,也不会在训练停滞时束手无策。他们会在任务开始前就建立监控基线,在运行中持续观察资源画像,在问题发生时迅速定位根源。

而这其中最关键的一步,往往就是打开终端,敲下那句熟悉的:

nvidia-smi

掌握它的进阶用法,不只是学会几条命令,更是建立起一种系统性的资源意识——知道算力从何而来,又因何流失。这种能力,才是支撑大规模模型工程落地的真正底气。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/1 9:47:27

深度解析:全国空气质量监测数据集的应用价值与实战指南

全国空气质量监测数据集是一个涵盖中国197个城市的详尽环境监测资料库&#xff0c;为环境科学研究、政策制定和公众健康分析提供了高质量的空气质量数据。这份数据集不仅包含了核心的空气质量指数&#xff08;AQI&#xff09;&#xff0c;还详细记录了PM2.5、PM10、SO₂、NO₂、…

作者头像 李华
网站建设 2026/1/1 9:47:14

SeedVR2视频修复神器:让模糊视频秒变4K高清的终极指南

SeedVR2视频修复神器&#xff1a;让模糊视频秒变4K高清的终极指南 【免费下载链接】SeedVR-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-7B 还在为那些画质模糊的珍贵视频而烦恼吗&#xff1f;无论是年代久远的家庭录像&#xff0c;还是拍摄…

作者头像 李华
网站建设 2026/1/1 9:47:09

BNB量化训练实战:在消费级显卡上跑通百亿参数模型

BNB量化训练实战&#xff1a;在消费级显卡上跑通百亿参数模型 你有没有想过&#xff0c;用一台搭载RTX 3090的普通工作站&#xff0c;也能微调一个700亿参数的大模型&#xff1f;这在过去几乎是天方夜谭——动辄需要多张A100、数百GB显存和昂贵的云资源。但今天&#xff0c;借助…

作者头像 李华
网站建设 2026/1/1 9:46:52

免费终极解决方案:EnergyStar让你的Windows笔记本续航翻倍

免费终极解决方案&#xff1a;EnergyStar让你的Windows笔记本续航翻倍 【免费下载链接】EnergyStar A terrible application setting SV2 Efficiency Mode for inactive Windows apps and user background apps 项目地址: https://gitcode.com/gh_mirrors/en/EnergyStar …

作者头像 李华
网站建设 2026/1/1 9:46:38

Docker微服务负载均衡配置避坑指南(90%项目都踩过的5大陷阱)

第一章&#xff1a;Docker微服务负载均衡配置避坑指南概述在构建基于Docker的微服务架构时&#xff0c;负载均衡是确保系统高可用与高性能的核心环节。合理配置负载均衡策略不仅能提升服务响应速度&#xff0c;还能有效避免单点故障。然而&#xff0c;在实际部署过程中&#xf…

作者头像 李华
网站建设 2026/1/8 19:36:13

Dip开源项目快速上手:Swift依赖注入容器完整指南

Dip开源项目快速上手&#xff1a;Swift依赖注入容器完整指南 【免费下载链接】Dip Simple Swift Dependency container. Use protocols to resolve your dependencies and avoid singletons / sharedInstances! 项目地址: https://gitcode.com/gh_mirrors/dip/Dip Dip是…

作者头像 李华