news 2026/4/15 4:32:53

如何监控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/4/8 17:36:40

数据结构学习捷径:全套PPT课件助你攻克算法难关

你是否在学习数据结构时感到困惑&#xff1f;面对复杂的算法和抽象概念无从下手&#xff1f;这套完整的数据结构课程PPT资源正是为你量身打造的学习指南&#xff0c;帮助你在编程道路上少走弯路&#xff0c;快速掌握计算机科学的核心基础。 【免费下载链接】数据结构课程全课件…

作者头像 李华
网站建设 2026/3/28 8:13:51

SimpleGUI:单色屏嵌入式GUI开发的理想选择

在嵌入式开发领域&#xff0c;单色屏GUI开发一直是个技术难点。传统方案要么过于庞大&#xff0c;要么需要从零开始。SimpleGUI的出现改变了这一现状&#xff0c;这款专为单色屏优化的轻量级框架&#xff0c;以最低1.5KB内存占用实现了完整的图形界面功能。 【免费下载链接】Si…

作者头像 李华
网站建设 2026/4/12 21:40:30

callback机制详解:实现早停、日志、检查点等功能

callback机制详解&#xff1a;实现早停、日志、检查点等功能 在现代大模型训练中&#xff0c;一次完整的微调任务动辄持续数小时甚至数天&#xff0c;涉及海量参数更新与分布式资源调度。面对如此复杂的系统&#xff0c;开发者早已无法依赖“跑完看结果”的粗放模式。如何在训练…

作者头像 李华
网站建设 2026/4/12 1:24:55

终极指南:如何免费获取纯净版Windows XP SP3专业版ISO镜像

想要重温经典的Windows XP系统吗&#xff1f;本资源包提供了官方原版的Windows XP Professional with Service Pack 3 (SP3) ISO镜像下载&#xff0c;让您轻松体验这个里程碑式的操作系统。无论您是怀旧爱好者还是技术研究者&#xff0c;这个纯净无修改的镜像文件都将满足您的需…

作者头像 李华
网站建设 2026/4/11 17:23:10

如何在8位MCU上实现JSON数据高效处理:cJSON嵌入式优化全攻略

如何在8位MCU上实现JSON数据高效处理&#xff1a;cJSON嵌入式优化全攻略 【免费下载链接】cJSON Ultralightweight JSON parser in ANSI C 项目地址: https://gitcode.com/gh_mirrors/cj/cJSON 还在为8位微控制器上处理JSON数据而烦恼吗&#xff1f;面对仅有几KB的RAM和…

作者头像 李华
网站建设 2026/4/14 6:23:18

使用RS-LoRA提升多任务学习效果:实验结果公布

使用RS-LoRA提升多任务学习效果&#xff1a;实验结果公布 在当前大模型快速演进的背景下&#xff0c;如何以有限资源高效适配多个下游任务&#xff0c;已成为工业界与学术界的共同挑战。随着LLM参数规模突破百亿甚至千亿&#xff0c;全量微调不仅成本高昂&#xff0c;更难以满足…

作者头像 李华