深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

簡介

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

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

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

硬體介紹

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

很多朋友一直有個誤區,就是覺得搞深度學習一定得用很高端的顯卡,然而實際上只要是支持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已經跌得馬都不認識了

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

基本測試

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

Windows深度學習?

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

跑代碼有很多種方法,作為調試機,一般是推薦使用pycharm的debug模式,可以快速定位錯誤查看變量具體數值,代碼能跑通了再使用命令行

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

ROCm+Linux深度學習?

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

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

Linux上的conda環境是可以從同系統的conda中扒出來,比如這個環境就是直接從主力機上復制下來的,只需放到conda的環境文件中,就能像創建的系統一樣通過命令激活,pycharm中也是能找到並使用的。還有一個比較建議裝的東西是htop,有比較豐富的系統信息,查看CPU和RAM,查看GPU的可以用rocm-smi命令

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

安裝步驟大概如下:

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

其次是確認自己的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-i … .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飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

目前安裝rocm默認使用的py310版本,所以在創建的時候可以直接創建3.10版本的虛擬環境,如果是已經創建好的環境,可在torch官網下載3.7-3.9的對應版本,然後執行本地安裝

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

這個是RTX3090單張的成績

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

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

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/RTX3060

深度學習硬體指南, 解析DL調試機NUC12飛龍峽谷+RX6800/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飛龍峽谷+RX6800/RTX3060

來源:Chiphell