GPU選購指南:訓練ML模型,我必須買RTX3080嗎?

深度學習是一個計算要求非常高的領域,你對GPU的選擇將從根本上決定你的深度學習體驗。但是,如果你想購買一塊新GPU,主要看哪些特性呢?GPU內存、內核、張量核?如何做出有成本效益的選擇?這篇文章將深入研究這些問題,消除常見的誤解,讓你對如何考慮GPU有一個直觀的理解,並提供建議,幫助你做出正確的選擇。

前排提醒:本文字數約爲15000,閱讀時間較長,可收藏後慢慢閱讀。

嫌長不看,先放結論

總體最好的GPU:RTX 3080和RTX 3090。

(個人)避免使用的GPU:任何Tesla卡;任何Quadro卡;任何Founders Edition卡;Titan RTX、Titan V、Titan XP。

頗具成本效益而價格高昂:RTX 3080。

頗具成本效益而價格較便宜:RTX 3070、RTX 2060 Super。

我錢不多:購買二手卡,RTX 2070($400)、RTX 2060($300)、GTX 1070($220)、GTX 1070 Ti($230)、GTX 1650 Super($190)、GTX 980 Ti(6GB $150)。

我幾乎沒錢:有許多創業公司在推廣他們的雲:使用免費的雲積分,並在不同公司的賬戶之間來回切換,直到能買得起一塊GPU。

我做Kaggle:RTX 3070。

我是一名有競爭力的計算機視覺、預訓練或機器翻譯研究人員:4x RTX 3090。務必要等到有了良好的冷卻和足夠的電力後(我將更新這篇博文)

我是一名NLP研究人員:如果你不從事機器翻譯、語言建模或任何類型的預訓練工作,那麼RTX 3080就足夠了而且頗具成本效益。

我剛開始接觸深入學習,而且我很認真:從一塊RTX 3070開始。如果你在6到9個月後仍然很認真,賣掉你的RTX 3070,併購買4x RTX 3080。根據你下一步選擇的領域(初創公司、Kaggle、研究、深度學習應用),賣掉你的GPU,三年後再買更合適的(下一代RTX 40s GPU)。

我想嘗試深度學習,但沒當真:RTX 2060 Super就很好,但可能需要使用新電源。如果你的主板有一個PCIe x16插槽,並且有一個大約300W的電源,那麼GTX 1050 Ti是一個很好的選擇,因爲它不需要任何其他計算機組件就可以在你的臺式計算機上工作了。

用於模型並行化的、少於128個GPU的GPU集羣:如果你可以爲你的集羣購買RTX GPU:66%的8x RTX 3080和33%的8x RTX 3090(要確保能有效地冷卻)。如果解決不了RTX 3090的冷卻問題,那麼可以購買33%的RTX 6000 GPU或8x Tesla A100。如果不能購買RTX GPU,那麼我可能會選擇8x A100 Supermicro節點或8x RTX 6000節點。

用於模型並行化的、128個GPU的GPU集羣:考慮下8x Tesla A100設置。如果你使用超過512個GPU,那麼你應該考慮配置一個DGX A100 SuperPOD系統,以匹配你的規模。

正文開始

這篇博文旨在讓你對GPU和NVIDIA的Ampere系列GPU有不同層次的瞭解。

(1)如果你對GPU如何工作、什麼讓GPU速度更快、NVIDIA RTX 30 Ampere系列GPU有什麼獨特之處等問題的細節不感興趣,那麼你可以跳到性能及每美元性能圖表和建議部分。這些是這篇文章的核心和最有價值的內容。

(2)如果你關心具體的問題,我在這篇博文最後一部分回答了最常見的問題,以消除一些誤解。

(3)如果你想深入瞭解GPU和張量核是如何工作的,最好是從頭到尾閱讀這篇文章。根據你對相關主題的瞭解,你可以跳過一兩個小節。

我會在每個主要部分的開頭加上一小段總結,希望可以幫助你決定是否要閱讀這個部分。

概 述

這篇文章的結構如下。

首先,我將解釋是什麼使GPU速度更快。我將討論CPU與GPU、張量核、內存帶寬、GPU存儲層次以及它們與深度學習性能的關係。對於GPU可以提供什麼,這些解釋可能會幫助你得到一個更直觀的認識。

然後,我將對GPU的性能進行理論估計,並將其與NVIDIA的一些市場基準進行比較,以獲得可靠的、無偏差的性能數據。我將討論新的NVIDIA RTX 30 Ampere系列GPU的獨特特性,如果你購買GPU,這些特性是值得考慮的。

在此基礎上,我提出了1-2、4、8 GPU設置和GPU集羣的GPU建議。之後是問答部分,我回答了Twitter上常見的問題;在這一節中,我還將討論一些常見的誤解和其他一些五花八門的問題,比如雲與桌面對比、冷卻方式、AMD與NVIDIA對比等。

GPU如何工作?

如果你經常使用GPU,那麼瞭解它們如何工作是很有用的。這些知識有助於你理解爲什麼GPU在某些情況下速度慢而在其他情況下速度快。然後,你可以更好地理解爲什麼你首先需要一個GPU,以及其他未來的硬件選項可能會如何競爭。如果你只是想要有用的性能數值和參數,以幫助你決定購買哪個GPU,那麼你可以跳過這一節。對於GPU如何工作的問題,最好的高階解釋是我在Quora上的回答:

“爲什麼GPU適合深度學習”:https://timdettmers.com/Why-are-GPUs-well-suited-to-deep-learning?top_ans=21379913

這是一個高階解釋,很好地說明了爲什麼GPU比CPU更適合深度學習。如果我們關注細節,就能理解是什麼讓一個GPU比另一個更好。

與處理速度相關的最重要的GPU參數

本節可以幫助你更直觀地理解如何考慮深度學習的性能。這種理解可以幫助你評估未來的GPU。

張量核

要點:

  • 張量核將乘法和加法運算所需的cycle減少爲1/16——在我舉的例子中,對於一個32×32的矩陣,從128個cycle減少到8個cycle。

  • 張量覈減少了反覆共享內存訪問的次數,從而節省了額外的內存訪問cycle。

  • 張量核速度如此之快,計算不再是瓶頸。唯一的瓶頸是如何將數據傳輸到張量核中。

現在GPU已經足夠便宜,幾乎每個人都能負擔得起一個有張量核的GPU。這就是爲什麼我只推薦具有張量核的GPU。瞭解它們是如何工作的,有助於理解這些專門用於矩陣乘法的計算單元的重要性。這裏我將向你展示一個簡單的例子:A*B=C矩陣乘法,其中,所有矩陣的大小都是32×32,我們將分別看下,計算模式在有和沒有張量核時是什麼樣的。

要完全理解這一點,就必須理解cycle的概念。如果一個處理器以1GHz的速度運行,它每秒可以完成10^9個cycle。每個cycle都代表一次計算機會。然而,大多數時候,操作所花費的時間會超過一個cycle。因此,它創建了一個管道,用於啓動一個操作,它需要等待前一個操作完成所需的cycle數。這也稱爲操作延遲。

下面是一些重要操作的延遲:

  • 全局內存訪問(最高48GB):~200 cycle

  • 共享內存訪問(每個串流多處理器最高達164KB):~20 cycle

  • 融合乘加(FFMA):4 cycle

  • 張量核矩陣乘法:1 cycle

此外,你應該知道GPU上的最小線程單元是一個包含32個線程的包——這被稱爲warp。通常,warp以同步模式運行——warp內的線程必須彼此等待。GPU上的所有內存操作都針對warp進行了優化。例如,從全局內存中加載的粒度爲32*4字節,恰好有32個浮點數,恰好每個線程一個浮點數。在串流多處理器(SM,相當於一個CPU內核)中,我們最多可以有32個warp=1024個線程。SM的資源被分配給所有活動的warp。所以,有時我們想要運行較少的warp,這樣每個warp就有更多的寄存器/共享內存/張量覈資源。

對於下面的兩個例子,我們假設計算資源相同。對於這個32×32矩陣乘法的小例子,我們使用8個SM(約爲RTX 3090的10%),每個SM 8個warp。

矩陣乘法(無張量核)

如果我們想做一個A*B=C的矩陣乘法,其中每個矩陣的大小是32×32,那麼我們會希望將反覆訪問的內存加載到共享內存中,因爲它的延遲大約是前者的1/10(200cycle vs 20 cycle)。通常,共享內存中的內存塊被稱爲memory tile或只是tile。使用2*32 warp,可以並行地將兩個32 *32浮點數矩陣加載到共享內存塊中。我們有8個SM,每個SM有8個warp,因此,得益於並行化,我們只需要執行一次從全局內存到共享內存的順序加載,這需要200個cycle。

爲了進行矩陣乘法,我們現在需要從共享內存A和共享內存B加載一個包含32個數值的向量,並執行一個融合乘加(FFMA)。然後將輸出存儲在寄存器C中。我們將工作劃分爲這樣一種方式,即每個SM做8x點積(32×32)來計算C的8個輸出。爲什麼這恰好是8(在舊算法中是4)有很強的技術性。這一點,我建議你閱讀Scott Gray關於矩陣乘法的博文來理解。這意味着,我們有8次共享內存訪問,每次20個cycle,8次FFMA操作,每次4個cycle。因此,總開銷是:

200 cycle(全局內存)+ 8*20 cycle(共享內存)+ 8*4 cycle(FFMA)= 392 cycle

下面讓我們看下使用張量核時需要多少開銷。

矩陣乘法(有張量核)

利用張量核,我們可以在一個cycle內執行4×4矩陣乘法。要做到這一點,我們首先需要把內存讀到張量核中。與上面類似,我們需要從全局內存(200 cycle)讀取數據並存儲在共享內存中。要做一個32×32矩陣乘法,我們需要執行8×8=64次張量核運算。一個SM有8個張量核,因此,我們總共有64個張量核——這正是我們需要的數量!我們可以通過1次內存傳輸(20 cycle)將數據從共享內存傳輸到張量核,然後進行64次並行張量核操作(1 cycle)。這意味着,在這種情況下,張量核矩陣乘法的總開銷爲:

200 cycle(全局內存)+ 20 cycle(共享內存)+ 1 cycle(Tensor Core)= 221 cycle

因此,我們通過張量核將矩陣乘法的開銷從392個cycle大幅降低到221個cycle。在這種情況下,張量核降低了共享內存訪問和FFMA操作的成本。

在這個例子中,有和沒有張量核都大致遵循相同的計算步驟,請注意,這是一個非常簡化的例子。在實際情況下,矩陣乘法涉及到更大的共享內存塊,計算模式也稍微不同。

不過我相信,通過這個例子,我就很清楚爲什麼內存帶寬對於配備張量核的GPU來說如此重要。在使用張量核進行矩陣乘法時,全局內存是cycle開銷中最重要的部分,如果可以降低全局內存延遲,我們甚至可以擁有速度更快的GPU。要做到這一點,我們可以通過增加內存的時鐘頻率(增加每秒cycle數,但也會增加發熱和電量消耗)或增加每次可以轉移的元素數量(總線寬度)。

內存帶寬

從上一節我們已經看到,張量核非常快。事實上,它們大部分時間都是空閒的,因爲需要等待數據從全局內存讀到共享內存。例如,在BERT大型訓練中,它使用非常大的矩陣——對於張量核來說,越大越好——我們的Tensor Core TFLOPS利用率大約爲30%,也就是說,70%的時間張量核都是空閒的。

這意味着,當比較兩個具有張量核的GPU時,GPU性能的最佳指標之一就是它們的內存帶寬。例如,A100 GPU的內存帶寬爲1555 GB/s,而V100的是900 GB/s。因此,基本可以估計A100的速度是V100的1555/900 = 1.73倍。

共享內存 / L1緩存大小 / 寄存器

由於內存傳輸到張量核是性能的限制因素,所以我們正在尋找其他可以提升內存到張量核傳輸速度的GPU屬性。這和共享內存、L1緩存以及使用的寄存器數量有關。理解存儲層次結構如何帶來更快的內存傳輸,有助於理解矩陣乘法在GPU上如何執行。

爲了執行矩陣乘法,我們利用了GPU的存儲層次結構,從慢的全局內存到快的本地共享內存,再到快如閃電的寄存器。然而,越快的存儲越小。因此,我們需要將矩陣分割成更小的矩陣,並在本地共享內存中通過這些更小的塊執行矩陣乘法,它們速度快,並且接近於串流多處理器(SM)——相當於CPU內核。對於張量核,我們更進一步:我們取每個塊並將其中的一部分裝入張量核中。共享內存中的矩陣memory tile比GPU全局內存快大約10-50倍,而張量核的寄存器比GPU全局內存快200倍。

擁有更大的tile意味着我們可以重用更多的內存。我在博文TPU vs GPU中詳細探討了這個問題。實際上,你可以將TPU看作是每個張量核都有非常非常大的tile。因此,TPU在每次從全局內存傳輸數據時都可以重用更多的內存,這使得它們在矩陣乘法計算方面比GPU更有效率。

每個塊的大小是由每個串流多處理器(SM,相當於GPU上的一個“CPU內核”)的內存大小決定的。在以下架構中,我們有以下共享內存大小:

  • Volta:96kb共享內存 / 32 kb L1

  • Turing:64kb共享內存 / 32 kb L1

  • Ampere:164kb共享內存 / 32 kb L1

我們看到,Ampere的共享內存更大,塊大小就更大,這減少了全局內存訪問延遲。因此,Ampere可以更好地利用GPU存儲的總體內存帶寬。這將提高大約2-5%的性能。對於大型矩陣,性能的提升尤其明顯。

Ampere張量核的另一個優點是它們在線程之間共享更多的數據。這減少了寄存器的使用。寄存器被限制爲每個串流多處理器(SM)64k或每個線程255。比較Volta和Ampere張量核,Ampere張量核使用1/3的寄存器,允許更多張量核在共享內存的每個塊上活動。換句話說,我們可以用相同數量的寄存器支撐3倍的張量核。然而,由於帶寬仍然是瓶頸,所以實際的TFLOPS與理論的TFLOPS相比,只會有微小的提高。新的張量核提高了大約1-3%的性能。

總的來說,我們可以看到,Ampere的架構經過優化,它使用改進後的存儲層次結構(從全局內存到共享內存塊,再到張量核寄存器),使可用內存帶寬更加有效。

評估Ampere的深度學習性能

要點:

  • 根據內存帶寬和Ampere GPU改進的存儲層次估計,理論上,其速度提升1.78倍到1.87倍。

  • NVIDIA提供了TeslaA100和V100 GPU的準確基準測試數據。這些出於營銷目的數據存在偏差,但是可以建立這些數據的去偏模型。

  • 去偏基準測試數據顯示,Tesla A100在NLP方面比V100快1.70倍,在計算機視覺方面比V100快1.45倍。

如果你想了解我如何評估Ampere GPU性能的更多技術細節,那麼本節就是爲你準備的。如果你不關心這些技術方面,則可以跳過此部分。

Ampere速度的理論估計

綜上所述,我們認爲,兩種配備張量核的GPU架構之間的差異主要在於內存帶寬。使用張量核的其他好處包括更多的共享內存/L1緩存和更好的寄存器。

如果我們將TeslaA100GPU帶寬與TeslaV100 GPU帶寬相比較,我們得到的速度提升爲1555/900 = 1.73倍。此外,我希望從更大的共享內存中得到2-5%的加速,從改進的張量核中得到1-3%的加速。這使得速度提升在1.78倍和1.87倍之間。用類似的推理方法,你就可以估計Ampere系列其他GPU與TeslaV100相比的速度提升。

Ampere速度的實際估計

假設我們有針對一種GPU架構的估計,如Ampere、Turing或Volta,我們就可以很容易地將這些結果推到相同架構/系列的其他GPU上。幸運的是,NVIDIA已經在廣泛的計算機視覺和自然語言理解任務中對A100和V100進行了基準測試。遺憾的是,NVIDIA使用了不同的批次大小和GPU數量,使得這些數值無法直接進行比較,從而得出有利於A100的結果。所以,在某種意義上,這些基準數據部分是真實的,部分是市場數據。一般來說,你可能會認爲,更大的批次大小才公平,因爲A100有更多的內存,但是爲了比較GPU架構,我們應該評估批次大小相同時的無偏內存性能。

爲了得到無偏估計,我們可以通過兩種方式對V100和A100結果進行縮放:

(1)考慮批次大小差異,(2)考慮使用1個GPU和8個GPU的差異。幸運的是,我們能在NVIDIA提供的數據中找到對這兩種偏差的估計。

批次大小增加一倍使吞吐量增加13.6%(CNN,以每秒圖像數爲單位)。我在RTX Titan上針對同樣的問題測試了Transformer,驚奇地發現了同樣的結果:13.5%——這似乎是一個可靠的估計。

當我們將網絡在更多的GPU上並行化時,由於一些網絡開銷,我們會損失性能。與V100 8x GPU系統(NVLink 2.0)相比,A100 8x GPU系統有更好的網絡(NVLink 3.0)——這是另一個令人困惑的因素。直接查看NVIDIA的數據,我們可以發現,對於CNN來說,8x A100系統比8x V100系統開銷低5%。這意味着,從1x A100到8xA100可以獲得7倍的速度提升,而從1x V100到8xA100可以獲得6.67倍。對於Transformer來說,這個數值是7%。

使用這些數據,我們可以從NVIDIA提供的直接數據中估算其對於一些特定深度學習架構的速度提升。與Tesla V100相比,Tesla A100可以提供以下速度提升:

  • SE-ResNeXt101:1.43倍

  • Masked-R-CNN:1.47倍

  • Transformer(12層, 機器翻譯, WMT14 en-de):1.70倍

因此,對於計算機視覺來說,這些數值比理論估計要低一些。這可能是由於張量維數較小,準備矩陣乘法(如img2col或快速傅里葉變換(FFT))所需的操作開銷,或者操作無法充分利用GPU(最後的層通常相對較小)。它也可以是特定架構的工件(分組卷積)。

Transformer實際估計值與理論估計值非常接近。這可能是因爲大型矩陣的算法非常簡單。我將使用這些實際的估計來計算GPU的成本效率。

估計中可能存在的偏差

上面是對A100和V100的對比估計。過去,NVIDIA“遊戲”GPU RTX出現了性能偷偷下降的問題:(1)降低張量核利用率,(2)風扇散熱,(3)禁用對等GPU傳輸。與Ampere A100相比,RT 30系列可能有未公佈的性能下降。有了消息,我會更新這篇博文。

Ampere / RTX 30系列的其他考慮因素

要點:

  • Ampere可以用於稀疏網絡訓練,它最高可以將訓練速度提高2倍。

  • 稀疏網絡訓練仍然很少使用,但將使Ampere可以經受住未來的考驗。

  • Ampere有新的低精度數據類型,這使得使用低精度數值更容易,但不一定比以前的GPU更快。

  • 新的風扇設計非常棒,如果你的GPU之間有間隙的話,但不清楚如果多個GPU之間沒有間隙,它們是否能有效冷卻。

  • RTX3090的3插槽設計使得4x GPU構建成爲問題。可能的解決方案是2插槽轉換或使用PCIe擴展器。

  • 4x RTX 3090需要的電量比目前市場上任何標準電源單元所能提供的電量都多。

與NVIDIA Turing RTX 20系列相比,新的NVIDIA Ampere RTX30系列具有額外的優點,如稀疏網絡訓練和推理。其他特性,比如新的數據類型,更多的是易用性特性,因爲它們提供了和Turing一樣的性能提升,但是不需要任何額外的編程。

稀疏網絡訓練

Ampere可以以稠密矩陣的速度進行細粒度結構自動稀疏矩陣乘法。它的工作原理是,如果有一個矩陣,你把它分割成4個元素,現在,稀疏矩陣張量核特性允許這4個元素中的2個爲零。這就帶來了2倍的速度提升,因爲矩陣乘法的帶寬需求減半了。

我以前研究過稀疏網絡訓練。對於我的工作,有一種批評是“你減少了網絡所需的FLOPS,但卻沒能帶來速度的提升,因爲GPU不能做快速稀疏矩陣乘法。”那好吧,加上張量核的稀疏矩陣乘法特性,我的算法,或者其他的稀疏訓練算法,現在在實際的訓練中提供了2倍的速度提升。

雖然這個特性還在實驗階段,訓練稀疏網絡還不是很普遍,但GPU擁有這個特性意味着你已經爲未來的稀疏訓練做好了準備。

低精度計算

在我之前的工作中,我已經展示過,新數據類型可以提高低精度反向傳播的穩定性。目前,如果你想要實現16位浮點數(FP16)的穩定反向傳播,主要問題是普通FP16數據類型只支持[-65504,65504]區間內的數值。如果梯度超出這個範圍,就會變成NaN值。爲了防止在FP16訓練期間發生這種情況,我們通常會進行損失縮放,即在反向傳播之前將損失乘以一個小數值,以防止這種梯度爆炸。

Brain Float 16格式(BF16)使用更多的位作爲指數,這樣,其可能的數值範圍與FP32相同:[-3*10^38,3*10^38]。BF16的精度較低,但梯度精度對學習來說並不是那麼重要。所以BF16所做的就是你不再需要做任何損失縮放或者擔心梯度迅速膨脹。因此,我們可以看到使用BF16格式時訓練穩定性的提高,只是精度稍有降低。

這意味着:使用BF16精度,訓練可能比FP16精度更穩定,而提供了同等的速度提升。使用TF32精度,可以得到接近FP32的穩定性,接近FP16的速度提升。好的方面是,要使用這些數據類型,只需將FP32替換爲TF32,將FP16替換爲BF16——不需要修改代碼!

不過,總的來說,這些新數據類型可以被視爲懶惰數據類型,因爲通過一些額外的編程工作(適當的損失縮放、初始化、歸一化、使用Apex),使用舊數據類型就可以獲得所有這些好處。因此,這些數據類型並不提供速度提升,而是提高了低精度訓練的易用性。

新的風扇設計/散熱問題

RTX 30系列新的風扇設計包括一個鼓風扇和一個推輓式風扇。設計很巧妙,如果你的GPU之間有間隙,也會非常有效。然而,如果你把GPU堆在一起,就不清楚它們表現如何了。鼓風扇將能夠通過遠離其他圖形處理器的支架排氣,但也沒法說那多有效,因爲鼓風扇的設計和以前不同。在一個4 PCIe插槽設置中,如果你想購買1到2個GPU,那應該沒問題。然而,如果你打算同時使用3到4個RTX 30 GPU,那麼我需要等散熱性能報告出來,瞭解下是否需要不同的GPU冷卻器、PCIe擴展器或其他解決方案。到時候我會更新這篇博文。

爲了克服散熱問題,水冷在任何情況下都可以提供一個解決方案。許多廠商爲RTX 3080/RTX 3090卡提供水冷模塊,即使在4x GPU設置中也能保持低溫。如果你想運行一個4x GPU設置,可以留心下一體化水冷卻解決方案,因爲在大多數桌面情況下散熱器都很難分散開。

冷卻問題的另一個解決方案是購買PCIe擴展器,並將GPU在機箱內分散開。這非常有效,華盛頓大學的其他博士生和我使用這個設置都非常成功。那看起來不漂亮,但它可以使你的GPU保持涼爽!即使你沒有足夠的空間來將GPU分散開,它還是可以幫到你。例如,如果你可以在一個臺式電腦的機箱中找到空間,那麼你或許就可以購買標準的3槽寬RTX 3090,並在機箱中使用PCIe擴展器來把它們分散開。這樣,你就可以通過一個簡單的解決方案解決了4x RTX 3090設置中的空間問題和冷卻問題。

image

3插槽設計和電量問題

RTX 3090是一個3插槽GPU,所以你不能在4x設置中使用NVIDIA的默認風扇設計。這是合理的,因爲它運行在350W TDP下,在多GPU 2插槽設置中很難降溫。RTX 3080運行在320W TDP下只稍好一點,而冷卻一個4x RTX 3080設置也會非常困難。

在4x RTX 3090設置下爲一個4x350w = 1400W系統供電也很困難。1600W的供電單元(PSU)很容易獲得,但只有200W是給CPU供電,主板用電可能太緊。只有在元件獲得充分利用的情況下,纔會達到最大電量,而在深度學習中,CPU通常只處於弱負載狀態。這樣,一個1600W的PSU就可以很好地爲一個4x RTX 3080構建供電,但是對於一個4x RTX 3090構建,最好是找一個高瓦數的PSU(+1700W)。目前,在臺式電腦市場上似乎沒有一個PSU超過1600W。服務器或加密貨幣挖礦PSU可能可以解決這個問題,但可能外形奇怪。

GPU深度學習性能

下面的基準測試不僅包括Tesla A100和Tesla V100的基準測試,我還構建了一個適合這些數據的模型,以及基於Titan V、Titan RTX、RTX 2080 Ti和RTX 2080的四個不同的基準測試。[1234]

除此之外,我還通過在基準數據的這些數據點之間進行插值擴展了RTX 2070、RTX 2060卡或是Quadro RTX 6000&8000卡。通常,在同一個架構中,GPU的擴展與串流多處理器和帶寬成線性關係,而我的架構模型就是以此爲基礎。

我只收集了混合精度FP16訓練的基準數據,因爲我相信,沒有充分的理由使用FP32訓練。

image

與RTX 2080 Ti相比,RTX 3090將卷積網絡的速度提高了1.57倍,將Transformer的速度提高了1.5倍,與此同時,定價也漲了15%。因此,與Turing RTX 20系列相比,Ampere RTX 30提供了一個非常實質性的改進。

GPU深度學習的每美元性能

什麼GPU能給你帶來最好的回報?這取決於整個系統的成本。如果你有一個成本高昂的系統,那麼投資更昂貴的GPU是有意義的。

這裏有三個PCIe 3.0構建,我用它作爲2/4 GPU系統的基礎成本,然後再加上GPU成本。GPU成本是GPU在亞馬遜和eBay上成本的均值。對於新的Ampere GPU,我使用了定價。結合上文給出的性能值,就可以得出這些GPU系統的每美元性能值。對於8 GPU系統,我使用Supermicro barebone作爲基準成本——這是RTX服務器的行業標準。請注意,這些柱狀圖沒有考慮內存需求。你應該首先考慮自己的內存需求,然後在圖表中尋找最佳選項。關於內存,這裏有一份大致的指南:

  • 使用預訓練的Transformer;從頭開始訓練小型Transformer:>= 11GB

  • 在研發/生產環境中訓練大型Transformer或卷積網絡:>= 24 GB

  • 開發神經網絡原型(Transformer或卷積網絡):>= 10 GB

  • Kaggle競賽:>= 8 GB

  • 計算機視覺應用:>= 10GB

image

image

image

GPU推薦

我需要再次強調的第一件事是:在選擇GPU的時候,你需要確保它有足夠的內存來完成你想做的事情。選擇GPU應該按下面的步驟來:

  1. 我想用GPU做什麼:Kaggle競賽、學習深度學習、破解小項目(GAN還是大型語言模型?)、計算機視覺/自然語言處理/其他領域研究,或者其他什麼?

  2. 我要做的事需要多大內存?

  3. 使用上面的成本/性能圖找出滿足內存標準的、最適合你的GPU。

  4. 對於我選擇的GPU有其他的注意事項嗎?例如,如果是RTX 3090,我能把它裝進我的電腦嗎?對於我選的GPU,我的電源單元(PSU)功率是否足夠?散熱會是問題嗎?或者我能以某種方式有效地冷卻GPU嗎?

其中一些細節需要你自我反省你想要什麼,也許可以研究一下,對於你的興趣領域,其他人使用多大內存的GPU。我可以提供一些指導,但無法面面俱到。

我什麼時候需要 >= 11 GB 的內存?

我之前提到過,如果你使用Transformer,那麼你至少應該有11GB的內存,如果你研究Transformer,則內存>= 24GB更好。這是因爲之前大多數經過預訓練的模型都有相當高的內存要求,而且這些模型至少是使用擁有11 GB內存的RTX 2080 Ti GPU進行訓練。因此,小於11GB可能會遇到難以或不可能運行某些模型的情況。

其他需要大量內存的領域包括醫學成像、一些最先進的計算機視覺模型以及任何有超大圖像的東西(GAN,樣式轉換)。

一般來說,如果你想建立一個模型並據此獲得競爭優勢,無論是研究、行業還是Kaggle競賽,額外的內存可能會爲你帶來優勢。

什麼時候內存可以 <11 GB ?

RTX 3070和RTX3080是非常強大的卡,但它們內存有點小。不過,對於許多任務,你不需要那麼大的內存。

如果你想學習深度學習,那麼RTX 3070就很完美。這是因爲訓練大多數架構的基本技能都可以通過將它們縮小一點或者使用小一點的輸入圖像來學習。如果我再次學習深度學習,我可能會使用一個RTX 3070,如果有多餘的錢,甚至會用多個。

RTX 3080是目前爲止最具成本效益的卡,因此是原型設計的理想選擇。對於原型設計,你想要內存最大的,這仍然很便宜。這裏所說的原型設計可以是在任何領域的原型設計:研究、Kaggle競賽、爲創業公司出主意/設計模型、試驗研究代碼。對於所有這些應用程序,RTX 3080都是最好的GPU。

假設我將領導一個研究實驗室/創業公司。我將把66-80%的預算投入到RTX 3080機器上,20-33%用於配備了強大水冷裝置的RTX 3090機器。我的想法是,RTX 3080的成本效益更高,可以作爲原型機,通過slurm集羣設置來共享。因爲原型設計應該以敏捷的方式完成,所以應該使用較小的模型和數據集。RTX 3080非常適合這個場景。一旦學生/同事獲得了一個很好的原型模型,他們就可以將原型轉移到RTX 3090機器上,並將其擴展爲更大的模型。

一般建議

總的來說,RTX 30系列非常強大,我強烈推薦這些GPU。如前一節所述,要注意內存,還要注意電源和冷卻需求。如果你的GPU之間有一個PCIe插槽,則冷卻將沒有任何問題。否則,如果使用RTX 30卡,請準備好水冷裝置、PCIe擴展器或有效的鼓風扇卡(未來幾周的數據將會說明,NVIDIA的風扇設計是足夠的)。

一般來說,我會推薦RTX 3090給任何買得起它的人。不僅是現在,未來3-7年它都將是一個非常有效的卡。因此,這是一項將保持強勁增長的好投資。HBM內存三年內不太可能變便宜,所以下一個GPU只會比RTX 3090好25%左右。我們可能會在5-7年內看到廉價的HBM內存,在那之後,你肯定想要升級。

如果你有多個RTX 3090,請確保你選擇的解決方案可以提供有效的冷卻和足夠的電力。對於什麼樣的設置合適,我將隨着可用數據的增加更新關於這個問題的博文。

對於沒有強烈競爭需求的企業(研究公司、Kaggle競賽、競爭性初創公司),我推薦RTX 3080。這是一個更經濟的解決方案,並將確保大多數網絡的訓練都足夠快。如果你使用了合適的內存技巧,並且不介意額外進行編程,那麼現在有足夠的技巧將一個24GB的神經網絡適配到10GB的GPU上。因此,如果你接受一些不確定性和額外的編程,那麼RTX 3080也可能是比RTX 3090更好的選擇。

一般來說,對於學習深度學習和原型設計,RTX 3070也是一種可靠的卡,它比RTX 3080便宜200美元。如果你負擔不起RTX3080,那麼RTX3070是最好的選擇。

如果你的預算有限,而RTX 3070又太貴,那麼一個二手RTX 2070在易趣上大約要260美元。現在還不清楚是否會推出RTX 3060,但如果你的預算有限,可能也值得再等一段時間。如果定價與RTX 2060和GTX 1060類似,那麼預計其價格將在250美元到300美元之間,而且性能相當強勁。

GPU集羣建議

GPU集羣設計高度依賴於用途。對於一個+1024 GPU系統,網絡最重要,但在這樣的系統上,如果用戶一次最多隻使用32個GPU,投資強大的網絡基礎設施就是浪費。在這裏,我將使用類似原型推廣的推理,如在RTX 3080和RTX 3090案例對比中所做的那樣。

一般來說,因爲CUDA許可協議,RTX卡被禁止進入數據中心。然而,大學通常可以得到這個規則的豁免。與英偉達的人取得聯繫請求豁免權是值得的。如果你被允許使用RTX卡,那麼我建議使用配備了RTX 3080或RTX 3090 GPU的標準Supermicro 8 GPU系統(如果可以保證有效冷卻)。一組8x A100節點就可以確保在原型化之後有效地“推廣”,特別是在不能保證8x RTX 3090服務器能夠得到充分冷卻的情況下。在這種情況下,我建議使用A100而不是RTX 6000 / RTX 8000,因爲A100非常划算,而且是面向未來的。

如果你想在一個GPU集羣(+256個GPU)上訓練非常大的網絡,我推薦配備了A100 GPU的NVIDIA DGX SuperPOD系統。在+256 GPU的規模下,網絡變得至關重要。如果你想擴展到超過256個GPU,那麼你將需要一個高度優化的系統,把標準解決方案攢在一起就不在有效了。

特別是在+1024 GPU的規模上,市場上唯一具有競爭力的解決方案是谷歌TPU Pod和NVIDIA DGX SuperPod。在這個規模上,我更喜歡谷歌TPU Pod,因爲他們定製的網絡基礎設施似乎優於NVIDIA DGX SuperPod系統——儘管這兩種系統非常接近。比起TPU系統,GPU系統爲深度學習模型和應用提供了更多的靈活性,而TPU系統支持更大的模型,並提供更好的伸縮性。所以兩種系統都有各自的優點和缺點。

不要買這些GPU

我不建議購買多個RTX Founders Editions或RTX Titans,除非你有PCIe擴展器可以解決它們的冷卻問題。它們運行時很容易過熱,其性能將遠遠低於上文圖表中的數值。4x RTX 2080 Ti Founders Editions GPU將很快超過90C,此時,其內核的時鐘頻率會降低,運行速度將比適當冷卻的RTX 2070 GPU更慢。

我不建議購買Tesla V100或A100,除非你是被迫購買的(禁止RTX數據中心策略的公司),或者你想在一個巨大的GPU集羣上訓練非常大的網絡——這些GPU不是很划算。

如果你能買得起更好的卡,就不要購買GTX 16系列。這些卡沒有張量核,因此,深度學習性能相對較差。相比GTX 16系列,我寧可選擇二手的RTX 2070 / RTX 2060 / RTX 2060 Super。如果你差錢,那GTX 16系列也算是個不錯的選擇。

什麼情況下最好不要購買新的GPU?

如果你已經擁有RTX 2080 Tis或更好的GPU,升級到RTX 3090可能就沒有意義。你的GPU已經很好了,使用新推出的高能耗RTX 30卡,你需要爲PSU和冷卻問題擔憂,而性能的提升卻微不足道——不值得。

我想要從4x RTX 2080 Ti升級到4x RTX 3090的唯一原因是,我在研究非常大的Transformer或其他高度依賴計算的網絡訓練。但是,如果內存是問題,在升級到RTX 3090之前,你可以首先考慮一些內存技巧,以便在4x RTX 2080 Tis上適配大模型。

如果你有一個或多個RTX 2070 GPU,升級前要三思。這些都是很好的GPU。如果你發現自己經常受限於8GB的內存,那麼可以在eBay上轉手出售這些GPU並獲得RTX 3090。這一推論也適用於許多其他GPU:如果內存緊張,那麼升級就是對的。

問 & 答 & 誤解

要點:

  • PCIe 4.0和PCIe通道在2x GPU設置中並不重要。對於4x GPU設置,它們也不是特別重要。

  • RTX 3090和RTX 3080的冷卻會是個問題。使用水冷卡或PCIe擴展器。

  • NVLink沒用,只對GPU集羣有用。

  • 你可以在一臺計算機中使用不同的GPU類型(如GTX 1080 + RTX 2080 + RTX 3090),但你無法有效地將它們並行。

  • 在兩臺以上的機器上並行訓練,你需要Infiniband +50Gbit/s的網絡。

  • AMD CPU比Intel CPU便宜,而Intel CPU幾乎沒有任何優勢。

  • 儘管做出了非常大的努力,但由於缺少社區和張量核,至少在1-2年內AMD GPU+ ROCm可能都無法與NVIDIA競爭。

  • 如果你使用GPU的時間不到一年,那麼雲GPU是有幫助的。除此之外,臺式機是更便宜的解決方案。

我需要PCIe 4.0嗎?

一般來說,不需要。如果你有一個GPU集羣,PCIe 4.0很有用。如果你有一臺8x GPU機器,也還可以,但除此之外,它就沒有多大好處了。它可以幫助實現更好的並行化和更快的數據傳輸。數據傳輸在任何應用程序中都不是瓶頸。在計算機視覺中,在數據傳輸管道中,數據存儲可能是瓶頸,而PCIe從CPU到GPU的傳輸則不是瓶頸。所以,對於大多數人來說,沒有真正的理由去安裝PCIe 4.0。在4 GPU設置中,這樣做的好處是,並行度可能會提高1-7%。

我需要8x/16x PCIe通道嗎?

和PCIe 4.0一樣,一般來說,不需要。並行化和快速數據傳輸需要PCIe通道,但這幾乎不會成爲瓶頸。在4x 通道上運行GPU就很好,特別是當你只有2個GPU的時候。對於4 GPU設置,我更希望每個GPU有8個通道,但如果你是在4個GPU上並行運行的話,那麼4個通道可能只會降低5-10%的性能。

如果每個RTX 3090需要3個PCIe插槽,我該如何安裝4x RTX 3090?

你需要一個雙插槽變體,或者你可以嘗試使用PCIe擴展器佈置它們。除了空間之外,你還需要考慮冷卻問題和一個合適的PSU。最易於管理的解決方案似乎是,4xRTX 3090 EVGA Hydro Copper加一個定製的水冷循環。這可以使卡處於低溫狀態。EVGA生產Hydro Copper版本的GPU已有多年,我認爲你可以信任其水冷式GPU的質量。不過,可能還有其他更便宜的變體。

PCIe擴展器也可以解決空間和冷卻問題,但是你需要確保你的機箱中有足夠的空間來佈置GPU。一定要確保你的PCIe擴展器足夠長!

我該如何冷卻4x RTX 3090或4x RTX 3080?

請看上節。

我可以使用多個不同類型的GPU嗎?

是的,你可以!但是不同類型的GPU無法有效地並行。我認爲,一個3x RTX 3070加一個RTX 3090就夠原型推廣了。另一方面,在4x RTX 3070 GPU上並行會非常快,如果你能將模型放到這些GPU上的話。除此之外,我能想到的你希望這樣做的唯一原因是,你希望繼續使用舊GPU。這沒問題,但是在那些GPU上並行會比較低效,因爲最快的GPU會等待最慢的GPU到達一個同步點(通常是梯度更新)。

NVLink是什麼,有用嗎?

一般來說,NVLink是沒有用的。NVLink是GPU之間的高速互連。如果你有一個有+128 GPU的GPU集羣,它就有用了。否則,與標準PCIe傳輸相比,它幾乎不會產生任何好處。

我錢不夠,即使是你推薦的最便宜的GPU。我能做什麼?

當然是買二手GPU。二手RTX 2070(400美元)和RTX 2060(300美元)都很棒。如果你負擔不起,次佳選項是試着買一個二手的GTX 1070(220美元)或GTX 1070 Ti(230美元)。如果那還太貴,則可以使用GTX 980 Ti (6GB 150美元)或使用GTX 1650 Super(190美元)。如果這都太貴的話,最好是使用免費的GPU雲服務。通常,這些服務會有時間限制,之後你就需要付費了。你可以輪流使用不同的服務和賬戶,直到你有錢購買自己的GPU。

GPU的碳排放量是多少?我如何使用GPU而又不污染環境?

我構建了一個碳計算器,供學者們計算自己的碳排放量(從航班到會議 + GPU時間的碳排放)。該計算器也可以用來計算純粹的GPU碳排放量。你會發現,GPU產生的碳比國際航班多得多。因此,你應該確保你有一個綠色能源,如果你不想有一個天文數字的碳排放量。如果我們這個地區沒有電力供應商提供綠色能源,最好的辦法就是購買碳抵消。許多人對碳抵消持懷疑態度。他們工作嗎?他們是在詐騙嗎?

我相信,在這種情況下,懷疑主義是有害的,因爲什麼都不做比冒着被騙的風險更有害。如果你擔心被騙,只需投資一個抵消投資組合來最小化風險。

大約十年前,我參與了一個產生碳抵消的項目。聯合國官員跟蹤了整個過程,他們獲得了乾淨的數字數據,並對項目現場進行了實地檢查。在這種情況下產生的碳抵消是非常可靠的。我相信,其他許多項目也有類似的質量標準。

碳計算器:https://github.com/TimDettmers/carbonneutral

在兩臺機器之間並行需要什麼?

如果你想要跨機器並行,那麼你將需要+50Gbits/s的網卡來提高速度。關於這個問題,我有一篇有點過時的博文。現在,我建議至少有一個EDR Infiniband設置,這意味着網卡至少有50 GBit/s的帶寬。兩張帶線纜的EDR卡在eBay上大約賣500美元。

稀疏矩陣乘法特性適用於一般的稀疏矩陣嗎?

似乎並非如此。稀疏矩陣的粒度需要滿足每4個元素有2個零值元素,也就是說,稀疏矩陣需要是高度結構化的。可以稍微調整下算法,這涉及到將4個值組合成2個值的壓縮表示,但這也意味着Ampere GPU不可能實現任意稀疏矩陣的精確乘法。

我需要Intel CPU來支持多GPU設置嗎?

我不推薦Intel CPU,除非你在Kaggle競賽中大量使用了CPU(CPU上的大量線性代數運算)。即使是在Kaggle競賽中,AMD CPU仍然很好。在深度學習方面,AMD GPU比Intel GPU更便宜也更好。對於4x GPU構建,我的首選CPU是Threadripper。我們在大學裏用Threadripper構建了幾十個系統,它們都工作得很好——還沒有人抱怨。對於8x GPU系統,我通常會選擇供應商熟悉的CPU。在8x系統中,CPU和PCIe/系統可靠性比單純的性能或成本效益更重要。

我應該等待RTX 3090 Ti嗎?

目前還不清楚是否會有RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。GTX XX90的名稱通常是留給雙GPU卡,所以NVIDIA是偏離了這一趨勢。從價格和性能來看,似乎RTX 3090是一個取代RTX 3080 Ti的名字。但是所有這些都是推測。如果你對這個問題感興趣,我建議你對Rumor Mill上的新聞跟蹤一兩個月,如果你什麼都沒有看到,就不太可能出現RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。

機箱設計對散熱有影響嗎?

沒有。只要GPU之間有一個小間隙,GPU的冷卻通常就沒問題。機箱設計可以提供1到3攝氏度的好處,而GPU之間的間隙將提供10到30攝氏度的改進。歸根結底,如果GPU之間有間隙,冷卻就沒問題。如果GPU之間沒有間隙,就需要合適的冷卻器設計(鼓風扇)或其他解決方案(水冷、PCIe擴展器),但無論哪種情況,機箱設計和機箱風扇都不很重要。

AMD GPUs + ROCm能趕上NVIDIA GPUs + CUDA嗎?

1-2年內趕不上。這涉及三個方面的問題:張量核、軟件和社區。

就純硅而言,AMD GPU很棒:優秀的FP16性能,優秀的內存帶寬。然而,由於缺乏張量核或等效特性,其深度學習性能與NVIDIA GPU相比較差。封裝的低精度數學函數不能解決這個問題。沒有這個硬件特性,AMD GPU將永遠不會有競爭力。有傳言稱,AMD計劃在2020年推出某種具有張量核等效特性的數據中心卡,但此後就沒有新的數據出現了。擁有張量核等效特性的數據中心卡意味着很少有人能夠負擔得起這樣的AMD GPU,這將給NVIDIA帶來競爭優勢。

假設AMD在未來引入了類似於張量核的硬件特性。然後很多人會說,“但是沒有軟件針對AMD GPU!”我該怎麼使用它們呢?這更多的是一種誤解。AMD軟件ROCm已經發展很長一段時間了,並且PyTorch提供了優秀的支持。雖然我沒有看到很多針對AMD GPU+ PyTorch的經驗報告,但所有的軟件功能已整合。看起來,不管你選擇什麼網絡,都可以很好地在AMD GPU上運行。所以,在這方面,AMD已經走過了一段很長的路,這個問題或多或少得到了解決。

然而,如果軟件問題和缺少張量核的問題已得到了解決,AMD還有一個問題:缺少社區。如果你使用NVIDIA GPU遇到問題,你可以在谷歌查詢這個問題並找到解決方案。這讓人們對NVIDIA GPU產生了很大的信任。你有基礎設施,使使用NVIDIA GPU變得很容易(任何深度學習框架都可以使用,任何科學問題都得到很好的支持)。你可以輕鬆地使用NVIDIA GPU(比如apex)。你很容易就可以找到NVIDIA GPU和編程專家,而我認識的AMD GPU專家就少得多。

在社區方面,AMD和NVIDIA的對比有點像Julia和Python。Julia有很大的潛力,很多人會說,它是科學計算的高級編程語言。然而,與Python相比,Julia很少被使用。這是因爲Python社區非常強大。Numpy、SciPy、Pandas都是功能強大的軟件包,有很多人在使用它們。這與NVIDIA vs AMD的問題非常相似。

因此,在引入張量核等效特性(1/2到1年?)並圍繞ROCm建立一個強大的社區(2年?)之前,AMD很可能都無法趕上NVIDIA。AMD總是會在特定的子領域(如加密貨幣挖掘、數據中心)搶奪一部分市場份額。不過,在深度學習領域,至少幾年的時間內,NVIDIA可能會保持其壟斷地位。

什麼時候使用雲GPU?什麼時候使用專用的GPU臺式機/服務器?

經驗法則:如果你希望做深度學習超過一年,那就買一臺GPU臺式機。否則,最好使用雲實例。

最好自己算一下。例如,如果對比下配備了1x V100的AWS V100 spot實例和一個只有一塊RTX 3090的臺式機(性能類似),那麼對於臺式機,我們要花2200美元(2-GPU Barebone+ RTX 3090)。此外,假設你在美國,你需要額外支付每千瓦/時0.12美元的電費,而AWS實例是每小時2.14美元。

以每年15%的利用率來說,臺式機每年消耗的電量爲:

(350 Watt (GPU) + 100 Watt (CPU))*0.15 (utilization) * 24 hours * 365 days = 591 kW/h

即每年591kW/h,需額外支付71美元。

在利用率爲15%(一天中15%的時間使用雲實例)的情況下,臺式機和雲實例的盈虧平衡點大約是300天(2311美元 vs 2270美元):

$2.14/h * 0.15 (utilization) * 24 hours * 300 days = $2,311

因此,如果你希望在300天后繼續運行深度學習模型,最好是購買一臺臺式機,而不是使用AWS spot實例。

對任何雲服務,你都可以進行類似的計算,以決定是使用雲服務還是臺式機。

下面是常見的利用率:

  • 博士生個人臺式機:< 15%

  • 博士生slurm GPU集羣:> 35%

  • 企業slurm研究集羣:> 60%

一般來說,對於那些思考前沿想法比開發實用產品更重要的職業來說,利用率較低。有些領域的利用率很低(可解釋性研究),而其他領域的利用率則高得多(機器翻譯、語言建模)。一般來說,個人機器的利用率幾乎總是被高估了。大多數個人系統的利用率通常在5-10%之間。這就是爲什麼我強烈推薦slurm GPU集羣給研究小組和公司,而不是個人的桌面GPU機器。

查看英文原文:

https://timdettmers.com/2020/09/07/which-gpu-for-deep-learning/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章