在使用GPU做计算,比如跑 Deep Learning代码的时候,我们可能希望能够实时检测显存的使用情况,但是Linux一般不会自带监视现存的工具。Nvidia自带了一个 nvidia-smi的命令行工具,会显示显存使用情况,但我们总不能每 10s 中就输入一次这个命令。 这时候就需要用到 watch命令了。
watch 命令简介
watch是做什么的?看一下系统怎么说
$ whatis watch
watch(1) - execute a program periodically, showing output fullscreen
功能很明白,周期性执行某一命令,并将输出全屏显示
watch的基本用法是
watch [options] command
最常用的参数是 -n, 后面指定是每多少秒来执行一次命令。
监视显存
我们设置为每 10s 显示一次显存的情况
watch -n 10 nvidia-smi
nvidia-smi命令显示的GPU各个内容的含义如下:
这是服务器上特斯拉K80的信息。
上面的表格中:
第一栏的Fan:N/A是风扇转速,从0到100%之间变动。有的设备不会返回转速,因为它不依赖风扇冷却而是通过其他外设保持低温。
第二栏的Temp:是温度,单位摄氏度。
第三栏的Perf:是性能状态,从P0到P12,P0表示最大性能,P12表示状态最小性能。
第四栏下方的Pwr:是能耗,上方的Persistence-M:是持续模式的状态,持续模式虽然耗能大,但是在新的GPU应用启动时,花费的时间更少,这里显示的是off的状态。
第五栏的Bus-Id是涉及GPU总线的东西,domain:bus:device.function
第六栏的Disp.A是Display Active,表示GPU的显示是否初始化。
第五第六栏下方的Memory Usage是显存使用率。
第七栏是浮动的GPU利用率。
第八栏上方是关于ECC的东西。
第八栏下方Compute M是计算模式。
下面一张表示每个进程占用的显存使用率。
显存占用和GPU占用是两个不一样的东西,显卡是由GPU和显存等组成的,显存和GPU的关系有点类似于内存和CPU的关系。