服务器查看GPU核心命令与深度应用指南
核心结论: 在Linux服务器环境中,nvidia-smi (NVIDIA System Management Interface) 是查看和管理NVIDIA GPU状态的最权威、最全面的命令行工具,通过熟练使用其命令及参数,管理员可精准掌握GPU使用率、显存占用、温度、功耗、进程详情等核心指标,并执行基础管理操作,对于非NVIDIA GPU或特定场景,需选用rocm-smi、dcgmi或操作系统原生工具。

NVIDIA GPU核心命令:nvidia-smi 详解
nvidia-smi 是NVIDIA官方提供的标准管理工具,预装于GPU驱动中。
-
基础状态概览:
nvidia-smi
- 输出解读:
GPU: GPU实例编号 (0, 1, 2…)。Fan: 风扇转速百分比。Temp: GPU核心温度 (摄氏度)。Perf: 性能状态 (P0-P12, P0为最高性能)。Pwr:Usage/Cap: 当前功耗 / 最大设计功耗 (瓦特)。Memory-Usage: 显存使用量 / 总可用显存。GPU-Util: GPU计算核心利用率百分比。Compute M: GPU当前运行的计算模式。Processes: 占用该GPU的进程列表 (PID, 进程名, 占用显存)。
- 输出解读:
-
关键高级参数与应用:
-
持续动态监控 (类似
top):nvidia-smi -l [间隔秒数] # 示例:每2秒刷新一次 nvidia-smi -l 2
-
查询GPU详细信息 (型号、UUID、电源等):
nvidia-smi -q # 更精准查询特定GPU (如GPU 0) nvidia-smi -q -i 0
-
监控特定指标 (自动化脚本常用):

nvidia-smi --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.total,temperature.gpu,power.draw --format=csv
输出为易解析的CSV格式,便于集成到监控系统 (如Zabbix, Prometheus)。
-
查看GPU拓扑与NVLink信息:
nvidia-smi topo -m
-
设置GPU计算模式 (需管理员权限):
nvidia-smi -i -c # 示例:将GPU 0 设置为独占进程模式 (Exclusive_Process) nvidia-smi -i 0 -c 3
-
替代与增强工具
-
NVIDIA Data Center GPU Manager (DCGM):
- 定位: 企业级GPU集群监控管理工具,功能远超
nvidia-smi。 - 核心命令:
dcgmi - 优势:
- 低开销、持续监控整个集群所有GPU。
- 提供丰富API,深度集成到HPC/AI调度和监控平台。
- 支持策略设置、健康检测、主动告警。
- 提供详细性能计数器分析。
- 基础查看命令示例:
dcgmi discovery -l # 列出系统内GPU dcgmi dmon -i 0 # 监控GPU 0 的关键指标
- 定位: 企业级GPU集群监控管理工具,功能远超
-
AMD ROCm GPU 管理:
- 核心命令:
rocm-smi - 功能类比: 提供类似
nvidia-smi的功能,用于AMD Instinct™ 等数据中心GPU。 - 常用命令:
rocm-smi # 基础概览 rocm-smi --showall # 显示详细信息 rocm-smi -d 0 -t # 监控GPU 0温度
- 核心命令:
-
操作系统原生工具:

lspci: 查看PCIe设备信息,确认GPU硬件是否被系统识别。lspci | grep -i vga # 或 grep -i nvidia / grep -i amd
gpustat(Python工具): 提供更简洁、彩色的类nvidia-smi输出,常用在开发环境。pip install gpustat安装后运行gpustat。
容器环境中的GPU查看
容器内访问GPU同样依赖nvidia-smi,但需确保:
- 正确挂载驱动和工具: 使用
--gpus参数 (Docker) 或配置DeviceSet (Kubernetes NVIDIA Device Plugin)。 - 容器内安装nvidia-utils: 基础Docker镜像通常不包含
nvidia-smi,需在Dockerfile中安装:FROM your_base_image RUN apt-get update && apt-get install -y --no-install-recommends nvidia-utils-<你的驱动版本号>
- 在运行中的容器内执行:
docker exec -it nvidia-smi kubectl exec -it -- nvidia-smi
专业运维实践建议
- 监控集成: 将
nvidia-smi或dcgmi的输出集成到企业监控系统 (Prometheus+Grafana, Zabbix, Nagios等),实现可视化告警。 - 性能瓶颈分析: 结合
GPU-Util和Memory-Usage判断瓶颈:- 高
GPU-Util+ 低Memory-Usage:计算密集型,优化代码或增加GPU资源。 - 低
GPU-Util+ 高Memory-Usage:可能受限于显存容量或存在显存瓶颈。 - 低
GPU-Util+ 低Memory-Usage:可能受限于CPU、IO或任务调度。
- 高
- 驱动与工具更新: 定期更新NVIDIA驱动和DCGM版本,获取最佳性能、兼容性和新功能。
- 权限管理: 生产环境限制普通用户直接运行
nvidia-smi修改设置的能力,通过管理平台统一管控。
服务器GPU状态监控常见问答
Q1: 通过 nvidia-smi 发现GPU利用率 (GPU-Util) 很低,但显存占用 (Memory-Usage) 很高,这通常意味着什么?如何排查?
- A1: 此现象常见于:
- 显存瓶颈: 模型或数据过大,GPU显存被大量占用用于存储参数和数据,但实际计算核心并未被充分利用。排查: 检查模型大小、批处理大小 (Batch Size),尝试减小批处理大小或使用梯度累积;使用
nvidia-smi查看具体哪个进程占用显存,分析其行为;考虑使用更大显存的GPU或模型并行/显存优化技术。 - I/O或CPU瓶颈: 数据加载速度(磁盘I/O)或CPU预处理速度跟不上GPU的计算速度,导致GPU长时间等待数据而空闲。排查: 监控系统CPU使用率、磁盘I/O等待时间;优化数据加载管道(如使用更高效的数据格式、预加载、多进程加载);升级CPU或使用更快的存储(如NVMe SSD)。
- 任务调度问题: 任务本身计算密度不高或存在大量同步等待。排查: 分析应用代码性能瓶颈。
- 显存瓶颈: 模型或数据过大,GPU显存被大量占用用于存储参数和数据,但实际计算核心并未被充分利用。排查: 检查模型大小、批处理大小 (Batch Size),尝试减小批处理大小或使用梯度累积;使用
Q2: 在多GPU服务器上,如何确保任务或进程准确地运行在指定的GPU上?
- A2: 主要有两种通用方法:
- 设置环境变量
CUDA_VISIBLE_DEVICES(适用于CUDA应用):- 在启动命令前设定该变量,值是需要使用的GPU索引号 (从0开始)。
- 示例 (Bash):
export CUDA_VISIBLE_DEVICES=0,2# 仅让程序看到GPU 0 和 GPU 2, 此时程序内部会将它们视为编号0和1的新设备 - 示例 (命令行内):
CUDA_VISIBLE_DEVICES=1 python my_script.py# 指定脚本只在物理GPU 1上运行
- 使用
--gpu/-i参数 (取决于工具/框架):- 许多深度学习框架 (如TensorFlow, PyTorch) 或GPU管理工具的命令行接口支持直接指定GPU索引。
- 示例 (PyTorch 代码内):
torch.cuda.set_device(1)# 设置默认使用GPU 1 - 示例 (TensorFlow): 使用
tf.config.set_visible_devices和tf.config.experimental.set_memory_growth。
- 设置环境变量
掌握核心的nvidia-smi命令及其丰富参数,结合dcgmi等专业工具,是高效运维GPU服务器、保障AI/HPC业务稳定运行的基石,您在GPU监控管理中遇到了哪些具体挑战?欢迎分享交流!
原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/35092.html