nvidia-smi 是什么
nvidia-smi 是 NVIDIA 驱动自带的命令行工具,直接读取驱动暴露的设备状态:显存占用、计算单元利用率、温度、功耗、当前时钟与占用显存的进程表。它不依赖 CUDA 工具箱,只要驱动装好就能执行,因此是上架自检与故障排查的第一步。输出分上下两段,上段是每张卡的汇总表,下段是进程与服务列表。
基本信息
| 适用平台 | Linux 与 Windows 同名程序,随 NVIDIA 驱动一起安装 |
|---|---|
| 依赖 | 只需要驱动,不需要 CUDA 工具箱 |
| 权限 | 查询普通用户即可,--gpu-reset 等操作需要 root |
| 刷新方式 | -l 指定秒级滚动,或交给 watch 周期执行 |
| 配套用法 | -q 详细查询、--query-gpu 结构化输出、dmon 滚动汇总 |
常用形态
常用形态
nvidia-smi # 一次快照:显存、利用率与进程表
nvidia-smi -L # 只列 GPU 与 UUID,脚本里最常用
nvidia-smi -l 2 # 每 2 秒滚动输出,观察压测过程
nvidia-smi --query-gpu=index,name,memory.used,memory.total,utilization.gpu --format=csv
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv典型使用场景
- 新机器上架自检:确认卡被识别、驱动版本正确、显存容量符合采购单
- 服务扩容前核实:确认目标卡上没有残留进程占用显存
- 压测过程盯盘:观察利用率、温度与功耗是否触顶触发降频
- 排 OOM:拿到占用显存的进程清单,再回查进程归属与启动命令
- 容器排障:确认宿主驱动可见、容器透传后设备数量是否与预期一致
- 脚本采集:用结构化查询输出 CSV,交给监控系统做长期趋势
输出逐段读法
| 字段 | 含义 | 异常提示 |
|---|---|---|
| Driver Version | 驱动版本 | 与框架或镜像要求的驱动不匹配时容器启动即失败 |
| CUDA Version | 驱动支持的上限运行时版本 | 注意这只是能力上限,不代表装了工具包 |
| Memory-Usage | 已用与总显存 | 已用接近总量时新请求会 OOM |
| GPU-Util | 计算单元利用率百分比 | 长期为 0 但请求有延迟,怀疑瓶颈在 CPU 侧 |
| Temp / Power | 温度与当前功耗 | 长时间贴近阈值会触发降频,表现为吞吐下滑 |
| Persistence-M | 持久化模式开关 | 任务频繁拉起时建议开启,减少初始化开销 |
| Processes | 占用显存的进程号与名称 | 出现陌生进程先查归属,确认无主再处理 |
持续观察的两种写法
持续观察的两种写法
watch -n 1 nvidia-smi # 全屏刷新,适合人工盯着看趋势
nvidia-smi dmon -s pucm -d 2 # 逐行输出功耗、利用率、显存与温度
nvidia-smi -q -d PERFORMANCE # 查询降频原因,解释速度为何下降持续盯盘看哪几项
- 显存曲线:压测中若持续单调上升且不回落,先查请求是否正常释放,再怀疑泄漏
- 利用率与吞吐是否同向:利用率上涨而吞吐不动,多半是批太小或调度环节有瓶颈
- 温度与功耗是否贴阈值:贴近上限后时钟回落,吞吐会呈阶梯式下降
- 进程表是否多出陌生条目:多实例共用一张卡时,先确认占用来源再判断容量
- 降频原因:用详细查询看具体触发项,不要凭温度或功耗单点猜测
利用率高不代表显存够用,反过来也一样:容量问题看显存占用,效率问题看计算单元利用率,两个维度分开判断。
nvidia-smi 显示的显存占用包含分配器缓存的保留部分:保留量高于张量实际占用是正常现象,判断泄漏要看它是否随请求持续单调上涨。