為深度學(xué)習(xí)選擇最好的GPU
在進(jìn)行機(jī)器學(xué)習(xí)項目時,特別是在處理深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)時,最好使用GPU而不是CPU來處理,因為在神經(jīng)網(wǎng)絡(luò)方面,即使是一個非?;镜腉PU也會勝過CPU。
但是你應(yīng)該買哪種GPU呢?本文將總結(jié)需要考慮的相關(guān)因素,以便可以根據(jù)預(yù)算和特定的建模要求做出明智的選擇。
為什么 GPU 比 CPU 更適合機(jī)器學(xué)習(xí)?
CPU(中央處理器)是計算機(jī)的主力,它非常靈活,不僅需要處理來自各種程序和硬件的指令,并且處理速度也有一定的要求。為了在這種多任務(wù)環(huán)境中表現(xiàn)出色,CPU 具有少量且靈活快速的處理單元(也稱為核)。
GPU(圖形處理單元)GPU在多任務(wù)處理方面不那么靈活。但它可以并行執(zhí)行大量復(fù)雜的數(shù)學(xué)計算。這是通過擁有更多數(shù)量的簡單核心(數(shù)千個到上萬)來實現(xiàn)的,這樣可以同時處理許多簡單的計算。
并行執(zhí)行多個計算的要求非常適合于:
- 圖形渲染——移動的圖形對象需要不斷地計算它們的軌跡,這需要大量不斷重復(fù)的并行數(shù)學(xué)計算。
- 機(jī)器和深度學(xué)習(xí)——大量的矩陣/張量計算,GPU可以并行處理。
- 任何類型的數(shù)學(xué)計算,可以拆分為并行運行。
在Nvidia自己的博客上已經(jīng)總結(jié)了CPU和GPU的主要區(qū)別:
張量處理單元(TPU)
隨著人工智能和機(jī)器/深度學(xué)習(xí)的發(fā)展,現(xiàn)在已經(jīng)有了更專門的處理核心,稱為張量核(Tensor cores)。在執(zhí)行張量/矩陣計算時,它們更快更有效。因為我們在機(jī)器/深度學(xué)習(xí)中所處理的數(shù)據(jù)類型就是張量。
雖然有專用的tpu,但一些最新的GPU也包括許多張量核,我們會在后面總結(jié)。
Nvidia vs AMD
這將是一個相當(dāng)短的部分,因為這個問題的答案肯定是Nvidia
雖然可以使用AMD的gpu進(jìn)行機(jī)器/深度學(xué)習(xí),但在寫本文時,Nvidia的GPU具有更高的兼容性,并且通常更好地集成到TensorFlow和PyTorch等工具中(比如目前PyTorch的AMD GPU的支持還只能在Linux上使用)。
使用AMD GPU需要使用額外的工具(ROCm),這個會有一些額外的工作,并且版本可能也不會更新的很快。這種情況將來可能會有所改善,但是現(xiàn)在為止,最好還是使用Nvidia。
GPU選擇的主要屬性
選擇一個夠完成機(jī)器學(xué)習(xí)任務(wù)并且符合預(yù)算的GPU,基本上歸結(jié)為四個主要因素的平衡:
- GPU有多少內(nèi)存?
- GPU有多少個CUDA和/或張量核?
- 卡使用什么芯片架構(gòu)?
- 功耗要求是多少(如果有)?
下面將逐一探討這些方面,希望能讓你更好地理解什么對你來說是重要的。
GPU內(nèi)存
答案是,越多越好!
這實際上取決于你的任務(wù),以及這些模型有多大。例如,如果你正在處理圖像、視頻或音頻,那么根據(jù)定義,你將處理相當(dāng)大量的數(shù)據(jù),GPU RAM將是一個非常重要的考慮因素。
總有辦法解決內(nèi)存不足的問題(例如減少批處理大小)。但是這將會浪費訓(xùn)練的時間,因此需要很好地平衡需求。
根據(jù)經(jīng)驗,我的建議如下:
- 4GB:我認(rèn)為這是絕對的最小值,只要你不是在處理過于復(fù)雜的模型,或者大的圖像、視頻或音頻,這個在大多數(shù)情況下能工作,但是達(dá)不到日常使用的需要。如果你剛剛起步,想嘗試一下又不想全力投入,那么可以從它開始
- 8GB:這是一個日常學(xué)習(xí)很好的開始,可以在不超過RAM限制的情況下完成大多數(shù)任務(wù),但在使用更復(fù)雜的圖像、視頻或音頻模型時會遇到問題。
- 12GB:我認(rèn)為這是科研最基本的的要求??梢蕴幚泶蠖鄶?shù)較大的模型,甚至是那些處理圖像、視頻或音頻的模型。
- 12GB+ :越多越好,你將能夠處理更大的數(shù)據(jù)集和更大的批處理大小。超過12GB才是價格真正開始上漲的開始。
一般來說,如果成本相同的話,選擇“速度較慢”但內(nèi)存較大的卡會更好。請記住,GPU的優(yōu)勢是高吞吐量,這在很大程度上依賴于可用的RAM來通過GPU傳輸數(shù)據(jù)。
CUDA核心和Tensor 核心
這其實很簡單,越多越好。
首先考慮RAM,然后就是CUDA。對于機(jī)器/深度學(xué)習(xí)來說,Tensor 核比CUDA核更好(更快,更有效)。這是因為它們是為機(jī)器/深度學(xué)習(xí)領(lǐng)域所需的計算而精確設(shè)計的。
但是這并不重要,因為CUDA內(nèi)核已經(jīng)足夠快了。如果你能得到一張包含Tensor 核的卡,這是一個很好的加分點,只是不要太糾結(jié)于它。
后面你會看到“CUDA”被提到很多次,我們先總結(jié)一下它:
CUDA核心——這些是顯卡上的物理處理器,通常有數(shù)千個,4090已經(jīng)1萬6了。
CUDA 11 -數(shù)字可能會改變,但這是指安裝的軟件/驅(qū)動程序,以允許顯卡正常的工作。NV會定期發(fā)布新版本,它可以像任何其他軟件一樣安裝和更新。
CUDA代數(shù)(或計算能力)-這描述了顯卡卡在它的更新迭代的代號。這在硬件上是固定的,因此只能通過升級到新卡來改變。它由數(shù)字和一個代號來區(qū)分。例子:3。x[Kepler],5。x [Maxwell], 6。x [Pascal], 7。x[Turing]和8。x(Ampere)。
芯片架構(gòu)
這實際上比你想象的更重要。我們這里不討論AMD,我的眼里只有”老黃“。
上面我們已經(jīng)說了,30系列的卡就是Ampere架構(gòu),最新的40系列是 Ada Lovelace。一般老黃都會使用一個著名科學(xué)家和數(shù)學(xué)家來對架構(gòu)命名,這次選擇的是著名英國詩人拜倫之女,建立了循環(huán)和子程序概念的女?dāng)?shù)學(xué)家、計算機(jī)程序創(chuàng)始人Ada Lovelace來命名。
了解對于卡的計算能力,我們要了解2個方面:
- 顯著的功能改進(jìn)
- 這里一個重要的功能就是, 混合精度訓(xùn)練:
使用精度低于 32 位浮點數(shù)的數(shù)字格式有很多好處。首先它們需要更少的內(nèi)存,從而能夠訓(xùn)練和部署更大的神經(jīng)網(wǎng)絡(luò)。其次它們需要更少的內(nèi)存帶寬,從而加快數(shù)據(jù)傳輸操作。第三數(shù)學(xué)運算在精度降低的情況下運行得更快,尤其是在具有 Tensor Core 的 GPU 上?;旌暇扔?xùn)練實現(xiàn)了所有這些好處,同時確保與完全精度訓(xùn)練相比不會丟失特定于任務(wù)的準(zhǔn)確性。它通過識別需要完全精度的步驟并僅對這些步驟使用 32 位浮點而在其他任何地方使用 16 位浮點來實現(xiàn)這一點。
這里是Nvidia 官方文檔,有興趣的可以看看:
https://docs.nvidia.com/deeplearning/performance/mixed-precision-training/index.html
如果您的 GPU 具有 7.x (Turing) 或更高的架構(gòu),才有可能使用混合精確訓(xùn)練。也就是說 桌面的RTX 20 系列或高版本,或服務(wù)器上的 “T”或“A”系列。
混合精度訓(xùn)練具有如此優(yōu)勢的主要原因是它降低了 RAM 使用率,Tensor Core 的 GPU會加速混精度訓(xùn)練,如果沒有的話使用FP16也會節(jié)省顯存,可以訓(xùn)練更大的批大小,間接提升訓(xùn)練速度。
是否會被棄用
如果你對RAM有特別高的要求,但又沒有足夠的錢買高端卡,那么你可能會選擇二手市場上的老款GPU。這有一個相當(dāng)大的缺點……這張卡的壽命結(jié)束了。
一個典型的例子就是Tesla K80,它有4992個CUDA核心和24GB的RAM。2014年,它零售價約為7000美元?,F(xiàn)在的價格從 150到170美元不等!(咸魚的價格600-700左右)這么小的價格卻有這么大的內(nèi)存,你一定很興奮。
但是這有一個非常大的問題。K80的計算架構(gòu)是3.7 (Kepler),CUDA 11起已經(jīng)不支持(當(dāng)前CUDA版本為11.7)。這意味著這張卡已經(jīng)廢了,所以它才賣的這么便宜。
所以在選擇2手卡時一定要看清楚是否支持最新版本的驅(qū)動和CUDA,這是最重要的。
高端游戲卡 VS 工作站/服務(wù)器卡
老黃基本上把卡分成了兩部分。消費類顯卡和工作站/服務(wù)器的顯卡(即專業(yè)顯卡)。
這兩個部分之間有明顯的區(qū)別,對于相同的規(guī)格(RAM, CUDA內(nèi)核,架構(gòu)),消費類顯卡通常會更便宜。但是專業(yè)卡通常會有更好的質(zhì)量,和較低的能源消耗(其實渦輪的噪音挺大的,放機(jī)房還可以,放家里或者試驗室有點吵)。
高端(非常昂貴)的專業(yè)卡,你可能會注意到它們有很大的RAM(例如RTX A6000有48GB, A100有80GB!)。這是因為它們通常直接針對3D建模、渲染和機(jī)器/深度學(xué)習(xí)專業(yè)市場,這些市場需要高水平的RAM。再說一次,如果你有錢,買A100就對了!(H100是A100的新版,目前無法評價)
但是我個人認(rèn)為,我們還是選擇消費者的高端游戲卡,因為如果你不差錢,你也不會看這篇文章,對吧
選擇建議
所以在最后我根據(jù)預(yù)算和需求提出一些建議。我將其分為三個部分:
- 低預(yù)算
- 中等預(yù)算
- 高預(yù)算
高預(yù)算不考慮任何超出高端消費顯卡。還是那句話如果你有錢:A100,H100隨便買。
本文中會包含在二手市場買到的卡片。這主要是因為我認(rèn)為在低預(yù)算的情況下,二手是可以考慮的。這里還包括了專業(yè)桌面系列卡(T600、A2000和A4000),因為它的一些配置比同類消費類顯卡稍差,但功耗明顯更好。
低預(yù)算
中等預(yù)算
高預(yù)算
在線/云服務(wù)
如果你決定花錢買顯卡不適合你,你可以利用谷歌Colab,它可以讓你免費使用GPU。
但這是有時間限制的,如果你使用GPU太長時間,他們會把你踢出去,然后回到CPU上。如果GPU處于非活動狀態(tài)太長時間,可能是在你寫代碼的時候,它也會把GPU拿回來。GPU也是自動分配的,所以你不能選擇你想要的確切的GPU(你也可以每月9.9刀弄個Colab Pro,我個人覺得要比低預(yù)算好很多,但是要求有梯子,$49.99的Colab Pro+有點貴,不建議)。
在寫本文時,通過Colab可以獲得以下GPU:
在前面也提到了,K80有24GB的RAM和4992個CUDA核心,它基本上是兩個K40卡連在一起。這意味著當(dāng)你在Colab中使用K80時,你實際上可以訪問一半的卡,所以也就是只有12GB和2496個CUDA內(nèi)核。
總結(jié)
最后現(xiàn)在4090還是處于耍猴的狀態(tài),基本上要搶購或者加價找黃牛
但是16384 CUDA + 24GB,對比3090 的10496 CUDA ,真的很香。
而4080 16G的9728CUDA 如果價格能到7000內(nèi),應(yīng)該是一個性價比很高的選擇。12G的 4080就別考慮了,它配不上這個名字。
對于AMD的 7900XTX 應(yīng)該也是一個很好的選擇,但是兼容性是個大問題,如果有人測試的話可以留言。
40系列老黃一直在耍猴,所以如果不著急的話還再等等把:
你不買,我不買,明天還能降兩百