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