具有监控GPU使用情况和更改GPU状态的功能,是一个跨平台工具,支持所有标准的NVIDIA驱动程序支持的Linux和WindowsServer 2008 R2 开始的64位系统。这个工具是N卡驱动附带的,只要装好驱动,就会有这个命令

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

mvidia-smi

  • **GPU:**本机中的GPU编号(有多块显卡的时候,从0开始编号)图上GPU的编号是:0
  • **Fan:**风扇转速(0%-100%),N/A表示没有风扇
  • **Name:**GPU类型,图上GPU的类型是:NVIDIA GeForce 3090 一般显示不全的话 用nvidia-smi -L
  • **Temp:**GPU的温度(GPU温度过高会导致GPU的频率下降)
  • **Perf:**GPU的性能状态,从P0(最大性能)到P12(最小性能),图上是:P8
  • **Persistence-M:**持续模式的状态,持续模式虽然耗能大,但是在新的GPU应用启动时花费的时间更少,图上显示的是:off
  • **Pwr:Usager/Cap:**能耗表示,Usage:用了多少,Cap总共多少
  • **Bus-Id:**GPU总线相关显示,domain:bus:device.function
  • **Disp.A:**Display Active ,表示GPU的显示是否初始化
  • **Memory-Usage:**显存使用率
  • **Volatile GPU-Util:**GPU使用率
  • **Uncorr. ECC:**关于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`
#echo "starttime is  $timeStart"
#echo "endtiem is $timeEnd"
   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