简介:本文详细介绍NVIDIA-smi工具的核心功能、使用场景及操作技巧,通过解析常用指令帮助开发者高效监控GPU状态、优化资源分配,并针对性能瓶颈、多卡管理等问题提供解决方案,助力AI训练与高性能计算任务提效。
NVIDIA-smi(NVIDIA System Management Interface)是NVIDIA官方提供的GPU管理工具,集成于驱动包中,无需额外安装。其核心价值在于提供实时硬件监控与动态控制能力,支持Linux/Windows双平台,是AI开发者、科研人员及高性能计算工程师的必备工具。
执行nvidia-smi默认显示关键信息:
+-----------------------------------------------------------------------------+| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. ||===============================+======================+======================|| 0 NVIDIA RTX 4090 On | 00000000:01:00.0 On | Off || 30% 45C P0 120W / 450W| 10245MiB / 24576MiB| 98% Default |+-------------------------------+----------------------+----------------------+
nvidia-smi -l 2 # 每2秒刷新一次nvidia-smi -lo 1 # 持续刷新并输出到日志文件
应用场景:长时间训练任务中持续监控GPU状态变化
nvidia-smi -q -d PROCESSES # 显示所有GPU进程nvidia-smi -i 0 -q -d MEMORY # 查询指定GPU的显存使用详情
输出解析:
Process ID:占用GPU的进程PIDUsed GPU Memory:精确到MiB的显存占用Compute Mode:Default(共享)/Exclusive(独占)
nvidia-smi -q -d TEMPERATURE,POWER # 同时显示温度与功耗nvidia-smi -i 1 -q -d PERFORMANCE # 查询性能状态(P0-P12)
关键指标:
GPU Current Temp:当前温度(需<85℃避免降频)Power Draw:实时功耗(接近TDP时可能触发限频)
nvidia-smi -i 0 -c 3 # 设置为EXCLUSIVE_PROCESS模式nvidia-smi -i 0 -c 0 # 恢复为DEFAULT模式
模式对比:
| 模式 | 适用场景 | 并发限制 |
|———————-|———————————————|————————————|
| DEFAULT | 多任务共享GPU | 允许多进程同时使用 |
| EXCLUSIVE_PROCESS | 单任务独占GPU | 仅允许一个进程绑定 |
nvidia-smi -i 0 -e 0 # 禁用ECC校验(提升性能但降低可靠性)nvidia-smi -i 0 -e 1 # 启用ECC校验(推荐生产环境使用)nvidia-smi -q -d ECC # 查询ECC错误统计
处理建议:
nvidia-smi topo -m # 显示GPU间连接拓扑# 输出示例:# GPU0 GPU1 GPU2 GPU3 mlx5_0# GPU0 X PHB SYS NODE# GPU1 PHB X SYS NODE
拓扑类型:
PHB:通过PCIe Switch连接(延迟较高)NVLINK:高速互联(带宽达900GB/s)SYS:同一NUMA节点优化建议:
现象:GPU-Util持续低于30%
排查步骤:
nvidia-smi -q -d MEMORYnvprof分析内核执行时间batch_size参数紧急措施:
# 终止指定GPU上的所有进程kill -9 $(nvidia-smi -i 0 --query-compute-apps=pid --format=csv,noheader)
长期方案:
torch.cuda.amp)处理流程:
nvidia-smi -i 0 -ac 1000,1500 # 设置最小/最大风扇转速(RPM)
# 批量查询所有节点GPU状态for host in $(cat nodes.txt); dossh $host "nvidia-smi --query-gpu=index,name,utilization.gpu,memory.used --format=csv"done > cluster_gpu_status.csv
可视化工具推荐:
基于优先级的分配:
# 查询空闲GPUAVAILABLE_GPUS=$(nvidia-smi -q -d MEMORY | grep "Free" | awk '{print $3}' | paste -sd,)# 分配给高优先级任务CUDA_VISIBLE_DEVICES=$AVAILABLE_GPUS python train.py
# 持续72小时压力测试nvidia-smi -i 0 -c 3 # 独占模式避免干扰for i in {1..72}; donvidia-smi -q -d TEMPERATURE,POWER >> stability_log.txtsleep 3600done
nvidia-smi输出的CUDA版本需与开发环境一致--gpus all参数并验证容器内nvidia-smi输出版本查询指令:
nvidia-smi -L # 显示GPU型号与UUIDcat /proc/driver/nvidia/version # 驱动内核模块版本
通过系统掌握NVIDIA-smi工具链,开发者可实现从单卡调试到集群调度的全流程管理。建议结合具体业务场景建立标准化监控流程,例如设置温度阈值告警、定期生成资源使用报告等,持续提升GPU计算效率与稳定性。