深度學習GPU選購指南:哪款顯卡配得上我的煉丹爐?
眾所周知,在處理深度學習和神經網絡任務時,最好使用GPU而不是CPU來處理,因為在神經網絡方面,即使是一個比較低端的GPU,性能也會勝過CPU。
深度學習是一個對計算有著大量需求的領域,從一定程度上來說,GPU的選擇將從根本上決定深度學習的體驗。
但問題來了,如何選購合適的GPU也是件頭疼燒腦的事。
怎么避免踩雷,如何做出性價比高的選擇?
曾經拿到過斯坦福、UCL、CMU、NYU、UW 博士 offer、目前在華盛頓大學讀博的知名評測博主Tim Dettmers就針對深度學習領域需要怎樣的GPU,結合自身經驗撰寫了萬字長文,最后給出了DL領域的推薦GPU。
Tim Dettmers此人的研究方向是表征學習、硬件優化的深度學習,他自己創建的網站在深度學習和計算機硬件領域也是小有名氣。
Tim Dettmers此文推薦的GPU全部來自N廠,他顯然也認為,搞機器學習,AMD目前還不配擁有姓名。
原文鏈接小編也貼在下面啦。
原文鏈接:https://timdettmers.com/2023/01/16/which-gpu-for-deep-learning/#GPU_Deep_Learning_Performance_per_Dollar
RTX40和30系的優缺點
與英偉達圖靈架構RTX 20系列相比,新的英偉達安培架構RTX 30系列具有更多優勢,如稀疏網絡訓練和推理。其他功能,如新的數據類型,應更多地被看作是一種易用化功能,因為它們提供了與圖靈架構相同的性能提升,但不需要任何額外的編程要求。
Ada RTX 40系列甚至有更多的進步,比如上面介紹的張量內存加速器(TMA)和8位浮點運算(FP8)。與RTX 30相比,RTX 40系列也有類似的電源和溫度問題。RTX 40的電源連接器電纜融化的問題可以通過正確連接電源電纜而輕松避免。
稀疏的網絡訓練
安培允許在密集的速度下進行細粒度結構的自動稀疏矩陣乘法。這是如何做到的?以一個權重矩陣為例,把它切成4個元素的碎片。現在想象這4個元素中的2個元素為零。圖1顯示了這種情況的樣子。
圖1:Ampere架構GPU中的稀疏矩陣乘法功能所支持的結構
當你將這個稀疏權重矩陣與一些密集輸入相乘時,安培的稀疏矩陣張量核心功能會自動將稀疏矩陣壓縮為密集表示,其大小為圖2所示的一半。
在壓縮之后,密集壓縮的矩陣瓦片被送入張量核心,張量核心計算的矩陣乘法是通常大小的兩倍。這有效地產生了2倍的速度,因為在共享內存的矩陣乘法過程中,帶寬要求減半。
圖2:在進行矩陣乘法之前,稀疏矩陣被壓縮為密集表示。
我在研究中致力于稀疏網絡訓練,我還寫了一篇關于稀疏訓練的博文。對我的工作的一個批評是:"你減少了網絡所需的FLOPS,但并沒有產生速度的提升,因為GPU不能進行快速的稀疏矩陣乘法"。
隨著Tensor Cores的稀疏矩陣乘法功能的增加,我的算法或其他稀疏訓練算法,現在實際上在訓練期間提供了高達2倍的速度。
開發的稀疏訓練算法有三個階段:(1)確定每層的重要性。(2) 刪除最不重要的權重。(3) 提升與每層的重要性成比例的新權重。
雖然這一功能仍處于實驗階段,而且訓練稀疏網絡還不普遍,但在你的GPU上擁有這一功能意味著你已經為稀疏訓練的未來做好了準備。
低精度計算
在我的工作中,我之前已經表明,新的數據類型可以提高低精度反向傳播期間的穩定性。
圖4:低精度深度學習8位數據類型。深度學習訓練得益于高度專業化的數據類型
目前,如果你想用16位浮點數(FP16)進行穩定的反向傳播,最大的問題是普通FP16數據類型只支持[-65,504, 65,504]范圍內的數字。如果你的梯度滑過這個范圍,你的梯度就會爆炸成NaN值。
為了防止在FP16訓練中出現這種情況,我們通常會進行損失縮放,即在反向傳播之前將損失乘以一個小數字,以防止這種梯度爆炸。
Brain Float 16格式(BF16)對指數使用了更多的比特,這樣可能的數字范圍與FP32相同,BF16的精度較低,也就是有效數字,但梯度精度對學習來說并不那么重要。
所以BF16所做的是,你不再需要做任何損失縮放,也不需要擔心梯度會迅速爆炸。因此,我們應該看到,通過使用BF16格式,訓練的穩定性有所提高,因為精度略有損失。
這對你意味著什么。使用BF16精度,訓練可能比使用FP16精度更穩定,同時提供相同的速度提升。使用TF32精度,你可以得到接近FP32的穩定性,同時提供接近FP16的速度提升。
好的是,要使用這些數據類型,你只需用TF32取代FP32,用BF16取代FP16--不需要修改代碼。
不過總的來說,這些新的數據類型可以被看作是懶惰的數據類型,因為你可以通過一些額外的編程努力(適當的損失縮放、初始化、規范化、使用Apex)來獲得舊數據類型的所有好處。
因此,這些數據類型并沒有提供速度,而是改善了訓練中低精度的使用便利性。
風扇設計和GPU溫度
雖然RTX 30系列的新風扇設計在冷卻GPU方面表現非常好,但非創始版GPU的不同風扇設計可能會出現更多問題。
如果你的GPU發熱超過80C,它就會自我節流,減慢其計算速度/功率。解決這個問題的辦法是使用PCIe擴展器,在GPU之間創造空間。
用PCIe擴展器分散GPU對散熱非常有效,華盛頓大學的其他博士生和我都使用這種設置,并取得了巨大的成功。它看起來并不漂亮,但它能使你的GPU保持涼爽!
下面這套系統已經運行了4年,完全沒有問題。如果你沒有足夠的空間在PCIe插槽中安裝所有的GPU,也可以這么用。
圖5: 帶PCIE擴展口的4顯卡系統,看起來一團亂,但散熱效率很高。
優雅地解決功耗限制問題
在你的GPU上設置一個功率限制是可能的。因此,你將能夠以編程方式將RTX 3090的功率限制設置為300W,而不是其標準的350W。在4個GPU系統中,這相當于節省了200W,這可能剛好足夠用1600W PSU建立一個4x RTX 3090系統的可行性。
這還有助于保持GPU的冷卻。因此,設置功率限制可以同時解決4x RTX 3080或4x RTX 3090設置的兩個主要問題,冷卻和電源。對于4倍的設置,你仍然需要高效散熱風扇的 GPU,但這解決了電源的問題。
圖6:降低功率限制有輕微的冷卻效果。將RTX 2080 Ti的功率限制降低50-60W,溫度略有下降,風扇運行更加安靜
你可能會問,「這不會降低GPU的速度嗎?」 是的,確實會降,但問題是降了多少。
我對圖5所示的4x RTX 2080 Ti系統在不同功率限制下進行了基準測試。我對推理過程中BERT Large的500個小批次的時間進行了基準測試(不包括softmax層)。選擇BERT Large推理,對GPU的壓力最大。
圖7:在RTX 2080 Ti上,在給定的功率限制下測得的速度下降
我們可以看到,設置功率限制并不嚴重影響性能。將功率限制在50W,性能僅下降7%。
RTX 4090接頭起火問題
有一種誤解,認為RTX 4090電源線起火是因為被彎折過度了。實際上只有0.1%的用戶是這個原因,主要問題是電纜沒有正確插入。
因此,如果你遵循以下安裝說明,使用RTX 4090是完全安全的。
1. 如果你使用舊的電纜或舊的GPU,確保觸點沒有碎片/灰塵。
2.使用電源連接器,并將其插入插座,直到你聽到咔嚓一聲--這是最重要的部分。
3. 通過從左到右扭動電源線來測試是否合適。電纜不應該移動。
4.目視檢查與插座的接觸情況,電纜和插座之間無間隙。
H100和RTX40中的8位浮點支持
對8位浮點(FP8)的支持是RTX 40系列和H100 GPU的一個巨大優勢。
有了8位輸入,它允許你以兩倍的速度加載矩陣乘法的數據,你可以在緩存中存儲兩倍的矩陣元素,而在Ada和Hopper架構中,緩存是非常大的,現在有了FP8張量核心,你可以為RTX 4090獲得0.66 PFLOPS的計算量。
這比2007年世界上最快的超級計算機的全部算力還要高。4倍于FP8計算的RTX 4090,可與2010年世界上最快的超級計算機相媲美。
可以看到,最好的8位基線未能提供良好的零點性能。我開發的方法LLM.int8()可以進行Int8矩陣乘法,結果與16位基線相同。
但是Int8已經被RTX 30 / A100 / Ampere這一代GPU所支持,為什么FP8在RTX 40中又是一個大升級呢?FP8數據類型比Int8數據類型要穩定得多,而且很容易在層規范或非線性函數中使用,這在整型數據類型中是很難做到的。
這將使它在訓練和推理中的使用變得非常簡單明了。我認為這將使FP8的訓練和推理在幾個月后變得相對普遍。
下面你可以看到這篇論文中關于Float vs Integer數據類型的一個相關主要結果。我們可以看到,逐個比特,FP4數據類型比Int4數據類型保留了更多的信息,從而提高了4個任務的平均LLM零點準確性。
GPU深度學習性能排行
先上一張圖來看GPU的原始性能排行,看看誰最能打。
我們可以看到H100 GPU的8位性能與針對16位性能優化的舊卡存在巨大差距。
上圖顯示的是GPU的原始相對性能,比如對于8位推理,RTX 4090的性能大約是 H100 SMX 的 0.33 倍。
換句話說,與RTX 4090相比,H100 SMX的8位推理速度快三倍。
對于此數據,他沒有為舊GPU建模8位計算。
因為8位推理和訓練在Ada/Hopper GPU上更有效,而張量內存加速器 (TMA) 節省了大量寄存器,這些寄存器在 8 位矩陣乘法中非常精確。
Ada/Hopper 也有 FP8 支持,這使得特別是 8 位訓練更加有效,在Hopper/Ada上,8位訓練性能很可能是16位訓練性能的3-4倍。
對于舊GPU,舊GPU的Int8推理性能則接近16位推理性能。
每一美元能買到多少算力
那么問題來了,GPU性能強可是我買不起啊......
針對預算不充足的小伙伴,接下來的圖表是他根據各個GPU的價格和性能統計的每美元性能排名(Performance per Dollar),側面反映了GPU性價比。
選擇一個完成深度學習任務并且符合預算的GPU,可分為以下幾個步驟:
- 首先確定你需要多大的顯存(至少12GB用于圖像生成,至少24GB用于處理Transformer);
- 針對選8位還是16位(8-bit or 16-bit),建議是能上16位就上,8位在處理復雜編碼任務時還是會有困難;
- 根據上圖中的指標,找到具有最高相對性能/成本的GPU。
我們可以看到,RTX4070Ti 對于8位和16位推理的成本效益最高,而RTX3080對于16位訓練的成本效益最高。
雖然這些GPU最具成本效益,但他們的內存也是個短板,10GB和12GB的內存可能無法滿足所有需求。
但對于剛入坑深度學習的新手來說可能是理想GPU。
其中一些GPU非常適合Kaggle競賽,在Kaggle比賽中取得好成績,工作方法比模型大小更重要,因此許多較小的 GPU非常適合。
Kaggle號稱是全球最大的數據科學家匯聚的平臺,高手云集,同時對萌新也很友好。
如果用作學術研究和服務器運營的最佳GPU似乎是 A6000 Ada GPU。
同時H100 SXM的性價比也很高,內存大性能強。
個人經驗來說,如果我要為公司/學術實驗室構建一個小型集群,我推薦66-80%的A6000 GPU 和20-33%的 H100 SXM GPU。
綜合推薦
說了這么多,終于到了GPU安利環節。
Tim Dettmers專門制作了一個「GPU選購流程圖」,預算充足就可以上更高配置,預算不足請參考性價比之選。
這里首先強調一點:無論你選哪款 GPU,首先要確保它的內存能滿足你的需求。為此,你要問自己幾個問題:
我要拿GPU做什么?是拿來參加 Kaggle 比賽、學深度學習、做CV/NLP研究還是玩小項目?
預算充足的情況下,可以查看上面的基準測試并選擇適合自己的最佳GPU。
還可以通過在vast.ai或Lambda Cloud中運行您的問題一段時間來估算所需的GPU內存,以便了解它是否能滿足你的需求。
如果只是偶爾需要一個GPU(每隔幾天持續幾個小時)并且不需要下載和處理大型數據集,那么vast.ai或 Lambda Cloud也能很好地工作。
但是,如果一個月每天都使用GPU且使用頻率很高(每天12小時),云GPU通常不是一個好的選擇。