📋 核心要点
  • nvidia-smi 是 N 卡驱动自带的跨平台工具,可监控 GPU 使用情况并更改状态
  • 直接输入查看当前 GPU 状态;nvidia-smi -l N 每 N 秒刷新一次
  • 输出 CSV 用 --format=csv --filename=xx.csv --query-gpu=... 指定监控字段
  • 常用字段:utilization.gpu(GPU 使用率)、memory.used(显存占用)、power.draw(功耗)、temperature.gpu(温度)

nvidia-smi 具有监控 GPU 使用情况和更改 GPU 状态的功能,是跨平台工具,支持所有标准 NVIDIA 驱动支持的 Linux 和 Windows Server 2008 R2 起的 64 位系统。该工具由 N 卡驱动附带,装好驱动即可使用。

直接输入 nvidia-smi 显示 GPU 当前状态

nvidia-smi命令.png

  • GPU:本机 GPU 编号(多卡从 0 开始)
  • Fan:风扇转速(0%–100%),N/A 表示无风扇
  • Name:GPU 类型,显示不全时用 nvidia-smi -L
  • Temp:GPU 温度(过高会导致频率下降)
  • Perf:性能状态,P0(最大)到 P12(最小)
  • Persistence-M:持续模式,耗能大但新 GPU 应用启动更快
  • Pwr: Usage/Cap:能耗,Usage 用了多少,Cap 总共多少
  • Bus-Id:GPU 总线,格式 domain:bus:device.function
  • Disp.A:Display Active,显示是否初始化
  • Memory-Usage:显存使用率
  • Volatile GPU-Util:GPU 使用率
  • Uncorr. ECC:错误检查纠正是否开启,0/disabled,1/enabled
  • Compute M:计算模式,0/DEFAULT,1/EXCLUSIVE_PROCESS,2/PROHIBITED
  • Processes:各进程占用的显存、进程号、占用的 GPU

隔几秒刷新显存状态

Bash
nvidia-smi -l 2   # 每两秒刷新一次

结果写入文件,指定监控字段

Bash
nvidia-smi -l 1 --format=csv --filename=report.csv \
  --query-gpu=timestamp,name,index,utilization.gpu,memory.total,memory.used,power.draw
# -l           隔多久记录一次
# --format     结果文件格式
# --filename   结果文件名称
# --query-gpu  记录哪些数据到 csv
# timestamp      时间戳
# memory.total   显存大小
# memory.used    显存使用大小
# utilization.gpu GPU 使用率
# power.draw     功耗

自动测试脚本

Bash
#!/bin/bash

# nvidia-smi 执行时间函数
function timeout()
{
    time_start=`date +%s`
    time_end=`date +%s`
    i=$(($time_end - $time_start))
    timeout=$1
    echo "timeout is :$timeout"
    while ([ $i -ne $timeout ]); do
        time_end=`date +%s`
        i=$(($time_end - $time_start))
    done
}

nvidia-smi -l 1 --format=csv --filename=$1 \
  --query-gpu=timestamp,name,index,utilization.gpu,memory.total,memory.used,power.draw &
echo "shell  PID: $$"
echo "nvidia-smi  PID: $!"
id=$!
echo $id
timeout $2
echo $id
kill -9 "$id"

# 执行方式 ./nvidia-log.sh /home/test/log.csv 120