奧推網

選單
科技

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

作者:HudenJear

上次介紹了新買的NUC12 extreme i7,這次就來說說這個機器的具體用途,因為主要用途還是深度學習,所以就順便聊一聊深度學習的硬體選擇。一般聊到深度學習都會預設想到伺服器,繼而想到CUDA,專業卡。這麼想倒是沒錯,但是深度學習並不是一來就上伺服器開跑,也不是絕對只能用CUDA,更不強求專業卡

簡介

一般來說,除錯所需要的時間和跑訓練的時間基本是三七開,而且不保證原生代碼能跑通,直接上伺服器也沒有什麼用,反覆上傳浪費的時間精力更多。所以一般做深度學習開發會準備兩臺機器,一臺是主力伺服器,這個一般都是單位或者老闆固定租用,要個人擁有這樣的伺服器至少需要20W的預算,而且不包括機房的環境維護費用,這部分如果是學生或者打工人就別自己操心了。另一臺機器就是本地除錯機,這臺機器的主要作用就是保持和伺服器的虛擬環境基本一致,在本地即時除錯程式碼獲得反饋。這機器大部分時間都是開著斷點模式改程式碼找bug,保證上傳伺服器的程式碼只需要簡單幾條命令就能開跑,不會跑一半報錯前功盡棄

顯示卡選擇上也並不是絕對的CUDA,因為AMD的ROCm 5。x更新之後也是比較好用,安裝比CUDA更為便捷一些,RX6800和RX6800XT之流的RX顯示卡也能進行深度學習

至於專業卡這個問題,我非常不推薦只搞深度學習的朋友買專業卡,專業卡最大特點是管大管夠的雙精度和驅動支援,但是對於深度學習這種日常單精度甚至半精度的應用來說,專業卡的長處基本就只有大視訊記憶體一點了。而Geforce和RX這些遊戲卡都是能深度學習的。

硬體介紹

主機部分是上次買的intel NUC12 Extreme Kit,這個機器有非常不錯的IO能力,顯示卡也相容300mm雙槽顯示卡,公版卡自然是不在話下

桌面的使用面積並不算大,總體積8。4L,跟大一點的ITX差不多,但是更修長,對比了一下15寸的電腦,長度上是差不多的

這一代NUC12 飛龍峽谷用的是桌面級CPU,i7版本是12700,在i9版本上的10G網絡卡也保留了下來,非常適合一個網線插主路由下面,上傳資料非常快。背部的兩個type-C都是TB4的介面,擴充套件介面或者接顯示器都是可以的。正面的4個介面涵蓋也比較廣,我的相機用的也是SD卡,所以NUC12這個卡槽也還用得上

拆機,之前用來除錯的是一張華碩的RTX3060dual mini o12G,這張卡是比較典型的ITX顯示卡,所以在機箱裡面顯得比較空。

很多朋友一直有個誤區,就是覺得搞深度學習一定得用很高階的顯示卡,然而實際上只要是支援CUDA就能搞。不需要訓練的話,對效能的需求並不算很高,而且作為除錯機,不是主力訓練機的話,實際上視訊記憶體的需求比效能更重要。因為深度學習訓練的視訊記憶體壓力來自兩個方面,一個是模型引數,一個是tensor快取,這兩者都會隨著模型引數和輸入規模增大而急劇膨脹。一般要除錯肯定會要求模型和輸入與主力訓練機上的一致,這樣不容易出NaN bug,所以面對視訊記憶體數倍於除錯機的時候,買一張視訊記憶體足夠容納常規模型的顯示卡還挺關鍵的。

A卡的遊戲卡這邊視訊記憶體倒是給的很大方,4000多的RX6800都有16G視訊記憶體,如果用ROCm的話就能獲得這個優勢。而N卡的細分就要難受很多,RTX3060 12GB視訊記憶體屬於是與效能不匹配的大狂牛級,反而造就了他在深度學習方面的些許優勢。與之相比,要獲得12G視訊記憶體在Geforce產品線裡至少要加錢一倍買3080 12GB,諸如3060Ti和3070這些8GB顯示卡是沒太大吸引力的。3090 24GB如果作為除錯顯示卡就有點太奢侈了,一般都當主力用。

如果要買專業卡,我的評價是建議先看看預算,因為專業卡買來那就是真專業用途,價格更貴遊戲更卡,想清楚自己是不是確實需要專業卡帶來的其他應用上的優勢。首先AMD的Radeon WX是沒有額外優勢的,需要AMD的MI加速卡才是AI最佳化,這個卡一般是給主力訓練機用的,新手拿著這個開機都是個問題。而N卡的RTX A2000的核心和視訊記憶體基本和3060保持一致,但是價格貴了一倍,深度學習用不太上Quadro的ECC視訊記憶體和專業bios,不過要是有其它專業卡需求的話是可以考慮的。RTX A4000 16GB在Quadro裡是不錯的選擇,視訊記憶體和效能都很夠用,6000多的價格一般人咬咬牙也能承擔。A5000和A6000更適合主力訓練機,視訊記憶體大效能強,規格也適合伺服器機櫃。而且專業卡相對來說更保值,可以參見Pascal的專業卡現在什麼價,P6000 24GB降價這麼久了還得一萬一張,而同一代的TitanXp已經跌得馬都不認識了

NUC12的計算板是獨立導風罩,所以不用太擔心散熱,3條m。2+兩個sodimm,裝兩個系統再放個資料盤也沒什麼問題

基本測試

搞深度學習程式碼除錯的電腦的CPU效能要求其實不算很高,不用上HEDT或者伺服器CPU,桌面級主流效能的CPU就夠了,i5 12400或者5600X都是挺正常的選擇,我這個NUC12用的是12700。不過要跑大規模訓練的話,建議按照每張卡4個CPU物理核心來配置CPU

除錯機比較需要的是IO能力,保證隨時能快速的從伺服器端下載資料,或者從本地同步程式碼到伺服器,頻寬越大越舒服,延遲越低越舒服,現在一般機器都有有線無線兩張網絡卡,保證有線速度至少能達到千兆就好,NUC12 Extreme 的網絡卡是萬兆的,10Gbytes的資料秒傳還是非常舒服的

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

Windows深度學習?

win是目前應用最廣的作業系統,有非常完善的圖形介面,而且絕大部分遊戲都只能在win上跑。如果你的深度學習除錯需求非常輕度,只需要稍微改改程式碼,或者目前還處於學習階段的話,比較建議使用windows。在win上安裝CUDA和裝驅動沒什麼本質區別,在CUDA中是包含了一個驗證驅動的,如果驅動版本更低建議更新CUDA的驅動,如果已經有更高版本的驅動就不用安裝了。如果不使用VS,安裝選項中的VS integration是可以取消的,這個元件在安裝的時侯可能會報錯

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

安裝好了可以用軟體檢查一下是否正常,或者使用nvcc命令檢視。而CUDNN可以自行安裝,在除錯機上屬於是可選項

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

一般用的深度學習環境解決方案是pycharm+anaconda,這兩個都是非常常用的軟體,pycharm有社群版,也可以申請教育優惠,而anaconda則是免費的

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

裝conda用pip乃是人間常態,不得不品嚐

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

裝好了就可以搞程式碼開始跑了,程式碼跑起來很簡單,跑得好跑得快才是關鍵,這些都得靠不斷地學習才能積累經驗,沒有誰是一來就會設計實驗然後跑大規模訓練的

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

win上的深度學習雖然作業系統更熟悉,而且安裝也比較方便,但是可惜的是win上的CUDA效能並不是最強的。首先win上就面臨一個問題,那就是視訊記憶體佔用,作為主力的顯示卡會分出0。75G的視訊記憶體給桌面顯示,某些程式還會佔用更多的視訊記憶體,比如瀏覽器,這讓本身就不富裕的視訊記憶體更顯得捉襟見肘(要是隻有8G視訊記憶體光是桌面就佔了10%)。還有一個問題是win的記憶體排程問題,在多個程序同時呼叫某個記憶體位置的時候,win上的python有時候會主動再為這個內容開一個地址,這就導致深度學習中很多多程序處理過程速度都會比linux上稍微慢一些

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

跑程式碼有很多種方法,作為除錯機,一般是推薦使用pycharm的debug模式,可以快速定位錯誤檢視變數具體數值,程式碼能跑通了再使用命令列

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

使用nvidia-smi命令檢視使用情況,win上空間使用大的問題還是比較明顯的,再linux上佔用只有5。3G的模型win上需要7。7G,一些原本可以同時跑兩個的模型現在只能跑一個了。某些朋友要問了,為什麼要同時跑多個呢?因為深度學習過程中顯示卡並不是100%佔用的,除了訓練階段的IO階段外,訓練之間的val階段佔用也相當小,為了充分壓榨顯示卡效能,同時跑兩個模型是可以考慮的一種方法

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

ROCm+Linux深度學習?

本來想吧NvCuda在Linux上的過程也寫寫的,但是感覺太重複贅餘了,除了安裝過程有些不一樣之外,其他基本都是一樣的,而且網上的教程大概有1000000個,各個版本都有,各種bug也都是老生常談,所以我就省略了

那麼下面這個環節講什麼?現在我們來聊聊AMD的最新科技,ROCm5。x。首先是支援,目前5。x的版本已經支援了包括RX6800XT,RX6800,RX6900XT的一系列顯示卡,AMD也提供了一個AMDGPU管理軟體,讓ROCm的安裝非常方便。而ROCm目前是隻支援Linux的,要解決也非常簡單,普普通通裝個雙系統就可以了(確信)。對於DL老鳥來說,裝Linux雙系統基本如喝水,所以也不是什麼問題了

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

NUC12的顯示卡支援讓RX6800公版正好能放進這機箱,非常合適,留給線的空間也很充足

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

簡單說一下ROCm對系統和環境的選擇。首先Linux上用AMD顯示卡是不用裝驅動的,Ubuntu上面集成了非常完善的AMD開源版本驅動,所以裝好了就能識別,不用像Nv一樣單獨打驅動。而目前ROCm所支援的版本已經到了ubuntu 20。04 5。13。0,基本就是最新的,非常不建議更新5。15。0,會在安裝的時候遇到build bug

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

軟體仍然選擇Anaconda和Pycharm,這兩者在Linux上的安裝都是非常容易的,教程也很多,就不多贅述了,比較建議新裝conda的使用者換一下下載源

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

Linux上的conda環境是可以從同系統的conda中扒出來,比如這個環境就是直接從主力機上覆制下來的,只需放到conda的環境檔案中,就能像建立的系統一樣透過命令啟用,pycharm中也是能找到並使用的。還有一個比較建議裝的東西是htop,有比較豐富的系統資訊,檢視CPU和RAM,檢視GPU的可以用rocm-smi命令

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

下面簡單說一說ROCm,這個東西是AMD所提出的一個開放式AI加速庫,所有的程式碼掛在github上面,非常開源,現在支援也算是比較好了,從ROCm、MIopen的版本迭代來看就會發現AMD對此的投入也是越來越多,看來是真的有錢了,有錢就是好說話

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

而目前ROCm終於來到了5。x版本,終於支援了最新一代的RX6000系列的一些顯示卡,支援速度並沒有CUDA那麼快,這也是沒有商業化的加速庫的問題之一

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

至於ROCm的速度,騎士這個是不用太擔心的,早在幾年之前還在Vega構架的時候,就能跟當代的P100有來有回,而後面的測試來看,現在RX6800也是非常有競爭力的,基本和同級的顯示卡持平

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

安裝步驟大概如下:

首先確認自己的系統版本是否為ubuntu20。04 5。13。0-xx。不建議ubuntu18,目前5。x版本是跟著20版本來的,文件會更豐富一些。非常不建議更新5。15。0系統,因為ROCm對應的amdgpu dkms支援是5。13。0版本的,在5。15上會遇到bug,如果你更新了新版本核心,請直接刪掉謝謝,順便把自動更新關了,做開發的Linux開自動更新真的沒必要

其次是確認自己的apt-get是否已經更新,ROCm的依賴包含一些系統元件和編譯器,需要自行安裝build-essnetial,這一點和其他的加速庫是一樣的

然後使用下面這些命令(從文件裡面抄的)

sudo apt update && sudo apt-get dist-upgrade (後面這個命令原本是sudo apt dist-upgrade,但是會更新系統核心並導致bug所以改成了apt-get)

sudo apt-get install wget gnupg2

sudo usermod -a -G video $LOGNAME

echo ‘ADD_EXTRA_GROUPS=1’ | sudo tee -a /etc/adduser。conf

echo ‘EXTRA_GROUPS=video’ | sudo tee -a /etc/adduser。conf

echo ‘EXTRA_GROUPS=render’ | sudo tee -a /etc/adduser。conf

sudo wget https://repo。radeon。com/amdgpu-install/22。10/ubuntu/focal/amdgpu-install_22。10。50100-1_all。deb

sudo apt-get install 。/amdgpu-install_22。10。50100-1_all。deb

sudo amdgpu-install ——usecase=dkms

amdgpu-install -y ——usecase=rocm

sudo usermod -a -G video $LOGNAME

sudo usermod -a -G render $LOGNAME

echo ‘ADD_EXTRA_GROUPS=1’ | sudo tee -a /etc/adduser。conf

echo ‘EXTRA_GROUPS=video’ | sudo tee -a /etc/adduser。conf

echo ‘EXTRA_GROUPS=render’ | sudo tee -a /etc/adduser。conf

echo ‘export PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin’ | sudo tee -a /etc/profile。d/rocm。sh

到這裡安裝就已經完成了,重啟一下,使用rocm-smi以及rocminfo兩個命令即可檢視是否安裝成功

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

接下來是安裝深度學習平臺,一般時使用的torch,現在torch已經更新了5。x的安裝命令,可以直接從官網照抄,下載安裝速度也是全滿的,非常舒暢。如果要使用tensorflow,需要在官網上下載檔案本地安裝。現在Torch的穩定版已經完全同步了ROCm的適配更新,而且老版本也是有留檔的,不用擔心跑扒下來的程式碼自己的torch版本不支援

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

目前安裝rocm預設使用的py310版本,所以在建立的時候可以直接建立3。10版本的虛擬環境,如果是已經建立好的環境,可在torch官網下載3。7-3。9的對應版本,然後執行本地安裝

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

還有一個可選的東西是MIOpen庫,這個庫可以加速ROCm的載入過程,降低延遲,提高對應型號顯示卡的訓練速度,跟CUDnn一樣對於除錯過程不是必須的。MIOpen和ROCm一樣都是開源的,所以即使AMD只發布了支援GFX1030(也就是RX6800及以上的顯示卡支援),但是實際上可以透過自己改程式碼來實現RX6700XT到RX6500XT的顯示卡ROCm支援,這在某位知乎大神的操作下已經成為了現實

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

ROCm的具體使用如何呢?雖然顯示卡完全不一樣,但是在torch裡面為了使用方便,所有和rocm相關的東西都有cuda的同義物件,比如cuda。device之類的方法,即使之前的程式碼中含有使用cuda的語句,也是可以直接開跑不需要再替換的

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

比如這個作為benchmark的程式碼,程式碼中也使用了大量cuda的方法,比如查詢版本和cuda裝置這些,都是可以不改程式碼直接跑的

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

來看看RX6800的深度學習測試成績

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

網路上還有一些其他顯示卡跑出來的成績,比如這個是單張A100的成績

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

這個是RTX3090單張的成績

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

這個是實現了ROCm支援的RX6700XT的成績

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

下面兩個是我自己在Linux上測的RTX3060的成績

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...

最後來看看成績彙總吧,我的評價是,ROCm跟CUDA相比已經沒有表觀上的鴻溝了。深度學習效能測試的差距跟實際的效能差是比較相似的,因為3090和A100就是比RX6800強不少,深度學習也對應的強一些很正常。RX6800和RX6700XT相比強一些也能佐證,這個測試結果並沒有什麼麼大問題。而RTX3060的效能也就停留在除錯階段了,正如上面所說他的12GB視訊記憶體是和實力不相匹配的大狂牛,所以在除錯階段可用,真要跑大規模訓練還是得用RTX3090或者RX6800以上級別的顯示卡

總結

深度學習這個話題大家都很熟悉,而實際上隨著目前各種深度學習平臺的逐漸發展,加上網上各種教程都是老生常談,FastAI一直在簡化深度學習的過程,要入門深度學習的學習成本是相當低的。而此時需求就來到了硬體這一邊,選擇比較合適的除錯或主力訓練硬體是一個一個困擾很多小白的問題,上面我也列出了很多選擇,這裡就不重複了,總的來說,購買相應的硬體只需要服從下面這些原則:

1。符合自己的預算和應用需求。就玩玩風格遷移不需要買A100,要搞大規模訓練沒辦法用RTX2060,從自己的預算和用途出發來選擇

2。區分好除錯需求和訓練需求。如果是學生或打工人,先問問老闆有沒有伺服器,有沒有分配的個人電腦;如果是老闆,先問問學生或者打工人效能需求是怎樣的,需要不需要除錯和訓練分立

3。不強求某一種平臺。不要因為周圍都用CUDA/ROCm就覺得非xxx不可,實際上程式碼是可以通用的

目前ROCm安裝的教程比較少,如果有ROCm安裝的問題,或者硬體選擇的問題,可以隨時評論區提問,這樣issue大家都能看到

深度學習硬體指南,解析我的DL除錯專用機NUC12飛龍峽谷+RTX3060...