眾所周知,在處理深度學習和神經網路任務時,最好使用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
與英偉達圖靈架構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)來獲得舊資料類型的所有好處。
因此,這些資料類型並沒有提供速度,而是改善了訓練中低精度的使用便利性。
雖然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電源線起火是因為被彎折過度了。實際上只有0.1%的用戶是這個原因,主要問題是電纜沒有正確插入。
因此,如果你遵循以下安裝說明,使用RTX 4090是完全安全的。
1. 如果你使用舊的電纜或舊的GPU,確保觸點沒有碎片/灰塵。
2.使用電源連接器,並將其插入插座,直到你聽到咔嚓一聲--這是最重要的部分。
3. 從左到右扭動電源線來測試是否合適。電纜不應該移動。
4.目視檢查與插座的接觸情況,電纜和插座之間無間隙。
對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的原始效能排行,看看誰最能打。
我們可以看到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,可分為以下步驟:
我們可以看到,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通常不是一個好的選擇。
以上是深度學習GPU選購指南:哪一款顯示卡配得上我的煉丹爐?的詳細內容。更多資訊請關注PHP中文網其他相關文章!