在深度学习模型训练或者推理的时候我们常常会需要使用到GPU加速,而在服务器上会存在多块GPU,并且可能会有很多人在使用这些GPU,因此如何设置程序在指定的GPU上训练模型/推理,下面介绍我们如何在python程序中指定GPU运行。
1、查看服务器显卡运行状况
在Linux服务器上我们可以使用以下命令行来查看,显卡运行情况(假设已经安装完cuda等对应驱动,并可以使用)
nvidia-smi # 查看GPU运行情况
watch -n 10 nvidia-smi # 每10s刷新一次GPU运行情况
下面根据我现在这台电脑显示的内容来进行解释相关的返回结果。
下面给大家讲解一下这些布局:
第一个长方形:显示的是所有显卡的运行情况各参数代表的含义是
第一列:GPU:表示显卡的编号,从0开始。
Fan:N/A 是风扇转速,从 0 到 100% 之间变动,这个速度是计算机期望的风扇转速。
第二列:Name:显卡的名称。
Temp:是温度,单位摄氏度。
第三列:Perf:是性能状态,从 P0 到 P12,P0 表示最大性能,P12 表示状态最小性能。
第四列:Persistence-M:是持续模式的状态,持续模式虽然耗能大,但是在新的 GPU 应用启动时,花费的时间更少,这里显示的是 off 的状态。Pwr:是能耗。
第五列:Bus-Id: 是涉及 GPU 总线的东西(不懂)
第六列:Disp.A : Display Active,表示 GPU 的显示是否初始化
Memory Usage: 是显存使用率,已经使用/显存大小
第七列:GPU-Util:GPU 利用率
第八列:Volatile Uncorr. ECC:不太懂
Compute M. :不懂
MIG M.:不懂
注意到一栏中,一些地方会分成上下两个来表示不同的显卡信息,例如上图对应的显卡信息就是:只有一块显卡,编号是0,风扇转速34%,显卡名称是:GeForce RTX 208... ,温度为:42C,性能模式:P8,持续模式:off,能耗:35w,Bus-Id为:00000000:02:00.0,Disp.A开关是:on,显存使用情况:462MB/总量11018MB,GPU利用率:2%,后面的对我来说不太重要也就没有了解了。。。。
以上是第一个长方形中反应的信息,如果有多块显卡,那么就会如下图一样(我截取的参考网站中的一张图),就可以看到有多块GPU的情况被反映出来了。
第二个长方形:显示的是每个进程的使用率
GPU:该进程使用的是那一块GUP编号
PID:该进程的PID ,可以使用 kill -9 [PID]的方式杀死该进程(常用于退出高占GUP的程序)
Type:表示支持图形(C)还是计算(G)
Process name:进程的名字,一些可以找到其路径
GPU Memory Usage:该进程的显存使用情况
2、os.environ来设置CUDA_VISIBLE_DEVICES
os是python中非常常用的系统包,而os.environ则是设置查看系统环境变量的模块,我们可以通过这个模块把CUDA_VISIBLE_DEVICES的设置写入到环境变量中,这样在执行这个程序的时候就可以指定GPU运行了。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" ## 仅使用device0和 device1
os.environ["CUDA_VISIBLE_DEVICES"] = 2,0,3 ## 仅使用device2, device0和device3
这里我们在使用的时候,提示一下注意顺序,以最后一行代码为例,在这个程序里会将gpu[0]对应真实的显卡2,gpu[1]对应真实的显卡0,gpu[3]对应真实的显卡3。
参考网站: