在深度學習模型訓練或者推理的時候我們常常會需要使用到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。
參考網站: