如何檢視並準確找到占用GPU的程式

2021-10-03 15:36:30 字數 1049 閱讀 3802

有時多人都在一段時間內同時使用公司共用的伺服器上的gpu訓練,有的網路的**寫得不好,雖然是按需獲取gpu記憶體但停止訓練了卻仍然占用gpu沒放,有的則採取的是預分配機制,一開始執行載入訓練好了的模型時就占用大量記憶體(比如9-10g),沒有進行識別推理也占用記憶體不放,多人共用的環境如果有人用完不及時停掉相關程式,很多gpu就被佔了但空閒在那裡,但又不好隨便亂殺程序來釋放,首先得確認一下,占用gpu的都是哪些程式,是否確實可以停掉,在不掌握誰在執行什麼訓練或識別程式的情況下,可以通過檢視程序資訊來確認。

首先,當然得借助平時必用的nvidia-smi來檢視占用gpu的程序:

檢視需要釋放的gpu上的程序,首先使用最簡單的 ps -ef|grep ,例如,0號gpu中pid 128564這個程序占用了7.3g的記憶體,那首先就看它:

ps -ef|grep  128564

如果啟動程序的命令列資訊含有程式**檔案那就到這裡就可以看出來是哪個程式了,但上面的命令輸出結果讓人失望,它的命令列只有個簡單的python,python顯然只是個執行程式,後面被執行的.py檔案則沒有,看了等於沒看:

那就看程序檔案裡的environ,它裡面記錄了很多環境資訊,看完基本可以猜出來是哪個程式啟動後的程序:

sudo vi /proc/128564/environ

根據裡面的pwd可以直接判定程式是在**,如果沒有這項(一般是有這個值的),根據path與ld_library_path以及cuda和cudnn等設定可以輔助綜合判定是那個程式,另外如果程式是在docker容器內執行的話,裡面還有個hostname,根據這個值,和docker ps命令輸出的值比較可以知道這個程式程序是在哪個容器裡執行,範圍一下就縮小了,如果是docker容器裡執行的程序,並且這個容器裡的程序都不需要執行了,那麼直接docker stop 即可釋放這些程序占用的gpu,對於物理機上執行的程序當然只有執行kill命令了。

如何檢視Linux中 GPU 的占用情況

鑑於自己經常不知道一些基本的硬體資訊,所以今天下午決定好好學習一下如何檢視gpu資訊的命令 從上面的圖中我們可以了解到 一共有4個 gpu 正在使用的是 第1塊,而且占用視訊記憶體的主要是 python 問題 4 torch 中如何使用 gpu?首先你要檢視當前 gpu的使用情況,然後再在終端指定使...

8080埠被占用,如何找到並結束程序

我們在開發過程中經常遇到埠被占用問題,此時需要先找到占用此埠的程式,然後手動關閉該程式 開啟命令視窗 win r 開啟程式執行的快速視窗,輸入cmd,進入命令列視窗,然後輸入以下命令 netstat aon findstr 8080 回車之後就可以看到所占用8080埠的程式,記住最後一列的數字,也就...

記錄 檢視釋放指定GPU的視訊記憶體占用

方法一 nvidia smi方法二 gpustat 安裝 gpustat pip install gpustat使用 方法三 定位占用的程序pid fuser v dev nvidia 會顯示gpu和對應的程序占用列表。dev nvidia2代表第三塊gpu 殺掉無用程序 kill 9 window...