1. 程式人生 > 其它 >深度學習訓練時GPU溫度過高?幾個命令,為你的GPU迅速降溫。

深度學習訓練時GPU溫度過高?幾個命令,為你的GPU迅速降溫。

新買回來的不帶水冷公版GPU,在滿負載執行的時候,溫度從室溫馬上飆升到85度,而且模型訓練不是幾分鐘完事,很有可能要長期保持在高溫狀態下執行,讓如此昂貴的GPU一直髮燒真是讓人太心疼!

首先得到知乎上一位朋友的文章啟發,文章點選這裡:從零開始組裝深度學習平臺(GPU散熱)(https://zhuanlan.zhihu.com/p/27682206utm_medium=social&utm_source=wechat_session)。

這篇文章寫的是在ubuntu X server環境下,通過修改nvidia-settings來修改GPU風扇速度,因為預設的nvidia-settings設定是,即使GPU在計算的時候溫度已經達到85度,風扇速度最高不會超過70%,這樣就無法很好地為GPU進行散熱,因此需要手動修改GPU風扇速度。

注,以下設定都是針對linux系統的GPU設定,windows的朋友請搜尋相關文章。

一.如果你有顯示器(X server)

可以完全按照上面提到的這篇文章來設定:從零開始組裝深度學習平臺(GPU散熱)(https://zhuanlan.zhihu.com/p/27682206?utm_medium=social&utm_source=wechat_session),這裡貼出關鍵步驟為:

1.修改/etc/X11/xorg.cong檔案

sudo nano /etc/X11/xorg.conf

2.在Section "Device"裡面加入 Option "Coolbits" "4"

Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA" Option "Coolbits" "4" EndSection

3.重啟電腦

sudo reboot

4.輸入:

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=100"

這裡GPUTargetFanSpeed=100就是風扇的速度, 100就是風扇執行在100%的速度, 也可以改成其它速度. 注意在新的NVIDIA驅動, GPUCurrentFanSpeed 被改成了 GPUTargetFanSpeed. 另外GPUFanControlState=1表示讓使用者可以手動調節GPU風扇速度。

感謝原文知乎作者:張三

二、如果你沒有顯示器

一般在ubuntu上搭建完深度學習環境後,許多朋友習慣把ubuntu的X桌面服務禁用掉,然後通過另一臺windows系統的電腦通過ssh來連線GPU機器使用。這個時候X server已經被禁用掉,開機也自動啟動命令列模式,上面第一種做法就不適用於這種情況了。原因是,nvidia-settings只能在X桌面環境下執行,若你想強行使用這個設定就會報錯:

因此正常情況下,是不可能通過修改這個設定來改變風扇速度的。

但有沒有其它方法修改呢?有!你需要騙過系統,讓它你有顯示器,這就是常說的headless模式。

主要的解決方法是參考了這篇文章:fan speed without X (headless) : powermizer drops card to p8(https://devtalk.nvidia.com/default/topic/831440/linux/fan-speed-without-x-headless-powermizer-drops-card-to-p8/),這篇文章提供了修改風扇速度的指令碼,在ubuntu下執行指令碼即可實時調節風扇速度,從而為GPU降溫。

這裡提供詳細步驟:

  1. 克隆這個github倉庫到本地目錄/opt:https://github.com/boris-dimitrov/set_gpu_fans_public

cd /opt git clone https://github.com/boris-dimitrov/set_gpu_fans_public

在這個倉庫包括上圖幾個檔案,主要起作用的是cool_gpu這個檔案,我們把檔案夾克隆下來之後,執行cool_gpu就可以調節風扇速度了。

2.修改資料夾名字為set-gpu-fans,因為作者疏忽,在cool_gpu程式碼中此資料夾被命名為“set-gpu-fans”,然而git clone下來的資料夾名字是“set_gpu_fans_public”。

sudo mv set_gpu_fans_public set-gpu-fans

3.建立一個符號連結,讓系統知道這個程式碼在哪裡:

ln -sf ~/set-gpu-fans /opt/set-gpu-fans

4.定位到set-gpu-fans資料夾,輸入以下命令:

cd /opt/set-gpu-fans

sudo tcsh

./cool_gpu >& controller.log &

tail -f controller.log

這個命令是執行cool_gpu降溫程式碼,啟動後會看到這些實時變化的提示:

在開始計算測試前,我們看看目前GPU的溫度:

這裡用的是2卡進行計算測試,我們可以看到,2卡的Perf(效能)一項已經被調整為“P2”(其它卡仍為P8),2卡的溫度為35度,而且三個風扇的速度均為55%。“P2”指的是nvidia的顯示卡power state,從P0到P12,最高效能狀態為P0,執行計算是為P2,最低功耗(最低效能)為P12。

啟動模型訓練,我們可以看到程式正在不斷地自動調節溫度:

當執行訓練模型一段時間後,最終的溫度狀態如下圖:

風扇被全部調節到80%的速度,溫度穩定在65度!對比文章開頭的資料,顯示卡溫度從84度降到65度,整整下降了20度!

三.一點要注意的

在上面第二部分的文章出來之前,網上還流傳著另一篇文章,那篇可以說是最原始的版本,上面第二部分的程式碼正是基於該篇原始版本文章改進的,連結地址在這裡:Set fan speed without an X server(https://devtalk.nvidia.com/default/topic/789888/set-fan-speed-without-an-x-server-solved-/?offset=).

但這篇文章的原始程式碼存在一個嚴重問題:雖然能夠強制改變風扇速度,但GPU會被降頻工作,power state會被強制降為P8,導致運算效能嚴重下降!

可能是那篇文章發表時間比較早,不大適用現在最新的顯示卡和驅動,因此才有了上面第二部分的改進版本,所以大家不要使用原始版本的程式碼,否則GPU會被限制性能。