如何監控GPU使用情況並殺死指定其中進程


仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/

有時候我們常常會有一個需求是監控GPU指定情況,並且需要根據需要殺死GPU進程

這里介紹幾個與之相關的指令:

watch -n 秒數 命令 :每隔指定秒數,就執行一次命令,並將結果打印在屏幕上

例如:

watch -3 nvidia-smi

watch -n 3 nvidia-smi

 

上述命令每隔三秒就輸出一次GPU列表信息

通過 nvidia-smi 可以輸出使用GPU的進程ID,因此可以借助 awk 工具對 nvidia-smi 的輸出進行過濾,從而找到進程信息,再對指定進程進行kill

例如:

要終止GPU-0到GPU-3的所有進程中,PID大於1000的,可以使用如下指令完成:

kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')

kill -9 PIDs 需要所有待停止的進程編號,而 nvidia-smi 經過第一個 awk 的輸出為:

GPU PID

0 10053

1 3343

再經過第二個awk后,即可對GPU ID 和PID進行篩選,並輸出 {print $2},可以得到:

10053

3343

最后,通過 $() 對輸出的 PID 進行讀取,完成kill過程。

同樣的,結合 watch 指令,我們可以周期性地清理占用GPU的僵屍進程

例如,每分鍾清理一次:

sudo watch -n 60 kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')

 或者防止非法用戶訪問GPU:

sudo watch -n 60 kill -9 $(for x in $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}'); do ps -aux | awk '$2 == '$x' && $1 == "illigal_user_name" {print $2}'; done)

 

原始問題和我的回答見:這里,網址:https://unix.stackexchange.com/questions/250244/how-to-kill-all-processes-using-a-given-gpu/511668#511668


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM