深度學(xué)習(xí)是一個計算要求非常高的領(lǐng)域,你對 GPU 的選擇將從根本上決定你的深度學(xué)習(xí)體驗。但是,如果你想購買一塊新 GPU,主要看哪些特性呢?GPU 內(nèi)存、內(nèi)核、張量核?如何做出有成本效益的選擇?這篇文章將深入研究這些問題,消除常見的誤解,讓你對如何考慮 GPU 有一個直觀的理解,并提供建議,幫助你做出正確的選擇。
前排提醒:本文字?jǐn)?shù)約為 15000,閱讀時間較長,可收藏后慢慢閱讀。
嫌長不看,先放結(jié)論
總體最好的 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)、RTX2060(400)、RTX2060(300)、GTX 1070(220)、GTX1070Ti(220)、GTX1070Ti(230)、GTX 1650 Super(190)、GTX980Ti(6GB190)、GTX980Ti(6GB150)。
我?guī)缀鯖]錢:有許多創(chuàng)業(yè)公司在推廣他們的云:使用免費的云積分,并在不同公司的賬戶之間來回切換,直到能買得起一塊 GPU。
我做 Kaggle:RTX 3070。
我是一名有競爭力的計算機(jī)視覺、預(yù)訓(xùn)練或機(jī)器翻譯研究人員:4x RTX 3090。務(wù)必要等到有了良好的冷卻和足夠的電力后(我將更新這篇博文)
我是一名 NLP 研究人員:如果你不從事機(jī)器翻譯、語言建模或任何類型的預(yù)訓(xùn)練工作,那么 RTX 3080 就足夠了而且頗具成本效益。
我剛開始接觸深入學(xué)習(xí),而且我很認(rèn)真:從一塊 RTX 3070 開始。如果你在 6 到 9 個月后仍然很認(rèn)真,賣掉你的 RTX 3070,并購買 4x RTX 3080。根據(jù)你下一步選擇的領(lǐng)域(初創(chuàng)公司、Kaggle、研究、深度學(xué)習(xí)應(yīng)用),賣掉你的 GPU,三年后再買更合適的(下一代 RTX 40s GPU)。
我想嘗試深度學(xué)習(xí),但沒當(dāng)真:RTX 2060 Super 就很好,但可能需要使用新電源。如果你的主板有一個 PCIe x16 插槽,并且有一個大約 300W 的電源,那么 GTX 1050 Ti 是一個很好的選擇,因為它不需要任何其他計算機(jī)組件就可以在你的臺式計算機(jī)上工作了。
用于模型并行化的、少于 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 節(jié)點或 8x RTX 6000 節(jié)點。
用于模型并行化的、128 個 GPU 的 GPU 集群:考慮下 8x Tesla A100 設(shè)置。如果你使用超過 512 個 GPU,那么你應(yīng)該考慮配置一個 DGX A100 SuperPOD 系統(tǒng),以匹配你的規(guī)模。
正文開始
這篇博文旨在讓你對 GPU 和 NVIDIA 的 Ampere 系列 GPU 有不同層次的了解。
(1)如果你對 GPU 如何工作、什么讓 GPU 速度更快、NVIDIA RTX 30 Ampere 系列 GPU 有什么獨特之處等問題的細(xì)節(jié)不感興趣,那么你可以跳到性能及每美元性能圖表和建議部分。這些是這篇文章的核心和最有價值的內(nèi)容。
(2)如果你關(guān)心具體的問題,我在這篇博文最后一部分回答了最常見的問題,以消除一些誤解。
(3)如果你想深入了解 GPU 和張量核是如何工作的,最好是從頭到尾閱讀這篇文章。根據(jù)你對相關(guān)主題的了解,你可以跳過一兩個小節(jié)。
我會在每個主要部分的開頭加上一小段總結(jié),希望可以幫助你決定是否要閱讀這個部分。
概 述
這篇文章的結(jié)構(gòu)如下。
首先,我將解釋是什么使 GPU 速度更快。我將討論 CPU 與 GPU、張量核、內(nèi)存帶寬、GPU 存儲層次以及它們與深度學(xué)習(xí)性能的關(guān)系。對于 GPU 可以提供什么,這些解釋可能會幫助你得到一個更直觀的認(rèn)識。
然后,我將對 GPU 的性能進(jìn)行理論估計,并將其與 NVIDIA 的一些市場基準(zhǔn)進(jìn)行比較,以獲得可靠的、無偏差的性能數(shù)據(jù)。我將討論新的 NVIDIA RTX 30 Ampere 系列 GPU 的獨特特性,如果你購買 GPU,這些特性是值得考慮的。
在此基礎(chǔ)上,我提出了 1-2、4、8 GPU 設(shè)置和 GPU 集群的 GPU 建議。之后是問答部分,我回答了 Twitter 上常見的問題;在這一節(jié)中,我還將討論一些常見的誤解和其他一些五花八門的問題,比如云與桌面對比、冷卻方式、AMD 與 NVIDIA 對比等。
GPU 如何工作?
如果你經(jīng)常使用 GPU,那么了解它們?nèi)绾喂ぷ魇呛苡杏玫摹_@些知識有助于你理解為什么 GPU 在某些情況下速度慢而在其他情況下速度快。然后,你可以更好地理解為什么你首先需要一個 GPU,以及其他未來的硬件選項可能會如何競爭。如果你只是想要有用的性能數(shù)值和參數(shù),以幫助你決定購買哪個 GPU,那么你可以跳過這一節(jié)。對于 GPU 如何工作的問題,最好的高階解釋是我在 Quora 上的回答:
“為什么 GPU 適合深度學(xué)習(xí)”: https://timdettmers.com/Why-are-GPUs-well-suited-to-deep-learning?top_ans=21379913
這是一個高階解釋,很好地說明了為什么 GPU 比 CPU 更適合深度學(xué)習(xí)。如果我們關(guān)注細(xì)節(jié),就能理解是什么讓一個 GPU 比另一個更好。
與處理速度相關(guān)的最重要的 GPU 參數(shù)
本節(jié)可以幫助你更直觀地理解如何考慮深度學(xué)習(xí)的性能。這種理解可以幫助你評估未來的 GPU。
張量核
要點:
- 張量核將乘法和加法運算所需的 cycle 減少為 1/16——在我舉的例子中,對于一個 32×32 的矩陣,從 128 個 cycle 減少到 8 個 cycle。
- 張量核減少了反復(fù)共享內(nèi)存訪問的次數(shù),從而節(jié)省了額外的內(nèi)存訪問 cycle。
- 張量核速度如此之快,計算不再是瓶頸。唯一的瓶頸是如何將數(shù)據(jù)傳輸?shù)綇埩亢酥小?/li>
現(xiàn)在 GPU 已經(jīng)足夠便宜,幾乎每個人都能負(fù)擔(dān)得起一個有張量核的 GPU。這就是為什么我只推薦具有張量核的 GPU。了解它們是如何工作的,有助于理解這些專門用于矩陣乘法的計算單元的重要性。這里我將向你展示一個簡單的例子:A*B=C 矩陣乘法,其中,所有矩陣的大小都是 32×32,我們將分別看下,計算模式在有和沒有張量核時是什么樣的。
要完全理解這一點,就必須理解 cycle 的概念。如果一個處理器以 1GHz 的速度運行,它每秒可以完成 10^9 個 cycle。每個 cycle 都代表一次計算機(jī)會。然而,大多數(shù)時候,操作所花費的時間會超過一個 cycle。因此,它創(chuàng)建了一個管道,用于啟動一個操作,它需要等待前一個操作完成所需的 cycle 數(shù)。這也稱為操作延遲。
下面是一些重要操作的延遲:
- 全局內(nèi)存訪問(最高 48GB):~200 cycle
- 共享內(nèi)存訪問(每個串流多處理器最高達(dá) 164KB):~20 cycle
- 融合乘加(FFMA):4 cycle
- 張量核矩陣乘法:1 cycle
此外,你應(yīng)該知道 GPU 上的最小線程單元是一個包含 32 個線程的包——這被稱為 warp。通常,warp 以同步模式運行——warp 內(nèi)的線程必須彼此等待。GPU 上的所有內(nèi)存操作都針對 warp 進(jìn)行了優(yōu)化。例如,從全局內(nèi)存中加載的粒度為 32*4 字節(jié),恰好有 32 個浮點數(shù),恰好每個線程一個浮點數(shù)。在串流多處理器(SM,相當(dāng)于一個 CPU 內(nèi)核)中,我們最多可以有 32 個 warp=1024 個線程。SM 的資源被分配給所有活動的 warp。所以,有時我們想要運行較少的 warp,這樣每個 warp 就有更多的寄存器 / 共享內(nèi)存 / 張量核資源。
對于下面的兩個例子,我們假設(shè)計算資源相同。對于這個 32×32 矩陣乘法的小例子,我們使用 8 個 SM(約為 RTX 3090 的 10%),每個 SM 8 個 warp。
矩陣乘法(無張量核)
如果我們想做一個 A*B=C 的矩陣乘法,其中每個矩陣的大小是 32×32,那么我們會希望將反復(fù)訪問的內(nèi)存加載到共享內(nèi)存中,因為它的延遲大約是前者的 1/10(200cycle vs 20 cycle)。通常,共享內(nèi)存中的內(nèi)存塊被稱為 memory tile 或只是 tile。使用 2*32 warp,可以并行地將兩個 32 *32 浮點數(shù)矩陣加載到共享內(nèi)存塊中。我們有 8 個 SM,每個 SM 有 8 個 warp,因此,得益于并行化,我們只需要執(zhí)行一次從全局內(nèi)存到共享內(nèi)存的順序加載,這需要 200 個 cycle。
為了進(jìn)行矩陣乘法,我們現(xiàn)在需要從共享內(nèi)存 A 和共享內(nèi)存 B 加載一個包含 32 個數(shù)值的向量,并執(zhí)行一個融合乘加(FFMA)。然后將輸出存儲在寄存器 C 中。我們將工作劃分為這樣一種方式,即每個 SM 做 8x 點積(32×32)來計算 C 的 8 個輸出。為什么這恰好是 8(在舊算法中是 4)有很強(qiáng)的技術(shù)性。這一點,我建議你閱讀 Scott Gray 關(guān)于矩陣乘法的博文來理解。這意味著,我們有 8 次共享內(nèi)存訪問,每次 20 個 cycle,8 次 FFMA 操作,每次 4 個 cycle。因此,總開銷是:
200 cycle(全局內(nèi)存)+ 8*20 cycle(共享內(nèi)存)+ 8*4 cycle(FFMA)= 392 cycle
下面讓我們看下使用張量核時需要多少開銷。
矩陣乘法(有張量核)
利用張量核,我們可以在一個 cycle 內(nèi)執(zhí)行 4×4 矩陣乘法。要做到這一點,我們首先需要把內(nèi)存讀到張量核中。與上面類似,我們需要從全局內(nèi)存(200 cycle)讀取數(shù)據(jù)并存儲在共享內(nèi)存中。要做一個 32×32 矩陣乘法,我們需要執(zhí)行 8×8=64 次張量核運算。一個 SM 有 8 個張量核,因此,我們總共有 64 個張量核——這正是我們需要的數(shù)量!我們可以通過 1 次內(nèi)存?zhèn)鬏敚?0 cycle)將數(shù)據(jù)從共享內(nèi)存?zhèn)鬏數(shù)綇埩亢耍缓筮M(jìn)行 64 次并行張量核操作(1 cycle)。這意味著,在這種情況下,張量核矩陣乘法的總開銷為:
200 cycle(全局內(nèi)存)+ 20 cycle(共享內(nèi)存)+ 1 cycle(Tensor Core)= 221 cycle
因此,我們通過張量核將矩陣乘法的開銷從 392 個 cycle 大幅降低到 221 個 cycle。在這種情況下,張量核降低了共享內(nèi)存訪問和 FFMA 操作的成本。
在這個例子中,有和沒有張量核都大致遵循相同的計算步驟,請注意,這是一個非常簡化的例子。在實際情況下,矩陣乘法涉及到更大的共享內(nèi)存塊,計算模式也稍微不同。
不過我相信,通過這個例子,我就很清楚為什么內(nèi)存帶寬對于配備張量核的 GPU 來說如此重要。在使用張量核進(jìn)行矩陣乘法時,全局內(nèi)存是 cycle 開銷中最重要的部分,如果可以降低全局內(nèi)存延遲,我們甚至可以擁有速度更快的 GPU。要做到這一點,我們可以通過增加內(nèi)存的時鐘頻率(增加每秒 cycle 數(shù),但也會增加發(fā)熱和電量消耗)或增加每次可以轉(zhuǎn)移的元素數(shù)量(總線寬度)。
內(nèi)存帶寬
從上一節(jié)我們已經(jīng)看到,張量核非常快。事實上,它們大部分時間都是空閑的,因為需要等待數(shù)據(jù)從全局內(nèi)存讀到共享內(nèi)存。例如,在 BERT 大型訓(xùn)練中,它使用非常大的矩陣——對于張量核來說,越大越好——我們的 Tensor Core TFLOPS 利用率大約為 30%,也就是說,70% 的時間張量核都是空閑的。
這意味著,當(dāng)比較兩個具有張量核的 GPU 時,GPU 性能的最佳指標(biāo)之一就是它們的內(nèi)存帶寬。例如,A100 GPU 的內(nèi)存帶寬為 1555 GB/s,而 V100 的是 900 GB/s。因此,基本可以估計 A100 的速度是 V100 的 1555/900 = 1.73 倍。
共享內(nèi)存 / L1 緩存大小 / 寄存器
由于內(nèi)存?zhèn)鬏數(shù)綇埩亢耸切阅艿南拗埔蛩兀晕覀冋趯ふ移渌梢蕴嵘齼?nèi)存到張量核傳輸速度的 GPU 屬性。這和共享內(nèi)存、L1 緩存以及使用的寄存器數(shù)量有關(guān)。理解存儲層次結(jié)構(gòu)如何帶來更快的內(nèi)存?zhèn)鬏敚兄诶斫饩仃嚦朔ㄔ?GPU 上如何執(zhí)行。
為了執(zhí)行矩陣乘法,我們利用了 GPU 的存儲層次結(jié)構(gòu),從慢的全局內(nèi)存到快的本地共享內(nèi)存,再到快如閃電的寄存器。然而,越快的存儲越小。因此,我們需要將矩陣分割成更小的矩陣,并在本地共享內(nèi)存中通過這些更小的塊執(zhí)行矩陣乘法,它們速度快,并且接近于串流多處理器(SM)——相當(dāng)于 CPU 內(nèi)核。對于張量核,我們更進(jìn)一步:我們?nèi)∶總€塊并將其中的一部分裝入張量核中。共享內(nèi)存中的矩陣 memory tile 比 GPU 全局內(nèi)存快大約 10-50 倍,而張量核的寄存器比 GPU 全局內(nèi)存快 200 倍。
擁有更大的 tile 意味著我們可以重用更多的內(nèi)存。我在博文 TPU vs GPU 中詳細(xì)探討了這個問題。實際上,你可以將 TPU 看作是每個張量核都有非常非常大的 tile。因此,TPU 在每次從全局內(nèi)存?zhèn)鬏敂?shù)據(jù)時都可以重用更多的內(nèi)存,這使得它們在矩陣乘法計算方面比 GPU 更有效率。
每個塊的大小是由每個串流多處理器(SM,相當(dāng)于 GPU 上的一個“CPU 內(nèi)核”)的內(nèi)存大小決定的。在以下架構(gòu)中,我們有以下共享內(nèi)存大小:
- Volta:96kb 共享內(nèi)存 / 32 kb L1
- Turing:64kb 共享內(nèi)存 / 32 kb L1
- Ampere:164kb 共享內(nèi)存 / 32 kb L1
我們看到,Ampere 的共享內(nèi)存更大,塊大小就更大,這減少了全局內(nèi)存訪問延遲。因此,Ampere 可以更好地利用 GPU 存儲的總體內(nèi)存帶寬。這將提高大約 2-5% 的性能。對于大型矩陣,性能的提升尤其明顯。
Ampere 張量核的另一個優(yōu)點是它們在線程之間共享更多的數(shù)據(jù)。這減少了寄存器的使用。寄存器被限制為每個串流多處理器(SM)64k 或每個線程 255。比較 Volta 和 Ampere 張量核,Ampere 張量核使用 1/3 的寄存器,允許更多張量核在共享內(nèi)存的每個塊上活動。換句話說,我們可以用相同數(shù)量的寄存器支撐 3 倍的張量核。然而,由于帶寬仍然是瓶頸,所以實際的 TFLOPS 與理論的 TFLOPS 相比,只會有微小的提高。新的張量核提高了大約 1-3% 的性能。
總的來說,我們可以看到,Ampere 的架構(gòu)經(jīng)過優(yōu)化,它使用改進(jìn)后的存儲層次結(jié)構(gòu)(從全局內(nèi)存到共享內(nèi)存塊,再到張量核寄存器),使可用內(nèi)存帶寬更加有效。
評估 Ampere 的深度學(xué)習(xí)性能
要點:
- 根據(jù)內(nèi)存帶寬和 Ampere GPU 改進(jìn)的存儲層次估計,理論上,其速度提升 1.78 倍到 1.87 倍。
- NVIDIA 提供了 TeslaA100 和 V100 GPU 的準(zhǔn)確基準(zhǔn)測試數(shù)據(jù)。這些出于營銷目的數(shù)據(jù)存在偏差,但是可以建立這些數(shù)據(jù)的去偏模型。
- 去偏基準(zhǔn)測試數(shù)據(jù)顯示,Tesla A100 在 NLP 方面比 V100 快 1.70 倍,在計算機(jī)視覺方面比 V100 快 1.45 倍。
如果你想了解我如何評估 Ampere GPU 性能的更多技術(shù)細(xì)節(jié),那么本節(jié)就是為你準(zhǔn)備的。如果你不關(guān)心這些技術(shù)方面,則可以跳過此部分。
Ampere 速度的理論估計
綜上所述,我們認(rèn)為,兩種配備張量核的 GPU 架構(gòu)之間的差異主要在于內(nèi)存帶寬。使用張量核的其他好處包括更多的共享內(nèi)存 /L1 緩存和更好的寄存器。
如果我們將 TeslaA100GPU 帶寬與 TeslaV100 GPU 帶寬相比較,我們得到的速度提升為 1555/900 = 1.73 倍。此外,我希望從更大的共享內(nèi)存中得到 2-5% 的加速,從改進(jìn)的張量核中得到 1-3% 的加速。這使得速度提升在 1.78 倍和 1.87 倍之間。用類似的推理方法,你就可以估計 Ampere 系列其他 GPU 與 TeslaV100 相比的速度提升。
Ampere 速度的實際估計
假設(shè)我們有針對一種 GPU 架構(gòu)的估計,如 Ampere、Turing 或 Volta,我們就可以很容易地將這些結(jié)果推到相同架構(gòu) / 系列的其他 GPU 上。幸運的是,NVIDIA 已經(jīng)在廣泛的計算機(jī)視覺和自然語言理解任務(wù)中對 A100 和 V100 進(jìn)行了基準(zhǔn)測試。遺憾的是,NVIDIA 使用了不同的批次大小和 GPU 數(shù)量,使得這些數(shù)值無法直接進(jìn)行比較,從而得出有利于 A100 的結(jié)果。所以,在某種意義上,這些基準(zhǔn)數(shù)據(jù)部分是真實的,部分是市場數(shù)據(jù)。一般來說,你可能會認(rèn)為,更大的批次大小才公平,因為 A100 有更多的內(nèi)存,但是為了比較 GPU 架構(gòu),我們應(yīng)該評估批次大小相同時的無偏內(nèi)存性能。
為了得到無偏估計,我們可以通過兩種方式對 V100 和 A100 結(jié)果進(jìn)行縮放:
(1)考慮批次大小差異,(2)考慮使用 1 個 GPU 和 8 個 GPU 的差異。幸運的是,我們能在 NVIDIA 提供的數(shù)據(jù)中找到對這兩種偏差的估計。
批次大小增加一倍使吞吐量增加 13.6%(CNN,以每秒圖像數(shù)為單位)。我在 RTX Titan 上針對同樣的問題測試了 Transformer,驚奇地發(fā)現(xiàn)了同樣的結(jié)果:13.5%——這似乎是一個可靠的估計。
當(dāng)我們將網(wǎng)絡(luò)在更多的 GPU 上并行化時,由于一些網(wǎng)絡(luò)開銷,我們會損失性能。與 V100 8x GPU 系統(tǒng)(NVLink 2.0)相比,A100 8x GPU 系統(tǒng)有更好的網(wǎng)絡(luò)(NVLink 3.0)——這是另一個令人困惑的因素。直接查看 NVIDIA 的數(shù)據(jù),我們可以發(fā)現(xiàn),對于 CNN 來說,8x A100 系統(tǒng)比 8x V100 系統(tǒng)開銷低 5%。這意味著,從 1x A100 到 8xA100 可以獲得 7 倍的速度提升,而從 1x V100 到 8xA100 可以獲得 6.67 倍。對于 Transformer 來說,這個數(shù)值是 7%。
使用這些數(shù)據(jù),我們可以從 NVIDIA 提供的直接數(shù)據(jù)中估算其對于一些特定深度學(xué)習(xí)架構(gòu)的速度提升。與 Tesla V100 相比,Tesla A100 可以提供以下速度提升:
- SE-ResNeXt101:1.43 倍
- Masked-R-CNN:1.47 倍
- Transformer(12 層, 機(jī)器翻譯, WMT14 en-de):1.70 倍
因此,對于計算機(jī)視覺來說,這些數(shù)值比理論估計要低一些。這可能是由于張量維數(shù)較小,準(zhǔn)備矩陣乘法(如 img2col 或快速傅里葉變換(FFT))所需的操作開銷,或者操作無法充分利用 GPU(最后的層通常相對較小)。它也可以是特定架構(gòu)的工件(分組卷積)。
Transformer 實際估計值與理論估計值非常接近。這可能是因為大型矩陣的算法非常簡單。我將使用這些實際的估計來計算 GPU 的成本效率。
估計中可能存在的偏差
上面是對 A100 和 V100 的對比估計。過去,NVIDIA“游戲”GPU RTX 出現(xiàn)了性能偷偷下降的問題:(1)降低張量核利用率,(2)風(fēng)扇散熱,(3)禁用對等 GPU 傳輸。與 Ampere A100 相比,RT 30 系列可能有未公布的性能下降。有了消息,我會更新這篇博文。
Ampere / RTX 30 系列的其他考慮因素
要點:
- Ampere 可以用于稀疏網(wǎng)絡(luò)訓(xùn)練,它最高可以將訓(xùn)練速度提高 2 倍。
- 稀疏網(wǎng)絡(luò)訓(xùn)練仍然很少使用,但將使 Ampere 可以經(jīng)受住未來的考驗。
- Ampere 有新的低精度數(shù)據(jù)類型,這使得使用低精度數(shù)值更容易,但不一定比以前的 GPU 更快。
- 新的風(fēng)扇設(shè)計非常棒,如果你的 GPU 之間有間隙的話,但不清楚如果多個 GPU 之間沒有間隙,它們是否能有效冷卻。
- RTX3090 的 3 插槽設(shè)計使得 4x GPU 構(gòu)建成為問題。可能的解決方案是 2 插槽轉(zhuǎn)換或使用 PCIe 擴(kuò)展器。
- 4x RTX 3090 需要的電量比目前市場上任何標(biāo)準(zhǔn)電源單元所能提供的電量都多。
與 NVIDIA Turing RTX 20 系列相比,新的 NVIDIA Ampere RTX30 系列具有額外的優(yōu)點,如稀疏網(wǎng)絡(luò)訓(xùn)練和推理。其他特性,比如新的數(shù)據(jù)類型,更多的是易用性特性,因為它們提供了和 Turing 一樣的性能提升,但是不需要任何額外的編程。
稀疏網(wǎng)絡(luò)訓(xùn)練
Ampere 可以以稠密矩陣的速度進(jìn)行細(xì)粒度結(jié)構(gòu)自動稀疏矩陣乘法。它的工作原理是,如果有一個矩陣,你把它分割成 4 個元素,現(xiàn)在,稀疏矩陣張量核特性允許這 4 個元素中的 2 個為零。這就帶來了 2 倍的速度提升,因為矩陣乘法的帶寬需求減半了。
我以前研究過稀疏網(wǎng)絡(luò)訓(xùn)練。對于我的工作,有一種批評是“你減少了網(wǎng)絡(luò)所需的FLOPS,但卻沒能帶來速度的提升,因為GPU 不能做快速稀疏矩陣乘法。”那好吧,加上張量核的稀疏矩陣乘法特性,我的算法,或者其他的稀疏訓(xùn)練算法,現(xiàn)在在實際的訓(xùn)練中提供了2 倍的速度提升。
雖然這個特性還在實驗階段,訓(xùn)練稀疏網(wǎng)絡(luò)還不是很普遍,但GPU 擁有這個特性意味著你已經(jīng)為未來的稀疏訓(xùn)練做好了準(zhǔn)備。
低精度計算
在我之前的工作中,我已經(jīng)展示過,新數(shù)據(jù)類型可以提高低精度反向傳播的穩(wěn)定性。目前,如果你想要實現(xiàn)16 位浮點數(shù)(FP16)的穩(wěn)定反向傳播,主要問題是普通FP16 數(shù)據(jù)類型只支持[-65504,65504] 區(qū)間內(nèi)的數(shù)值。如果梯度超出這個范圍,就會變成NaN 值。為了防止在FP16 訓(xùn)練期間發(fā)生這種情況,我們通常會進(jìn)行損失縮放,即在反向傳播之前將損失乘以一個小數(shù)值,以防止這種梯度爆炸。
Brain Float 16 格式(BF16)使用更多的位作為指數(shù),這樣,其可能的數(shù)值范圍與 FP32 相同:[-3*10^38,3*10^38]。BF16 的精度較低,但梯度精度對學(xué)習(xí)來說并不是那么重要。所以 BF16 所做的就是你不再需要做任何損失縮放或者擔(dān)心梯度迅速膨脹。因此,我們可以看到使用 BF16 格式時訓(xùn)練穩(wěn)定性的提高,只是精度稍有降低。
這意味著:使用 BF16 精度,訓(xùn)練可能比 FP16 精度更穩(wěn)定,而提供了同等的速度提升。使用 TF32 精度,可以得到接近 FP32 的穩(wěn)定性,接近 FP16 的速度提升。好的方面是,要使用這些數(shù)據(jù)類型,只需將 FP32 替換為 TF32,將 FP16 替換為 BF16——不需要修改代碼!
不過,總的來說,這些新數(shù)據(jù)類型可以被視為懶惰數(shù)據(jù)類型,因為通過一些額外的編程工作(適當(dāng)?shù)膿p失縮放、初始化、歸一化、使用 Apex),使用舊數(shù)據(jù)類型就可以獲得所有這些好處。因此,這些數(shù)據(jù)類型并不提供速度提升,而是提高了低精度訓(xùn)練的易用性。
新的風(fēng)扇設(shè)計 / 散熱問題
RTX 30 系列新的風(fēng)扇設(shè)計包括一個鼓風(fēng)扇和一個推挽式風(fēng)扇。設(shè)計很巧妙,如果你的 GPU 之間有間隙,也會非常有效。然而,如果你把 GPU 堆在一起,就不清楚它們表現(xiàn)如何了。鼓風(fēng)扇將能夠通過遠(yuǎn)離其他圖形處理器的支架排氣,但也沒法說那多有效,因為鼓風(fēng)扇的設(shè)計和以前不同。在一個 4 PCIe 插槽設(shè)置中,如果你想購買 1 到 2 個 GPU,那應(yīng)該沒問題。然而,如果你打算同時使用 3 到 4 個 RTX 30 GPU,那么我需要等散熱性能報告出來,了解下是否需要不同的 GPU 冷卻器、PCIe 擴(kuò)展器或其他解決方案。到時候我會更新這篇博文。
為了克服散熱問題,水冷在任何情況下都可以提供一個解決方案。許多廠商為 RTX 3080/RTX 3090 卡提供水冷模塊,即使在 4x GPU 設(shè)置中也能保持低溫。如果你想運行一個 4x GPU 設(shè)置,可以留心下一體化水冷卻解決方案,因為在大多數(shù)桌面情況下散熱器都很難分散開。
冷卻問題的另一個解決方案是購買 PCIe 擴(kuò)展器,并將 GPU 在機(jī)箱內(nèi)分散開。這非常有效,華盛頓大學(xué)的其他博士生和我使用這個設(shè)置都非常成功。那看起來不漂亮,但它可以使你的 GPU 保持涼爽!即使你沒有足夠的空間來將 GPU 分散開,它還是可以幫到你。例如,如果你可以在一個臺式電腦的機(jī)箱中找到空間,那么你或許就可以購買標(biāo)準(zhǔn)的 3 槽寬 RTX 3090,并在機(jī)箱中使用 PCIe 擴(kuò)展器來把它們分散開。這樣,你就可以通過一個簡單的解決方案解決了 4x RTX 3090 設(shè)置中的空間問題和冷卻問題。
3 插槽設(shè)計和電量問題
RTX 3090 是一個 3 插槽 GPU,所以你不能在 4x 設(shè)置中使用 NVIDIA 的默認(rèn)風(fēng)扇設(shè)計。這是合理的,因為它運行在 350W TDP 下,在多 GPU 2 插槽設(shè)置中很難降溫。RTX 3080 運行在 320W TDP 下只稍好一點,而冷卻一個 4x RTX 3080 設(shè)置也會非常困難。
在 4x RTX 3090 設(shè)置下為一個 4x350w = 1400W 系統(tǒng)供電也很困難。1600W 的供電單元(PSU)很容易獲得,但只有 200W 是給 CPU 供電,主板用電可能太緊。只有在元件獲得充分利用的情況下,才會達(dá)到最大電量,而在深度學(xué)習(xí)中,CPU 通常只處于弱負(fù)載狀態(tài)。這樣,一個 1600W 的 PSU 就可以很好地為一個 4x RTX 3080 構(gòu)建供電,但是對于一個 4x RTX 3090 構(gòu)建,最好是找一個高瓦數(shù)的 PSU(+1700W)。目前,在臺式電腦市場上似乎沒有一個 PSU 超過 1600W。服務(wù)器或加密貨幣挖礦 PSU 可能可以解決這個問題,但可能外形奇怪。
GPU 深度學(xué)習(xí)性能
下面的基準(zhǔn)測試不僅包括 Tesla A100 和 Tesla V100 的基準(zhǔn)測試,我還構(gòu)建了一個適合這些數(shù)據(jù)的模型,以及基于 Titan V、Titan RTX、RTX 2080 Ti 和 RTX 2080 的四個不同的基準(zhǔn)測試。[ 1 , 2 , 3 , 4 ]
除此之外,我還通過在基準(zhǔn)數(shù)據(jù)的這些數(shù)據(jù)點之間進(jìn)行插值擴(kuò)展了 RTX 2070、RTX 2060 卡或是 Quadro RTX 6000&8000 卡。通常,在同一個架構(gòu)中,GPU 的擴(kuò)展與串流多處理器和帶寬成線性關(guān)系,而我的架構(gòu)模型就是以此為基礎(chǔ)。
我只收集了混合精度 FP16 訓(xùn)練的基準(zhǔn)數(shù)據(jù),因為我相信,沒有充分的理由使用 FP32 訓(xùn)練。
與 RTX 2080 Ti 相比,RTX 3090 將卷積網(wǎng)絡(luò)的速度提高了 1.57 倍,將 Transformer 的速度提高了 1.5 倍,與此同時,定價也漲了 15%。因此,與 Turing RTX 20 系列相比,Ampere RTX 30 提供了一個非常實質(zhì)性的改進(jìn)。
GPU 深度學(xué)習(xí)的每美元性能
什么 GPU 能給你帶來最好的回報?這取決于整個系統(tǒng)的成本。如果你有一個成本高昂的系統(tǒng),那么投資更昂貴的 GPU 是有意義的。
這里有三個 PCIe 3.0 構(gòu)建,我用它作為 2/4 GPU 系統(tǒng)的基礎(chǔ)成本,然后再加上 GPU 成本。GPU 成本是 GPU 在亞馬遜和 eBay 上成本的均值。對于新的 Ampere GPU,我使用了定價。結(jié)合上文給出的性能值,就可以得出這些 GPU 系統(tǒng)的每美元性能值。對于 8 GPU 系統(tǒng),我使用 Supermicro barebone 作為基準(zhǔn)成本——這是 RTX 服務(wù)器的行業(yè)標(biāo)準(zhǔn)。請注意,這些柱狀圖沒有考慮內(nèi)存需求。你應(yīng)該首先考慮自己的內(nèi)存需求,然后在圖表中尋找最佳選項。關(guān)于內(nèi)存,這里有一份大致的指南:
- 使用預(yù)訓(xùn)練的 Transformer;從頭開始訓(xùn)練小型 Transformer:>= 11GB
- 在研發(fā) / 生產(chǎn)環(huán)境中訓(xùn)練大型 Transformer 或卷積網(wǎng)絡(luò):>= 24 GB
- 開發(fā)神經(jīng)網(wǎng)絡(luò)原型(Transformer 或卷積網(wǎng)絡(luò)):>= 10 GB
- Kaggle 競賽:>= 8 GB
- 計算機(jī)視覺應(yīng)用:>= 10GB
GPU 推薦
我需要再次強(qiáng)調(diào)的第一件事是:在選擇 GPU 的時候,你需要確保它有足夠的內(nèi)存來完成你想做的事情。選擇 GPU 應(yīng)該按下面的步驟來:
- 我想用 GPU 做什么:Kaggle 競賽、學(xué)習(xí)深度學(xué)習(xí)、破解小項目(GAN 還是大型語言模型?)、計算機(jī)視覺 / 自然語言處理 / 其他領(lǐng)域研究,或者其他什么?
- 我要做的事需要多大內(nèi)存?
- 使用上面的成本 / 性能圖找出滿足內(nèi)存標(biāo)準(zhǔn)的、最適合你的 GPU。
- 對于我選擇的 GPU 有其他的注意事項嗎?例如,如果是 RTX 3090,我能把它裝進(jìn)我的電腦嗎?對于我選的 GPU,我的電源單元(PSU)功率是否足夠?散熱會是問題嗎?或者我能以某種方式有效地冷卻 GPU 嗎?
其中一些細(xì)節(jié)需要你自我反省你想要什么,也許可以研究一下,對于你的興趣領(lǐng)域,其他人使用多大內(nèi)存的 GPU。我可以提供一些指導(dǎo),但無法面面俱到。
我什么時候需要 >= 11 GB 的內(nèi)存?
我之前提到過,如果你使用 Transformer,那么你至少應(yīng)該有 11GB 的內(nèi)存,如果你研究 Transformer,則內(nèi)存 >= 24GB 更好。這是因為之前大多數(shù)經(jīng)過預(yù)訓(xùn)練的模型都有相當(dāng)高的內(nèi)存要求,而且這些模型至少是使用擁有 11 GB 內(nèi)存的 RTX 2080 Ti GPU 進(jìn)行訓(xùn)練。因此,小于 11GB 可能會遇到難以或不可能運行某些模型的情況。
其他需要大量內(nèi)存的領(lǐng)域包括醫(yī)學(xué)成像、一些最先進(jìn)的計算機(jī)視覺模型以及任何有超大圖像的東西(GAN,樣式轉(zhuǎn)換)。
一般來說,如果你想建立一個模型并據(jù)此獲得競爭優(yōu)勢,無論是研究、行業(yè)還是 Kaggle 競賽,額外的內(nèi)存可能會為你帶來優(yōu)勢。
什么時候內(nèi)存可以 <11 GB ?
RTX 3070 和 RTX3080 是非常強(qiáng)大的卡,但它們內(nèi)存有點小。不過,對于許多任務(wù),你不需要那么大的內(nèi)存。
如果你想學(xué)習(xí)深度學(xué)習(xí),那么 RTX 3070 就很完美。這是因為訓(xùn)練大多數(shù)架構(gòu)的基本技能都可以通過將它們縮小一點或者使用小一點的輸入圖像來學(xué)習(xí)。如果我再次學(xué)習(xí)深度學(xué)習(xí),我可能會使用一個 RTX 3070,如果有多余的錢,甚至?xí)枚鄠€。
RTX 3080 是目前為止最具成本效益的卡,因此是原型設(shè)計的理想選擇。對于原型設(shè)計,你想要內(nèi)存最大的,這仍然很便宜。這里所說的原型設(shè)計可以是在任何領(lǐng)域的原型設(shè)計:研究、Kaggle 競賽、為創(chuàng)業(yè)公司出主意 / 設(shè)計模型、試驗研究代碼。對于所有這些應(yīng)用程序,RTX 3080 都是最好的 GPU。
假設(shè)我將領(lǐng)導(dǎo)一個研究實驗室 / 創(chuàng)業(yè)公司。我將把 66-80% 的預(yù)算投入到 RTX 3080 機(jī)器上,20-33% 用于配備了強(qiáng)大水冷裝置的 RTX 3090 機(jī)器。我的想法是,RTX 3080 的成本效益更高,可以作為原型機(jī),通過 slurm 集群設(shè)置來共享。因為原型設(shè)計應(yīng)該以敏捷的方式完成,所以應(yīng)該使用較小的模型和數(shù)據(jù)集。RTX 3080 非常適合這個場景。一旦學(xué)生 / 同事獲得了一個很好的原型模型,他們就可以將原型轉(zhuǎn)移到 RTX 3090 機(jī)器上,并將其擴(kuò)展為更大的模型。
一般建議
總的來說,RTX 30 系列非常強(qiáng)大,我強(qiáng)烈推薦這些 GPU。如前一節(jié)所述,要注意內(nèi)存,還要注意電源和冷卻需求。如果你的 GPU 之間有一個 PCIe 插槽,則冷卻將沒有任何問題。否則,如果使用 RTX 30 卡,請準(zhǔn)備好水冷裝置、PCIe 擴(kuò)展器或有效的鼓風(fēng)扇卡(未來幾周的數(shù)據(jù)將會說明,NVIDIA 的風(fēng)扇設(shè)計是足夠的)。
一般來說,我會推薦 RTX 3090 給任何買得起它的人。不僅是現(xiàn)在,未來 3-7 年它都將是一個非常有效的卡。因此,這是一項將保持強(qiáng)勁增長的好投資。HBM 內(nèi)存三年內(nèi)不太可能變便宜,所以下一個 GPU 只會比 RTX 3090 好 25% 左右。我們可能會在 5-7 年內(nèi)看到廉價的 HBM 內(nèi)存,在那之后,你肯定想要升級。
如果你有多個 RTX 3090,請確保你選擇的解決方案可以提供有效的冷卻和足夠的電力。對于什么樣的設(shè)置合適,我將隨著可用數(shù)據(jù)的增加更新關(guān)于這個問題的博文。
對于沒有強(qiáng)烈競爭需求的企業(yè)(研究公司、Kaggle 競賽、競爭性初創(chuàng)公司),我推薦 RTX 3080。這是一個更經(jīng)濟(jì)的解決方案,并將確保大多數(shù)網(wǎng)絡(luò)的訓(xùn)練都足夠快。如果你使用了合適的內(nèi)存技巧,并且不介意額外進(jìn)行編程,那么現(xiàn)在有足夠的技巧將一個 24GB 的神經(jīng)網(wǎng)絡(luò)適配到 10GB 的 GPU 上。因此,如果你接受一些不確定性和額外的編程,那么 RTX 3080 也可能是比 RTX 3090 更好的選擇。
一般來說,對于學(xué)習(xí)深度學(xué)習(xí)和原型設(shè)計,RTX 3070 也是一種可靠的卡,它比 RTX 3080 便宜 200 美元。如果你負(fù)擔(dān)不起 RTX3080,那么 RTX3070 是最好的選擇。
如果你的預(yù)算有限,而 RTX 3070 又太貴,那么一個二手 RTX 2070 在易趣上大約要 260 美元。現(xiàn)在還不清楚是否會推出 RTX 3060,但如果你的預(yù)算有限,可能也值得再等一段時間。如果定價與 RTX 2060 和 GTX 1060 類似,那么預(yù)計其價格將在 250 美元到 300 美元之間,而且性能相當(dāng)強(qiáng)勁。
GPU 集群建議
GPU 集群設(shè)計高度依賴于用途。對于一個 +1024 GPU 系統(tǒng),網(wǎng)絡(luò)最重要,但在這樣的系統(tǒng)上,如果用戶一次最多只使用 32 個 GPU,投資強(qiáng)大的網(wǎng)絡(luò)基礎(chǔ)設(shè)施就是浪費。在這里,我將使用類似原型推廣的推理,如在 RTX 3080 和 RTX 3090 案例對比中所做的那樣。
一般來說,因為 CUDA 許可協(xié)議,RTX 卡被禁止進(jìn)入數(shù)據(jù)中心。然而,大學(xué)通常可以得到這個規(guī)則的豁免。與英偉達(dá)的人取得聯(lián)系請求豁免權(quán)是值得的。如果你被允許使用 RTX 卡,那么我建議使用配備了 RTX 3080 或 RTX 3090 GPU 的標(biāo)準(zhǔn) Supermicro 8 GPU 系統(tǒng)(如果可以保證有效冷卻)。一組 8x A100 節(jié)點就可以確保在原型化之后有效地“推廣”,特別是在不能保證 8x RTX 3090 服務(wù)器能夠得到充分冷卻的情況下。在這種情況下,我建議使用 A100 而不是 RTX 6000 / RTX 8000,因為 A100 非常劃算,而且是面向未來的。
如果你想在一個 GPU 集群(+256 個 GPU)上訓(xùn)練非常大的網(wǎng)絡(luò),我推薦配備了 A100 GPU 的 NVIDIA DGX SuperPOD 系統(tǒng)。在 +256 GPU 的規(guī)模下,網(wǎng)絡(luò)變得至關(guān)重要。如果你想擴(kuò)展到超過 256 個 GPU,那么你將需要一個高度優(yōu)化的系統(tǒng),把標(biāo)準(zhǔn)解決方案攢在一起就不在有效了。
特別是在 +1024 GPU 的規(guī)模上,市場上唯一具有競爭力的解決方案是谷歌 TPU Pod 和 NVIDIA DGX SuperPod。在這個規(guī)模上,我更喜歡谷歌 TPU Pod,因為他們定制的網(wǎng)絡(luò)基礎(chǔ)設(shè)施似乎優(yōu)于 NVIDIA DGX SuperPod 系統(tǒng)——盡管這兩種系統(tǒng)非常接近。比起 TPU 系統(tǒng),GPU 系統(tǒng)為深度學(xué)習(xí)模型和應(yīng)用提供了更多的靈活性,而 TPU 系統(tǒng)支持更大的模型,并提供更好的伸縮性。所以兩種系統(tǒng)都有各自的優(yōu)點和缺點。
不要買這些 GPU
我不建議購買多個 RTX Founders Editions 或 RTX Titans,除非你有 PCIe 擴(kuò)展器可以解決它們的冷卻問題。它們運行時很容易過熱,其性能將遠(yuǎn)遠(yuǎn)低于上文圖表中的數(shù)值。4x RTX 2080 Ti Founders Editions GPU 將很快超過 90C,此時,其內(nèi)核的時鐘頻率會降低,運行速度將比適當(dāng)冷卻的 RTX 2070 GPU 更慢。
我不建議購買 Tesla V100 或 A100,除非你是被迫購買的(禁止 RTX 數(shù)據(jù)中心策略的公司),或者你想在一個巨大的 GPU 集群上訓(xùn)練非常大的網(wǎng)絡(luò)——這些 GPU 不是很劃算。
如果你能買得起更好的卡,就不要購買 GTX 16 系列。這些卡沒有張量核,因此,深度學(xué)習(xí)性能相對較差。相比 GTX 16 系列,我寧可選擇二手的 RTX 2070 / RTX 2060 / RTX 2060 Super。如果你差錢,那 GTX 16 系列也算是個不錯的選擇。
什么情況下最好不要購買新的 GPU?
如果你已經(jīng)擁有 RTX 2080 Tis 或更好的 GPU,升級到 RTX 3090 可能就沒有意義。你的 GPU 已經(jīng)很好了,使用新推出的高能耗 RTX 30 卡,你需要為 PSU 和冷卻問題擔(dān)憂,而性能的提升卻微不足道——不值得。
我想要從 4x RTX 2080 Ti 升級到 4x RTX 3090 的唯一原因是,我在研究非常大的 Transformer 或其他高度依賴計算的網(wǎng)絡(luò)訓(xùn)練。但是,如果內(nèi)存是問題,在升級到 RTX 3090 之前,你可以首先考慮一些內(nèi)存技巧,以便在 4x RTX 2080 Tis 上適配大模型。
如果你有一個或多個 RTX 2070 GPU,升級前要三思。這些都是很好的 GPU。如果你發(fā)現(xiàn)自己經(jīng)常受限于 8GB 的內(nèi)存,那么可以在 eBay 上轉(zhuǎn)手出售這些 GPU 并獲得 RTX 3090。這一推論也適用于許多其他 GPU:如果內(nèi)存緊張,那么升級就是對的。
問 & 答 & 誤解
要點:
- PCIe 4.0 和 PCIe 通道在 2x GPU 設(shè)置中并不重要。對于 4x GPU 設(shè)置,它們也不是特別重要。
- RTX 3090 和 RTX 3080 的冷卻會是個問題。使用水冷卡或 PCIe 擴(kuò)展器。
- NVLink 沒用,只對 GPU 集群有用。
- 你可以在一臺計算機(jī)中使用不同的 GPU 類型(如 GTX 1080 + RTX 2080 + RTX 3090),但你無法有效地將它們并行。
- 在兩臺以上的機(jī)器上并行訓(xùn)練,你需要 Infiniband +50Gbit/s 的網(wǎng)絡(luò)。
- AMD CPU 比 Intel CPU 便宜,而 Intel CPU 幾乎沒有任何優(yōu)勢。
- 盡管做出了非常大的努力,但由于缺少社區(qū)和張量核,至少在 1-2 年內(nèi) AMD GPU+ ROCm 可能都無法與 NVIDIA 競爭。
- 如果你使用 GPU 的時間不到一年,那么云 GPU 是有幫助的。除此之外,臺式機(jī)是更便宜的解決方案。
我需要 PCIe 4.0 嗎?
一般來說,不需要。如果你有一個 GPU 集群,PCIe 4.0 很有用。如果你有一臺 8x GPU 機(jī)器,也還可以,但除此之外,它就沒有多大好處了。它可以幫助實現(xiàn)更好的并行化和更快的數(shù)據(jù)傳輸。數(shù)據(jù)傳輸在任何應(yīng)用程序中都不是瓶頸。在計算機(jī)視覺中,在數(shù)據(jù)傳輸管道中,數(shù)據(jù)存儲可能是瓶頸,而 PCIe 從 CPU 到 GPU 的傳輸則不是瓶頸。所以,對于大多數(shù)人來說,沒有真正的理由去安裝 PCIe 4.0。在 4 GPU 設(shè)置中,這樣做的好處是,并行度可能會提高 1-7%。
我需要 8x/16x PCIe 通道嗎?
和 PCIe 4.0 一樣,一般來說,不需要。并行化和快速數(shù)據(jù)傳輸需要 PCIe 通道,但這幾乎不會成為瓶頸。在 4x 通道上運行 GPU 就很好,特別是當(dāng)你只有 2 個 GPU 的時候。對于 4 GPU 設(shè)置,我更希望每個 GPU 有 8 個通道,但如果你是在 4 個 GPU 上并行運行的話,那么 4 個通道可能只會降低 5-10% 的性能。
如果每個 RTX 3090 需要 3 個 PCIe 插槽,我該如何安裝 4x RTX 3090?
你需要一個雙插槽變體,或者你可以嘗試使用 PCIe 擴(kuò)展器布置它們。除了空間之外,你還需要考慮冷卻問題和一個合適的 PSU。最易于管理的解決方案似乎是,4x RTX 3090 EVGA Hydro Copper 加一個定制的水冷循環(huán)。這可以使卡處于低溫狀態(tài)。EVGA 生產(chǎn) Hydro Copper 版本的 GPU 已有多年,我認(rèn)為你可以信任其水冷式 GPU 的質(zhì)量。不過,可能還有其他更便宜的變體。
PCIe 擴(kuò)展器也可以解決空間和冷卻問題,但是你需要確保你的機(jī)箱中有足夠的空間來布置 GPU。一定要確保你的 PCIe 擴(kuò)展器足夠長!
我該如何冷卻 4x RTX 3090 或 4x RTX 3080?
請看上節(jié)。
我可以使用多個不同類型的 GPU 嗎?
是的,你可以!但是不同類型的 GPU 無法有效地并行。我認(rèn)為,一個 3x RTX 3070 加一個 RTX 3090 就夠原型推廣了。另一方面,在 4x RTX 3070 GPU 上并行會非常快,如果你能將模型放到這些 GPU 上的話。除此之外,我能想到的你希望這樣做的唯一原因是,你希望繼續(xù)使用舊 GPU。這沒問題,但是在那些 GPU 上并行會比較低效,因為最快的 GPU 會等待最慢的 GPU 到達(dá)一個同步點(通常是梯度更新)。
NVLink 是什么,有用嗎?
一般來說,NVLink 是沒有用的。NVLink 是 GPU 之間的高速互連。如果你有一個有 +128 GPU 的 GPU 集群,它就有用了。否則,與標(biāo)準(zhǔn) PCIe 傳輸相比,它幾乎不會產(chǎn)生任何好處。
我錢不夠,即使是你推薦的最便宜的 GPU。我能做什么?
當(dāng)然是買二手 GPU。二手 RTX 2070(400 美元)和 RTX 2060(300 美元)都很棒。如果你負(fù)擔(dān)不起,次佳選項是試著買一個二手的 GTX 1070(220 美元)或 GTX 1070 Ti(230 美元)。如果那還太貴,則可以使用 GTX 980 Ti (6GB 150 美元)或使用 GTX 1650 Super(190 美元)。如果這都太貴的話,最好是使用免費的 GPU 云服務(wù)。通常,這些服務(wù)會有時間限制,之后你就需要付費了。你可以輪流使用不同的服務(wù)和賬戶,直到你有錢購買自己的 GPU。
GPU 的碳排放量是多少?我如何使用 GPU 而又不污染環(huán)境?
我構(gòu)建了一個碳計算器,供學(xué)者們計算自己的碳排放量(從航班到會議 + GPU 時間的碳排放)。該計算器也可以用來計算純粹的GPU 碳排放量。你會發(fā)現(xiàn),GPU 產(chǎn)生的碳比國際航班多得多。因此,你應(yīng)該確保你有一個綠色能源,如果你不想有一個天文數(shù)字的碳排放量。如果我們這個地區(qū)沒有電力供應(yīng)商提供綠色能源,最好的辦法就是購買碳抵消。許多人對碳抵消持懷疑態(tài)度。他們工作嗎?他們是在詐騙嗎?
我相信,在這種情況下,懷疑主義是有害的,因為什么都不做比冒著被騙的風(fēng)險更有害。如果你擔(dān)心被騙,只需投資一個抵消投資組合來最小化風(fēng)險。
大約十年前,我參與了一個產(chǎn)生碳抵消的項目。聯(lián)合國官員跟蹤了整個過程,他們獲得了干凈的數(shù)字?jǐn)?shù)據(jù),并對項目現(xiàn)場進(jìn)行了實地檢查。在這種情況下產(chǎn)生的碳抵消是非常可靠的。我相信,其他許多項目也有類似的質(zhì)量標(biāo)準(zhǔn)。
碳計算器: https://github.com/TimDettmers/carbonneutral
在兩臺機(jī)器之間并行需要什么?
如果你想要跨機(jī)器并行,那么你將需要 +50Gbits/s 的網(wǎng)卡來提高速度。關(guān)于這個問題,我有一篇有點過時的博文。現(xiàn)在,我建議至少有一個EDR Infiniband 設(shè)置,這意味著網(wǎng)卡至少有50 GBit/s 的帶寬。兩張帶線纜的EDR 卡在eBay 上大約賣500 美元。
稀疏矩陣乘法特性適用于一般的稀疏矩陣嗎?
似乎并非如此。稀疏矩陣的粒度需要滿足每4 個元素有2 個零值元素,也就是說,稀疏矩陣需要是高度結(jié)構(gòu)化的。可以稍微調(diào)整下算法,這涉及到將4 個值組合成2 個值的壓縮表示,但這也意味著Ampere GPU 不可能實現(xiàn)任意稀疏矩陣的精確乘法。
我需要Intel CPU 來支持多GPU 設(shè)置嗎?
我不推薦Intel CPU,除非你在Kaggle 競賽中大量使用了CPU(CPU 上的大量線性代數(shù)運算)。即使是在Kaggle 競賽中,AMD CPU 仍然很好。在深度學(xué)習(xí)方面,AMD GPU 比Intel GPU 更便宜也更好。對于4x GPU 構(gòu)建,我的首選CPU 是Threadripper。我們在大學(xué)里用Threadripper 構(gòu)建了幾十個系統(tǒng),它們都工作得很好——還沒有人抱怨。對于8x GPU 系統(tǒng),我通常會選擇供應(yīng)商熟悉的CPU。在8x 系統(tǒng)中,CPU 和PCIe/ 系統(tǒng)可靠性比單純的性能或成本效益更重要。
我應(yīng)該等待RTX 3090 Ti 嗎?
目前還不清楚是否會有RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。GTX XX90 的名稱通常是留給雙GPU 卡,所以NVIDIA 是偏離了這一趨勢。從價格和性能來看,似乎RTX 3090 是一個取代RTX 3080 Ti 的名字。但是所有這些都是推測。如果你對這個問題感興趣,我建議你對Rumor Mill 上的新聞跟蹤一兩個月,如果你什么都沒有看到,就不太可能出現(xiàn)RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。
機(jī)箱設(shè)計對散熱有影響嗎?
沒有。只要GPU 之間有一個小間隙,GPU 的冷卻通常就沒問題。機(jī)箱設(shè)計可以提供1 到3 攝氏度的好處,而GPU 之間的間隙將提供10 到30 攝氏度的改進(jìn)。歸根結(jié)底,如果GPU 之間有間隙,冷卻就沒問題。如果GPU 之間沒有間隙,就需要合適的冷卻器設(shè)計(鼓風(fēng)扇)或其他解決方案(水冷、PCIe 擴(kuò)展器),但無論哪種情況,機(jī)箱設(shè)計和機(jī)箱風(fēng)扇都不很重要。
AMD GPUs + ROCm 能趕上 NVIDIA GPUs + CUDA 嗎?
1-2 年內(nèi)趕不上。這涉及三個方面的問題:張量核、軟件和社區(qū)。
就純硅而言,AMD GPU 很棒:優(yōu)秀的 FP16 性能,優(yōu)秀的內(nèi)存帶寬。然而,由于缺乏張量核或等效特性,其深度學(xué)習(xí)性能與 NVIDIA GPU 相比較差。封裝的低精度數(shù)學(xué)函數(shù)不能解決這個問題。沒有這個硬件特性,AMD GPU 將永遠(yuǎn)不會有競爭力。有傳言稱,AMD 計劃在 2020 年推出某種具有張量核等效特性的數(shù)據(jù)中心卡,但此后就沒有新的數(shù)據(jù)出現(xiàn)了。擁有張量核等效特性的數(shù)據(jù)中心卡意味著很少有人能夠負(fù)擔(dān)得起這樣的AMD GPU,這將給NVIDIA 帶來競爭優(yōu)勢。
假設(shè)AMD 在未來引入了類似于張量核的硬件特性。然后很多人會說,“但是沒有軟件針對AMD GPU!”我該怎么使用它們呢?這更多的是一種誤解。AMD 軟件ROCm 已經(jīng)發(fā)展很長一段時間了,并且PyTorch 提供了優(yōu)秀的支持。雖然我沒有看到很多針對AMD GPU+ PyTorch 的經(jīng)驗報告,但所有的軟件功能已整合。看起來,不管你選擇什么網(wǎng)絡(luò),都可以很好地在AMD GPU 上運行。所以,在這方面,AMD 已經(jīng)走過了一段很長的路,這個問題或多或少得到了解決。
然而,如果軟件問題和缺少張量核的問題已得到了解決,AMD 還有一個問題:缺少社區(qū)。如果你使用NVIDIA GPU 遇到問題,你可以在谷歌查詢這個問題并找到解決方案。這讓人們對NVIDIA GPU 產(chǎn)生了很大的信任。你有基礎(chǔ)設(shè)施,使使用NVIDIA GPU 變得很容易(任何深度學(xué)習(xí)框架都可以使用,任何科學(xué)問題都得到很好的支持)。你可以輕松地使用NVIDIA GPU(比如apex)。你很容易就可以找到NVIDIA GPU 和編程專家,而我認(rèn)識的AMD GPU 專家就少得多。
在社區(qū)方面,AMD 和NVIDIA 的對比有點像Julia 和Python。Julia 有很大的潛力,很多人會說,它是科學(xué)計算的高級編程語言。然而,與Python 相比,Julia 很少被使用。這是因為Python 社區(qū)非常強(qiáng)大。Numpy、SciPy、Pandas 都是功能強(qiáng)大的軟件包,有很多人在使用它們。這與NVIDIA vs AMD 的問題非常相似。
因此,在引入張量核等效特性(1/2 到1 年?)并圍繞ROCm 建立一個強(qiáng)大的社區(qū)(2 年?)之前,AMD 很可能都無法趕上NVIDIA。AMD 總是會在特定的子領(lǐng)域(如加密貨幣挖掘、數(shù)據(jù)中心)搶奪一部分市場份額。不過,在深度學(xué)習(xí)領(lǐng)域,至少幾年的時間內(nèi),NVIDIA 可能會保持其壟斷地位。
什么時候使用云GPU?什么時候使用專用的GPU 臺式機(jī)/ 服務(wù)器?
經(jīng)驗法則:如果你希望做深度學(xué)習(xí)超過一年,那就買一臺GPU 臺式機(jī)。否則,最好使用云實例。
最好自己算一下。例如,如果對比下配備了1x V100 的AWS V100 spot 實例和一個只有一塊RTX 3090 的臺式機(jī)(性能類似),那么對于臺式機(jī),我們要花2200 美元( 2-GPU Barebone + RTX 3090)。此外,假設(shè)你在美國,你需要額外支付每千瓦 / 時 0.12 美元的電費,而 AWS 實例是每小時 2.14 美元。
以每年 15% 的利用率來說,臺式機(jī)每年消耗的電量為:
(350 Watt (GPU) + 100 Watt (CPU))*0.15 (utilization) * 24 hours * 365 days = 591 kW/h
即每年 591kW/h,需額外支付 71 美元。
在利用率為 15%(一天中 15% 的時間使用云實例)的情況下,臺式機(jī)和云實例的盈虧平衡點大約是 300 天(2311 美元 vs 2270 美元):
2.14/h∗0.15(utilization)∗24hours∗300days=2.14/h∗0.15(utilization)∗24hours∗300days=2,311
因此,如果你希望在 300 天后繼續(xù)運行深度學(xué)習(xí)模型,最好是購買一臺臺式機(jī),而不是使用 AWS spot 實例。
對任何云服務(wù),你都可以進(jìn)行類似的計算,以決定是使用云服務(wù)還是臺式機(jī)。
下面是常見的利用率:
- 博士生個人臺式機(jī):< 15%
- 博士生 slurm GPU 集群:> 35%
- 企業(yè) slurm 研究集群:> 60%
一般來說,對于那些思考前沿想法比開發(fā)實用產(chǎn)品更重要的職業(yè)來說,利用率較低。有些領(lǐng)域的利用率很低(可解釋性研究),而其他領(lǐng)域的利用率則高得多(機(jī)器翻譯、語言建模)。一般來說,個人機(jī)器的利用率幾乎總是被高估了。大多數(shù)個人系統(tǒng)的利用率通常在 5-10% 之間。這就是為什么我強(qiáng)烈推薦 slurm GPU 集群給研究小組和公司,而不是個人的桌面 GPU 機(jī)器。
深度學(xué)習(xí)是一個計算要求非常高的領(lǐng)域,你對 GPU 的選擇將從根本上決定你的深度學(xué)習(xí)體驗。但是,如果你想購買一塊新 GPU,主要看哪些特性呢?GPU 內(nèi)存、內(nèi)核、張量核?如何做出有成本效益的選擇?這篇文章將深入研究這些問題,消除常見的誤解,讓你對如何考慮 GPU 有一個直觀的理解,并提供建議,幫助你做出正確的選擇。
前排提醒:本文字?jǐn)?shù)約為 15000,閱讀時間較長,可收藏后慢慢閱讀。
嫌長不看,先放結(jié)論
總體最好的 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)、RTX2060(400)、RTX2060(300)、GTX 1070(220)、GTX1070Ti(220)、GTX1070Ti(230)、GTX 1650 Super(190)、GTX980Ti(6GB190)、GTX980Ti(6GB150)。
我?guī)缀鯖]錢:有許多創(chuàng)業(yè)公司在推廣他們的云:使用免費的云積分,并在不同公司的賬戶之間來回切換,直到能買得起一塊 GPU。
我做 Kaggle:RTX 3070。
我是一名有競爭力的計算機(jī)視覺、預(yù)訓(xùn)練或機(jī)器翻譯研究人員:4x RTX 3090。務(wù)必要等到有了良好的冷卻和足夠的電力后(我將更新這篇博文)
我是一名 NLP 研究人員:如果你不從事機(jī)器翻譯、語言建模或任何類型的預(yù)訓(xùn)練工作,那么 RTX 3080 就足夠了而且頗具成本效益。
我剛開始接觸深入學(xué)習(xí),而且我很認(rèn)真:從一塊 RTX 3070 開始。如果你在 6 到 9 個月后仍然很認(rèn)真,賣掉你的 RTX 3070,并購買 4x RTX 3080。根據(jù)你下一步選擇的領(lǐng)域(初創(chuàng)公司、Kaggle、研究、深度學(xué)習(xí)應(yīng)用),賣掉你的 GPU,三年后再買更合適的(下一代 RTX 40s GPU)。
我想嘗試深度學(xué)習(xí),但沒當(dāng)真:RTX 2060 Super 就很好,但可能需要使用新電源。如果你的主板有一個 PCIe x16 插槽,并且有一個大約 300W 的電源,那么 GTX 1050 Ti 是一個很好的選擇,因為它不需要任何其他計算機(jī)組件就可以在你的臺式計算機(jī)上工作了。
用于模型并行化的、少于 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 節(jié)點或 8x RTX 6000 節(jié)點。
用于模型并行化的、128 個 GPU 的 GPU 集群:考慮下 8x Tesla A100 設(shè)置。如果你使用超過 512 個 GPU,那么你應(yīng)該考慮配置一個 DGX A100 SuperPOD 系統(tǒng),以匹配你的規(guī)模。
正文開始
這篇博文旨在讓你對 GPU 和 NVIDIA 的 Ampere 系列 GPU 有不同層次的了解。
(1)如果你對 GPU 如何工作、什么讓 GPU 速度更快、NVIDIA RTX 30 Ampere 系列 GPU 有什么獨特之處等問題的細(xì)節(jié)不感興趣,那么你可以跳到性能及每美元性能圖表和建議部分。這些是這篇文章的核心和最有價值的內(nèi)容。
(2)如果你關(guān)心具體的問題,我在這篇博文最后一部分回答了最常見的問題,以消除一些誤解。
(3)如果你想深入了解 GPU 和張量核是如何工作的,最好是從頭到尾閱讀這篇文章。根據(jù)你對相關(guān)主題的了解,你可以跳過一兩個小節(jié)。
我會在每個主要部分的開頭加上一小段總結(jié),希望可以幫助你決定是否要閱讀這個部分。
概 述
這篇文章的結(jié)構(gòu)如下。
首先,我將解釋是什么使 GPU 速度更快。我將討論 CPU 與 GPU、張量核、內(nèi)存帶寬、GPU 存儲層次以及它們與深度學(xué)習(xí)性能的關(guān)系。對于 GPU 可以提供什么,這些解釋可能會幫助你得到一個更直觀的認(rèn)識。
然后,我將對 GPU 的性能進(jìn)行理論估計,并將其與 NVIDIA 的一些市場基準(zhǔn)進(jìn)行比較,以獲得可靠的、無偏差的性能數(shù)據(jù)。我將討論新的 NVIDIA RTX 30 Ampere 系列 GPU 的獨特特性,如果你購買 GPU,這些特性是值得考慮的。
在此基礎(chǔ)上,我提出了 1-2、4、8 GPU 設(shè)置和 GPU 集群的 GPU 建議。之后是問答部分,我回答了 Twitter 上常見的問題;在這一節(jié)中,我還將討論一些常見的誤解和其他一些五花八門的問題,比如云與桌面對比、冷卻方式、AMD 與 NVIDIA 對比等。
GPU 如何工作?
如果你經(jīng)常使用 GPU,那么了解它們?nèi)绾喂ぷ魇呛苡杏玫摹_@些知識有助于你理解為什么 GPU 在某些情況下速度慢而在其他情況下速度快。然后,你可以更好地理解為什么你首先需要一個 GPU,以及其他未來的硬件選項可能會如何競爭。如果你只是想要有用的性能數(shù)值和參數(shù),以幫助你決定購買哪個 GPU,那么你可以跳過這一節(jié)。對于 GPU 如何工作的問題,最好的高階解釋是我在 Quora 上的回答:
“為什么 GPU 適合深度學(xué)習(xí)”: https://timdettmers.com/Why-are-GPUs-well-suited-to-deep-learning?top_ans=21379913
這是一個高階解釋,很好地說明了為什么 GPU 比 CPU 更適合深度學(xué)習(xí)。如果我們關(guān)注細(xì)節(jié),就能理解是什么讓一個 GPU 比另一個更好。
與處理速度相關(guān)的最重要的 GPU 參數(shù)
本節(jié)可以幫助你更直觀地理解如何考慮深度學(xué)習(xí)的性能。這種理解可以幫助你評估未來的 GPU。
張量核
要點:
- 張量核將乘法和加法運算所需的 cycle 減少為 1/16——在我舉的例子中,對于一個 32×32 的矩陣,從 128 個 cycle 減少到 8 個 cycle。
- 張量核減少了反復(fù)共享內(nèi)存訪問的次數(shù),從而節(jié)省了額外的內(nèi)存訪問 cycle。
- 張量核速度如此之快,計算不再是瓶頸。唯一的瓶頸是如何將數(shù)據(jù)傳輸?shù)綇埩亢酥小?/li>
現(xiàn)在 GPU 已經(jīng)足夠便宜,幾乎每個人都能負(fù)擔(dān)得起一個有張量核的 GPU。這就是為什么我只推薦具有張量核的 GPU。了解它們是如何工作的,有助于理解這些專門用于矩陣乘法的計算單元的重要性。這里我將向你展示一個簡單的例子:A*B=C 矩陣乘法,其中,所有矩陣的大小都是 32×32,我們將分別看下,計算模式在有和沒有張量核時是什么樣的。
要完全理解這一點,就必須理解 cycle 的概念。如果一個處理器以 1GHz 的速度運行,它每秒可以完成 10^9 個 cycle。每個 cycle 都代表一次計算機(jī)會。然而,大多數(shù)時候,操作所花費的時間會超過一個 cycle。因此,它創(chuàng)建了一個管道,用于啟動一個操作,它需要等待前一個操作完成所需的 cycle 數(shù)。這也稱為操作延遲。
下面是一些重要操作的延遲:
- 全局內(nèi)存訪問(最高 48GB):~200 cycle
- 共享內(nèi)存訪問(每個串流多處理器最高達(dá) 164KB):~20 cycle
- 融合乘加(FFMA):4 cycle
- 張量核矩陣乘法:1 cycle
此外,你應(yīng)該知道 GPU 上的最小線程單元是一個包含 32 個線程的包——這被稱為 warp。通常,warp 以同步模式運行——warp 內(nèi)的線程必須彼此等待。GPU 上的所有內(nèi)存操作都針對 warp 進(jìn)行了優(yōu)化。例如,從全局內(nèi)存中加載的粒度為 32*4 字節(jié),恰好有 32 個浮點數(shù),恰好每個線程一個浮點數(shù)。在串流多處理器(SM,相當(dāng)于一個 CPU 內(nèi)核)中,我們最多可以有 32 個 warp=1024 個線程。SM 的資源被分配給所有活動的 warp。所以,有時我們想要運行較少的 warp,這樣每個 warp 就有更多的寄存器 / 共享內(nèi)存 / 張量核資源。
對于下面的兩個例子,我們假設(shè)計算資源相同。對于這個 32×32 矩陣乘法的小例子,我們使用 8 個 SM(約為 RTX 3090 的 10%),每個 SM 8 個 warp。
矩陣乘法(無張量核)
如果我們想做一個 A*B=C 的矩陣乘法,其中每個矩陣的大小是 32×32,那么我們會希望將反復(fù)訪問的內(nèi)存加載到共享內(nèi)存中,因為它的延遲大約是前者的 1/10(200cycle vs 20 cycle)。通常,共享內(nèi)存中的內(nèi)存塊被稱為 memory tile 或只是 tile。使用 2*32 warp,可以并行地將兩個 32 *32 浮點數(shù)矩陣加載到共享內(nèi)存塊中。我們有 8 個 SM,每個 SM 有 8 個 warp,因此,得益于并行化,我們只需要執(zhí)行一次從全局內(nèi)存到共享內(nèi)存的順序加載,這需要 200 個 cycle。
為了進(jìn)行矩陣乘法,我們現(xiàn)在需要從共享內(nèi)存 A 和共享內(nèi)存 B 加載一個包含 32 個數(shù)值的向量,并執(zhí)行一個融合乘加(FFMA)。然后將輸出存儲在寄存器 C 中。我們將工作劃分為這樣一種方式,即每個 SM 做 8x 點積(32×32)來計算 C 的 8 個輸出。為什么這恰好是 8(在舊算法中是 4)有很強(qiáng)的技術(shù)性。這一點,我建議你閱讀 Scott Gray 關(guān)于矩陣乘法的博文來理解。這意味著,我們有 8 次共享內(nèi)存訪問,每次 20 個 cycle,8 次 FFMA 操作,每次 4 個 cycle。因此,總開銷是:
200 cycle(全局內(nèi)存)+ 8*20 cycle(共享內(nèi)存)+ 8*4 cycle(FFMA)= 392 cycle
下面讓我們看下使用張量核時需要多少開銷。
矩陣乘法(有張量核)
利用張量核,我們可以在一個 cycle 內(nèi)執(zhí)行 4×4 矩陣乘法。要做到這一點,我們首先需要把內(nèi)存讀到張量核中。與上面類似,我們需要從全局內(nèi)存(200 cycle)讀取數(shù)據(jù)并存儲在共享內(nèi)存中。要做一個 32×32 矩陣乘法,我們需要執(zhí)行 8×8=64 次張量核運算。一個 SM 有 8 個張量核,因此,我們總共有 64 個張量核——這正是我們需要的數(shù)量!我們可以通過 1 次內(nèi)存?zhèn)鬏敚?0 cycle)將數(shù)據(jù)從共享內(nèi)存?zhèn)鬏數(shù)綇埩亢耍缓筮M(jìn)行 64 次并行張量核操作(1 cycle)。這意味著,在這種情況下,張量核矩陣乘法的總開銷為:
200 cycle(全局內(nèi)存)+ 20 cycle(共享內(nèi)存)+ 1 cycle(Tensor Core)= 221 cycle
因此,我們通過張量核將矩陣乘法的開銷從 392 個 cycle 大幅降低到 221 個 cycle。在這種情況下,張量核降低了共享內(nèi)存訪問和 FFMA 操作的成本。
在這個例子中,有和沒有張量核都大致遵循相同的計算步驟,請注意,這是一個非常簡化的例子。在實際情況下,矩陣乘法涉及到更大的共享內(nèi)存塊,計算模式也稍微不同。
不過我相信,通過這個例子,我就很清楚為什么內(nèi)存帶寬對于配備張量核的 GPU 來說如此重要。在使用張量核進(jìn)行矩陣乘法時,全局內(nèi)存是 cycle 開銷中最重要的部分,如果可以降低全局內(nèi)存延遲,我們甚至可以擁有速度更快的 GPU。要做到這一點,我們可以通過增加內(nèi)存的時鐘頻率(增加每秒 cycle 數(shù),但也會增加發(fā)熱和電量消耗)或增加每次可以轉(zhuǎn)移的元素數(shù)量(總線寬度)。
內(nèi)存帶寬
從上一節(jié)我們已經(jīng)看到,張量核非常快。事實上,它們大部分時間都是空閑的,因為需要等待數(shù)據(jù)從全局內(nèi)存讀到共享內(nèi)存。例如,在 BERT 大型訓(xùn)練中,它使用非常大的矩陣——對于張量核來說,越大越好——我們的 Tensor Core TFLOPS 利用率大約為 30%,也就是說,70% 的時間張量核都是空閑的。
這意味著,當(dāng)比較兩個具有張量核的 GPU 時,GPU 性能的最佳指標(biāo)之一就是它們的內(nèi)存帶寬。例如,A100 GPU 的內(nèi)存帶寬為 1555 GB/s,而 V100 的是 900 GB/s。因此,基本可以估計 A100 的速度是 V100 的 1555/900 = 1.73 倍。
共享內(nèi)存 / L1 緩存大小 / 寄存器
由于內(nèi)存?zhèn)鬏數(shù)綇埩亢耸切阅艿南拗埔蛩兀晕覀冋趯ふ移渌梢蕴嵘齼?nèi)存到張量核傳輸速度的 GPU 屬性。這和共享內(nèi)存、L1 緩存以及使用的寄存器數(shù)量有關(guān)。理解存儲層次結(jié)構(gòu)如何帶來更快的內(nèi)存?zhèn)鬏敚兄诶斫饩仃嚦朔ㄔ?GPU 上如何執(zhí)行。
為了執(zhí)行矩陣乘法,我們利用了 GPU 的存儲層次結(jié)構(gòu),從慢的全局內(nèi)存到快的本地共享內(nèi)存,再到快如閃電的寄存器。然而,越快的存儲越小。因此,我們需要將矩陣分割成更小的矩陣,并在本地共享內(nèi)存中通過這些更小的塊執(zhí)行矩陣乘法,它們速度快,并且接近于串流多處理器(SM)——相當(dāng)于 CPU 內(nèi)核。對于張量核,我們更進(jìn)一步:我們?nèi)∶總€塊并將其中的一部分裝入張量核中。共享內(nèi)存中的矩陣 memory tile 比 GPU 全局內(nèi)存快大約 10-50 倍,而張量核的寄存器比 GPU 全局內(nèi)存快 200 倍。
擁有更大的 tile 意味著我們可以重用更多的內(nèi)存。我在博文 TPU vs GPU 中詳細(xì)探討了這個問題。實際上,你可以將 TPU 看作是每個張量核都有非常非常大的 tile。因此,TPU 在每次從全局內(nèi)存?zhèn)鬏敂?shù)據(jù)時都可以重用更多的內(nèi)存,這使得它們在矩陣乘法計算方面比 GPU 更有效率。
每個塊的大小是由每個串流多處理器(SM,相當(dāng)于 GPU 上的一個“CPU 內(nèi)核”)的內(nèi)存大小決定的。在以下架構(gòu)中,我們有以下共享內(nèi)存大小:
- Volta:96kb 共享內(nèi)存 / 32 kb L1
- Turing:64kb 共享內(nèi)存 / 32 kb L1
- Ampere:164kb 共享內(nèi)存 / 32 kb L1
我們看到,Ampere 的共享內(nèi)存更大,塊大小就更大,這減少了全局內(nèi)存訪問延遲。因此,Ampere 可以更好地利用 GPU 存儲的總體內(nèi)存帶寬。這將提高大約 2-5% 的性能。對于大型矩陣,性能的提升尤其明顯。
Ampere 張量核的另一個優(yōu)點是它們在線程之間共享更多的數(shù)據(jù)。這減少了寄存器的使用。寄存器被限制為每個串流多處理器(SM)64k 或每個線程 255。比較 Volta 和 Ampere 張量核,Ampere 張量核使用 1/3 的寄存器,允許更多張量核在共享內(nèi)存的每個塊上活動。換句話說,我們可以用相同數(shù)量的寄存器支撐 3 倍的張量核。然而,由于帶寬仍然是瓶頸,所以實際的 TFLOPS 與理論的 TFLOPS 相比,只會有微小的提高。新的張量核提高了大約 1-3% 的性能。
總的來說,我們可以看到,Ampere 的架構(gòu)經(jīng)過優(yōu)化,它使用改進(jìn)后的存儲層次結(jié)構(gòu)(從全局內(nèi)存到共享內(nèi)存塊,再到張量核寄存器),使可用內(nèi)存帶寬更加有效。
評估 Ampere 的深度學(xué)習(xí)性能
要點:
- 根據(jù)內(nèi)存帶寬和 Ampere GPU 改進(jìn)的存儲層次估計,理論上,其速度提升 1.78 倍到 1.87 倍。
- NVIDIA 提供了 TeslaA100 和 V100 GPU 的準(zhǔn)確基準(zhǔn)測試數(shù)據(jù)。這些出于營銷目的數(shù)據(jù)存在偏差,但是可以建立這些數(shù)據(jù)的去偏模型。
- 去偏基準(zhǔn)測試數(shù)據(jù)顯示,Tesla A100 在 NLP 方面比 V100 快 1.70 倍,在計算機(jī)視覺方面比 V100 快 1.45 倍。
如果你想了解我如何評估 Ampere GPU 性能的更多技術(shù)細(xì)節(jié),那么本節(jié)就是為你準(zhǔn)備的。如果你不關(guān)心這些技術(shù)方面,則可以跳過此部分。
Ampere 速度的理論估計
綜上所述,我們認(rèn)為,兩種配備張量核的 GPU 架構(gòu)之間的差異主要在于內(nèi)存帶寬。使用張量核的其他好處包括更多的共享內(nèi)存 /L1 緩存和更好的寄存器。
如果我們將 TeslaA100GPU 帶寬與 TeslaV100 GPU 帶寬相比較,我們得到的速度提升為 1555/900 = 1.73 倍。此外,我希望從更大的共享內(nèi)存中得到 2-5% 的加速,從改進(jìn)的張量核中得到 1-3% 的加速。這使得速度提升在 1.78 倍和 1.87 倍之間。用類似的推理方法,你就可以估計 Ampere 系列其他 GPU 與 TeslaV100 相比的速度提升。
Ampere 速度的實際估計
假設(shè)我們有針對一種 GPU 架構(gòu)的估計,如 Ampere、Turing 或 Volta,我們就可以很容易地將這些結(jié)果推到相同架構(gòu) / 系列的其他 GPU 上。幸運的是,NVIDIA 已經(jīng)在廣泛的計算機(jī)視覺和自然語言理解任務(wù)中對 A100 和 V100 進(jìn)行了基準(zhǔn)測試。遺憾的是,NVIDIA 使用了不同的批次大小和 GPU 數(shù)量,使得這些數(shù)值無法直接進(jìn)行比較,從而得出有利于 A100 的結(jié)果。所以,在某種意義上,這些基準(zhǔn)數(shù)據(jù)部分是真實的,部分是市場數(shù)據(jù)。一般來說,你可能會認(rèn)為,更大的批次大小才公平,因為 A100 有更多的內(nèi)存,但是為了比較 GPU 架構(gòu),我們應(yīng)該評估批次大小相同時的無偏內(nèi)存性能。
為了得到無偏估計,我們可以通過兩種方式對 V100 和 A100 結(jié)果進(jìn)行縮放:
(1)考慮批次大小差異,(2)考慮使用 1 個 GPU 和 8 個 GPU 的差異。幸運的是,我們能在 NVIDIA 提供的數(shù)據(jù)中找到對這兩種偏差的估計。
批次大小增加一倍使吞吐量增加 13.6%(CNN,以每秒圖像數(shù)為單位)。我在 RTX Titan 上針對同樣的問題測試了 Transformer,驚奇地發(fā)現(xiàn)了同樣的結(jié)果:13.5%——這似乎是一個可靠的估計。
當(dāng)我們將網(wǎng)絡(luò)在更多的 GPU 上并行化時,由于一些網(wǎng)絡(luò)開銷,我們會損失性能。與 V100 8x GPU 系統(tǒng)(NVLink 2.0)相比,A100 8x GPU 系統(tǒng)有更好的網(wǎng)絡(luò)(NVLink 3.0)——這是另一個令人困惑的因素。直接查看 NVIDIA 的數(shù)據(jù),我們可以發(fā)現(xiàn),對于 CNN 來說,8x A100 系統(tǒng)比 8x V100 系統(tǒng)開銷低 5%。這意味著,從 1x A100 到 8xA100 可以獲得 7 倍的速度提升,而從 1x V100 到 8xA100 可以獲得 6.67 倍。對于 Transformer 來說,這個數(shù)值是 7%。
使用這些數(shù)據(jù),我們可以從 NVIDIA 提供的直接數(shù)據(jù)中估算其對于一些特定深度學(xué)習(xí)架構(gòu)的速度提升。與 Tesla V100 相比,Tesla A100 可以提供以下速度提升:
- SE-ResNeXt101:1.43 倍
- Masked-R-CNN:1.47 倍
- Transformer(12 層, 機(jī)器翻譯, WMT14 en-de):1.70 倍
因此,對于計算機(jī)視覺來說,這些數(shù)值比理論估計要低一些。這可能是由于張量維數(shù)較小,準(zhǔn)備矩陣乘法(如 img2col 或快速傅里葉變換(FFT))所需的操作開銷,或者操作無法充分利用 GPU(最后的層通常相對較小)。它也可以是特定架構(gòu)的工件(分組卷積)。
Transformer 實際估計值與理論估計值非常接近。這可能是因為大型矩陣的算法非常簡單。我將使用這些實際的估計來計算 GPU 的成本效率。
估計中可能存在的偏差
上面是對 A100 和 V100 的對比估計。過去,NVIDIA“游戲”GPU RTX 出現(xiàn)了性能偷偷下降的問題:(1)降低張量核利用率,(2)風(fēng)扇散熱,(3)禁用對等 GPU 傳輸。與 Ampere A100 相比,RT 30 系列可能有未公布的性能下降。有了消息,我會更新這篇博文。
Ampere / RTX 30 系列的其他考慮因素
要點:
- Ampere 可以用于稀疏網(wǎng)絡(luò)訓(xùn)練,它最高可以將訓(xùn)練速度提高 2 倍。
- 稀疏網(wǎng)絡(luò)訓(xùn)練仍然很少使用,但將使 Ampere 可以經(jīng)受住未來的考驗。
- Ampere 有新的低精度數(shù)據(jù)類型,這使得使用低精度數(shù)值更容易,但不一定比以前的 GPU 更快。
- 新的風(fēng)扇設(shè)計非常棒,如果你的 GPU 之間有間隙的話,但不清楚如果多個 GPU 之間沒有間隙,它們是否能有效冷卻。
- RTX3090 的 3 插槽設(shè)計使得 4x GPU 構(gòu)建成為問題。可能的解決方案是 2 插槽轉(zhuǎn)換或使用 PCIe 擴(kuò)展器。
- 4x RTX 3090 需要的電量比目前市場上任何標(biāo)準(zhǔn)電源單元所能提供的電量都多。
與 NVIDIA Turing RTX 20 系列相比,新的 NVIDIA Ampere RTX30 系列具有額外的優(yōu)點,如稀疏網(wǎng)絡(luò)訓(xùn)練和推理。其他特性,比如新的數(shù)據(jù)類型,更多的是易用性特性,因為它們提供了和 Turing 一樣的性能提升,但是不需要任何額外的編程。
稀疏網(wǎng)絡(luò)訓(xùn)練
Ampere 可以以稠密矩陣的速度進(jìn)行細(xì)粒度結(jié)構(gòu)自動稀疏矩陣乘法。它的工作原理是,如果有一個矩陣,你把它分割成 4 個元素,現(xiàn)在,稀疏矩陣張量核特性允許這 4 個元素中的 2 個為零。這就帶來了 2 倍的速度提升,因為矩陣乘法的帶寬需求減半了。
我以前研究過稀疏網(wǎng)絡(luò)訓(xùn)練。對于我的工作,有一種批評是“你減少了網(wǎng)絡(luò)所需的FLOPS,但卻沒能帶來速度的提升,因為GPU 不能做快速稀疏矩陣乘法。”那好吧,加上張量核的稀疏矩陣乘法特性,我的算法,或者其他的稀疏訓(xùn)練算法,現(xiàn)在在實際的訓(xùn)練中提供了2 倍的速度提升。
雖然這個特性還在實驗階段,訓(xùn)練稀疏網(wǎng)絡(luò)還不是很普遍,但GPU 擁有這個特性意味著你已經(jīng)為未來的稀疏訓(xùn)練做好了準(zhǔn)備。
低精度計算
在我之前的工作中,我已經(jīng)展示過,新數(shù)據(jù)類型可以提高低精度反向傳播的穩(wěn)定性。目前,如果你想要實現(xiàn)16 位浮點數(shù)(FP16)的穩(wěn)定反向傳播,主要問題是普通FP16 數(shù)據(jù)類型只支持[-65504,65504] 區(qū)間內(nèi)的數(shù)值。如果梯度超出這個范圍,就會變成NaN 值。為了防止在FP16 訓(xùn)練期間發(fā)生這種情況,我們通常會進(jìn)行損失縮放,即在反向傳播之前將損失乘以一個小數(shù)值,以防止這種梯度爆炸。
Brain Float 16 格式(BF16)使用更多的位作為指數(shù),這樣,其可能的數(shù)值范圍與 FP32 相同:[-3*10^38,3*10^38]。BF16 的精度較低,但梯度精度對學(xué)習(xí)來說并不是那么重要。所以 BF16 所做的就是你不再需要做任何損失縮放或者擔(dān)心梯度迅速膨脹。因此,我們可以看到使用 BF16 格式時訓(xùn)練穩(wěn)定性的提高,只是精度稍有降低。
這意味著:使用 BF16 精度,訓(xùn)練可能比 FP16 精度更穩(wěn)定,而提供了同等的速度提升。使用 TF32 精度,可以得到接近 FP32 的穩(wěn)定性,接近 FP16 的速度提升。好的方面是,要使用這些數(shù)據(jù)類型,只需將 FP32 替換為 TF32,將 FP16 替換為 BF16——不需要修改代碼!
不過,總的來說,這些新數(shù)據(jù)類型可以被視為懶惰數(shù)據(jù)類型,因為通過一些額外的編程工作(適當(dāng)?shù)膿p失縮放、初始化、歸一化、使用 Apex),使用舊數(shù)據(jù)類型就可以獲得所有這些好處。因此,這些數(shù)據(jù)類型并不提供速度提升,而是提高了低精度訓(xùn)練的易用性。
新的風(fēng)扇設(shè)計 / 散熱問題
RTX 30 系列新的風(fēng)扇設(shè)計包括一個鼓風(fēng)扇和一個推挽式風(fēng)扇。設(shè)計很巧妙,如果你的 GPU 之間有間隙,也會非常有效。然而,如果你把 GPU 堆在一起,就不清楚它們表現(xiàn)如何了。鼓風(fēng)扇將能夠通過遠(yuǎn)離其他圖形處理器的支架排氣,但也沒法說那多有效,因為鼓風(fēng)扇的設(shè)計和以前不同。在一個 4 PCIe 插槽設(shè)置中,如果你想購買 1 到 2 個 GPU,那應(yīng)該沒問題。然而,如果你打算同時使用 3 到 4 個 RTX 30 GPU,那么我需要等散熱性能報告出來,了解下是否需要不同的 GPU 冷卻器、PCIe 擴(kuò)展器或其他解決方案。到時候我會更新這篇博文。
為了克服散熱問題,水冷在任何情況下都可以提供一個解決方案。許多廠商為 RTX 3080/RTX 3090 卡提供水冷模塊,即使在 4x GPU 設(shè)置中也能保持低溫。如果你想運行一個 4x GPU 設(shè)置,可以留心下一體化水冷卻解決方案,因為在大多數(shù)桌面情況下散熱器都很難分散開。
冷卻問題的另一個解決方案是購買 PCIe 擴(kuò)展器,并將 GPU 在機(jī)箱內(nèi)分散開。這非常有效,華盛頓大學(xué)的其他博士生和我使用這個設(shè)置都非常成功。那看起來不漂亮,但它可以使你的 GPU 保持涼爽!即使你沒有足夠的空間來將 GPU 分散開,它還是可以幫到你。例如,如果你可以在一個臺式電腦的機(jī)箱中找到空間,那么你或許就可以購買標(biāo)準(zhǔn)的 3 槽寬 RTX 3090,并在機(jī)箱中使用 PCIe 擴(kuò)展器來把它們分散開。這樣,你就可以通過一個簡單的解決方案解決了 4x RTX 3090 設(shè)置中的空間問題和冷卻問題。
3 插槽設(shè)計和電量問題
RTX 3090 是一個 3 插槽 GPU,所以你不能在 4x 設(shè)置中使用 NVIDIA 的默認(rèn)風(fēng)扇設(shè)計。這是合理的,因為它運行在 350W TDP 下,在多 GPU 2 插槽設(shè)置中很難降溫。RTX 3080 運行在 320W TDP 下只稍好一點,而冷卻一個 4x RTX 3080 設(shè)置也會非常困難。
在 4x RTX 3090 設(shè)置下為一個 4x350w = 1400W 系統(tǒng)供電也很困難。1600W 的供電單元(PSU)很容易獲得,但只有 200W 是給 CPU 供電,主板用電可能太緊。只有在元件獲得充分利用的情況下,才會達(dá)到最大電量,而在深度學(xué)習(xí)中,CPU 通常只處于弱負(fù)載狀態(tài)。這樣,一個 1600W 的 PSU 就可以很好地為一個 4x RTX 3080 構(gòu)建供電,但是對于一個 4x RTX 3090 構(gòu)建,最好是找一個高瓦數(shù)的 PSU(+1700W)。目前,在臺式電腦市場上似乎沒有一個 PSU 超過 1600W。服務(wù)器或加密貨幣挖礦 PSU 可能可以解決這個問題,但可能外形奇怪。
GPU 深度學(xué)習(xí)性能
下面的基準(zhǔn)測試不僅包括 Tesla A100 和 Tesla V100 的基準(zhǔn)測試,我還構(gòu)建了一個適合這些數(shù)據(jù)的模型,以及基于 Titan V、Titan RTX、RTX 2080 Ti 和 RTX 2080 的四個不同的基準(zhǔn)測試。[ 1 , 2 , 3 , 4 ]
除此之外,我還通過在基準(zhǔn)數(shù)據(jù)的這些數(shù)據(jù)點之間進(jìn)行插值擴(kuò)展了 RTX 2070、RTX 2060 卡或是 Quadro RTX 6000&8000 卡。通常,在同一個架構(gòu)中,GPU 的擴(kuò)展與串流多處理器和帶寬成線性關(guān)系,而我的架構(gòu)模型就是以此為基礎(chǔ)。
我只收集了混合精度 FP16 訓(xùn)練的基準(zhǔn)數(shù)據(jù),因為我相信,沒有充分的理由使用 FP32 訓(xùn)練。
與 RTX 2080 Ti 相比,RTX 3090 將卷積網(wǎng)絡(luò)的速度提高了 1.57 倍,將 Transformer 的速度提高了 1.5 倍,與此同時,定價也漲了 15%。因此,與 Turing RTX 20 系列相比,Ampere RTX 30 提供了一個非常實質(zhì)性的改進(jìn)。
GPU 深度學(xué)習(xí)的每美元性能
什么 GPU 能給你帶來最好的回報?這取決于整個系統(tǒng)的成本。如果你有一個成本高昂的系統(tǒng),那么投資更昂貴的 GPU 是有意義的。
這里有三個 PCIe 3.0 構(gòu)建,我用它作為 2/4 GPU 系統(tǒng)的基礎(chǔ)成本,然后再加上 GPU 成本。GPU 成本是 GPU 在亞馬遜和 eBay 上成本的均值。對于新的 Ampere GPU,我使用了定價。結(jié)合上文給出的性能值,就可以得出這些 GPU 系統(tǒng)的每美元性能值。對于 8 GPU 系統(tǒng),我使用 Supermicro barebone 作為基準(zhǔn)成本——這是 RTX 服務(wù)器的行業(yè)標(biāo)準(zhǔn)。請注意,這些柱狀圖沒有考慮內(nèi)存需求。你應(yīng)該首先考慮自己的內(nèi)存需求,然后在圖表中尋找最佳選項。關(guān)于內(nèi)存,這里有一份大致的指南:
- 使用預(yù)訓(xùn)練的 Transformer;從頭開始訓(xùn)練小型 Transformer:>= 11GB
- 在研發(fā) / 生產(chǎn)環(huán)境中訓(xùn)練大型 Transformer 或卷積網(wǎng)絡(luò):>= 24 GB
- 開發(fā)神經(jīng)網(wǎng)絡(luò)原型(Transformer 或卷積網(wǎng)絡(luò)):>= 10 GB
- Kaggle 競賽:>= 8 GB
- 計算機(jī)視覺應(yīng)用:>= 10GB
GPU 推薦
我需要再次強(qiáng)調(diào)的第一件事是:在選擇 GPU 的時候,你需要確保它有足夠的內(nèi)存來完成你想做的事情。選擇 GPU 應(yīng)該按下面的步驟來:
- 我想用 GPU 做什么:Kaggle 競賽、學(xué)習(xí)深度學(xué)習(xí)、破解小項目(GAN 還是大型語言模型?)、計算機(jī)視覺 / 自然語言處理 / 其他領(lǐng)域研究,或者其他什么?
- 我要做的事需要多大內(nèi)存?
- 使用上面的成本 / 性能圖找出滿足內(nèi)存標(biāo)準(zhǔn)的、最適合你的 GPU。
- 對于我選擇的 GPU 有其他的注意事項嗎?例如,如果是 RTX 3090,我能把它裝進(jìn)我的電腦嗎?對于我選的 GPU,我的電源單元(PSU)功率是否足夠?散熱會是問題嗎?或者我能以某種方式有效地冷卻 GPU 嗎?
其中一些細(xì)節(jié)需要你自我反省你想要什么,也許可以研究一下,對于你的興趣領(lǐng)域,其他人使用多大內(nèi)存的 GPU。我可以提供一些指導(dǎo),但無法面面俱到。
我什么時候需要 >= 11 GB 的內(nèi)存?
我之前提到過,如果你使用 Transformer,那么你至少應(yīng)該有 11GB 的內(nèi)存,如果你研究 Transformer,則內(nèi)存 >= 24GB 更好。這是因為之前大多數(shù)經(jīng)過預(yù)訓(xùn)練的模型都有相當(dāng)高的內(nèi)存要求,而且這些模型至少是使用擁有 11 GB 內(nèi)存的 RTX 2080 Ti GPU 進(jìn)行訓(xùn)練。因此,小于 11GB 可能會遇到難以或不可能運行某些模型的情況。
其他需要大量內(nèi)存的領(lǐng)域包括醫(yī)學(xué)成像、一些最先進(jìn)的計算機(jī)視覺模型以及任何有超大圖像的東西(GAN,樣式轉(zhuǎn)換)。
一般來說,如果你想建立一個模型并據(jù)此獲得競爭優(yōu)勢,無論是研究、行業(yè)還是 Kaggle 競賽,額外的內(nèi)存可能會為你帶來優(yōu)勢。
什么時候內(nèi)存可以 <11 GB ?
RTX 3070 和 RTX3080 是非常強(qiáng)大的卡,但它們內(nèi)存有點小。不過,對于許多任務(wù),你不需要那么大的內(nèi)存。
如果你想學(xué)習(xí)深度學(xué)習(xí),那么 RTX 3070 就很完美。這是因為訓(xùn)練大多數(shù)架構(gòu)的基本技能都可以通過將它們縮小一點或者使用小一點的輸入圖像來學(xué)習(xí)。如果我再次學(xué)習(xí)深度學(xué)習(xí),我可能會使用一個 RTX 3070,如果有多余的錢,甚至?xí)枚鄠€。
RTX 3080 是目前為止最具成本效益的卡,因此是原型設(shè)計的理想選擇。對于原型設(shè)計,你想要內(nèi)存最大的,這仍然很便宜。這里所說的原型設(shè)計可以是在任何領(lǐng)域的原型設(shè)計:研究、Kaggle 競賽、為創(chuàng)業(yè)公司出主意 / 設(shè)計模型、試驗研究代碼。對于所有這些應(yīng)用程序,RTX 3080 都是最好的 GPU。
假設(shè)我將領(lǐng)導(dǎo)一個研究實驗室 / 創(chuàng)業(yè)公司。我將把 66-80% 的預(yù)算投入到 RTX 3080 機(jī)器上,20-33% 用于配備了強(qiáng)大水冷裝置的 RTX 3090 機(jī)器。我的想法是,RTX 3080 的成本效益更高,可以作為原型機(jī),通過 slurm 集群設(shè)置來共享。因為原型設(shè)計應(yīng)該以敏捷的方式完成,所以應(yīng)該使用較小的模型和數(shù)據(jù)集。RTX 3080 非常適合這個場景。一旦學(xué)生 / 同事獲得了一個很好的原型模型,他們就可以將原型轉(zhuǎn)移到 RTX 3090 機(jī)器上,并將其擴(kuò)展為更大的模型。
一般建議
總的來說,RTX 30 系列非常強(qiáng)大,我強(qiáng)烈推薦這些 GPU。如前一節(jié)所述,要注意內(nèi)存,還要注意電源和冷卻需求。如果你的 GPU 之間有一個 PCIe 插槽,則冷卻將沒有任何問題。否則,如果使用 RTX 30 卡,請準(zhǔn)備好水冷裝置、PCIe 擴(kuò)展器或有效的鼓風(fēng)扇卡(未來幾周的數(shù)據(jù)將會說明,NVIDIA 的風(fēng)扇設(shè)計是足夠的)。
一般來說,我會推薦 RTX 3090 給任何買得起它的人。不僅是現(xiàn)在,未來 3-7 年它都將是一個非常有效的卡。因此,這是一項將保持強(qiáng)勁增長的好投資。HBM 內(nèi)存三年內(nèi)不太可能變便宜,所以下一個 GPU 只會比 RTX 3090 好 25% 左右。我們可能會在 5-7 年內(nèi)看到廉價的 HBM 內(nèi)存,在那之后,你肯定想要升級。
如果你有多個 RTX 3090,請確保你選擇的解決方案可以提供有效的冷卻和足夠的電力。對于什么樣的設(shè)置合適,我將隨著可用數(shù)據(jù)的增加更新關(guān)于這個問題的博文。
對于沒有強(qiáng)烈競爭需求的企業(yè)(研究公司、Kaggle 競賽、競爭性初創(chuàng)公司),我推薦 RTX 3080。這是一個更經(jīng)濟(jì)的解決方案,并將確保大多數(shù)網(wǎng)絡(luò)的訓(xùn)練都足夠快。如果你使用了合適的內(nèi)存技巧,并且不介意額外進(jìn)行編程,那么現(xiàn)在有足夠的技巧將一個 24GB 的神經(jīng)網(wǎng)絡(luò)適配到 10GB 的 GPU 上。因此,如果你接受一些不確定性和額外的編程,那么 RTX 3080 也可能是比 RTX 3090 更好的選擇。
一般來說,對于學(xué)習(xí)深度學(xué)習(xí)和原型設(shè)計,RTX 3070 也是一種可靠的卡,它比 RTX 3080 便宜 200 美元。如果你負(fù)擔(dān)不起 RTX3080,那么 RTX3070 是最好的選擇。
如果你的預(yù)算有限,而 RTX 3070 又太貴,那么一個二手 RTX 2070 在易趣上大約要 260 美元。現(xiàn)在還不清楚是否會推出 RTX 3060,但如果你的預(yù)算有限,可能也值得再等一段時間。如果定價與 RTX 2060 和 GTX 1060 類似,那么預(yù)計其價格將在 250 美元到 300 美元之間,而且性能相當(dāng)強(qiáng)勁。
GPU 集群建議
GPU 集群設(shè)計高度依賴于用途。對于一個 +1024 GPU 系統(tǒng),網(wǎng)絡(luò)最重要,但在這樣的系統(tǒng)上,如果用戶一次最多只使用 32 個 GPU,投資強(qiáng)大的網(wǎng)絡(luò)基礎(chǔ)設(shè)施就是浪費。在這里,我將使用類似原型推廣的推理,如在 RTX 3080 和 RTX 3090 案例對比中所做的那樣。
一般來說,因為 CUDA 許可協(xié)議,RTX 卡被禁止進(jìn)入數(shù)據(jù)中心。然而,大學(xué)通常可以得到這個規(guī)則的豁免。與英偉達(dá)的人取得聯(lián)系請求豁免權(quán)是值得的。如果你被允許使用 RTX 卡,那么我建議使用配備了 RTX 3080 或 RTX 3090 GPU 的標(biāo)準(zhǔn) Supermicro 8 GPU 系統(tǒng)(如果可以保證有效冷卻)。一組 8x A100 節(jié)點就可以確保在原型化之后有效地“推廣”,特別是在不能保證 8x RTX 3090 服務(wù)器能夠得到充分冷卻的情況下。在這種情況下,我建議使用 A100 而不是 RTX 6000 / RTX 8000,因為 A100 非常劃算,而且是面向未來的。
如果你想在一個 GPU 集群(+256 個 GPU)上訓(xùn)練非常大的網(wǎng)絡(luò),我推薦配備了 A100 GPU 的 NVIDIA DGX SuperPOD 系統(tǒng)。在 +256 GPU 的規(guī)模下,網(wǎng)絡(luò)變得至關(guān)重要。如果你想擴(kuò)展到超過 256 個 GPU,那么你將需要一個高度優(yōu)化的系統(tǒng),把標(biāo)準(zhǔn)解決方案攢在一起就不在有效了。
特別是在 +1024 GPU 的規(guī)模上,市場上唯一具有競爭力的解決方案是谷歌 TPU Pod 和 NVIDIA DGX SuperPod。在這個規(guī)模上,我更喜歡谷歌 TPU Pod,因為他們定制的網(wǎng)絡(luò)基礎(chǔ)設(shè)施似乎優(yōu)于 NVIDIA DGX SuperPod 系統(tǒng)——盡管這兩種系統(tǒng)非常接近。比起 TPU 系統(tǒng),GPU 系統(tǒng)為深度學(xué)習(xí)模型和應(yīng)用提供了更多的靈活性,而 TPU 系統(tǒng)支持更大的模型,并提供更好的伸縮性。所以兩種系統(tǒng)都有各自的優(yōu)點和缺點。
不要買這些 GPU
我不建議購買多個 RTX Founders Editions 或 RTX Titans,除非你有 PCIe 擴(kuò)展器可以解決它們的冷卻問題。它們運行時很容易過熱,其性能將遠(yuǎn)遠(yuǎn)低于上文圖表中的數(shù)值。4x RTX 2080 Ti Founders Editions GPU 將很快超過 90C,此時,其內(nèi)核的時鐘頻率會降低,運行速度將比適當(dāng)冷卻的 RTX 2070 GPU 更慢。
我不建議購買 Tesla V100 或 A100,除非你是被迫購買的(禁止 RTX 數(shù)據(jù)中心策略的公司),或者你想在一個巨大的 GPU 集群上訓(xùn)練非常大的網(wǎng)絡(luò)——這些 GPU 不是很劃算。
如果你能買得起更好的卡,就不要購買 GTX 16 系列。這些卡沒有張量核,因此,深度學(xué)習(xí)性能相對較差。相比 GTX 16 系列,我寧可選擇二手的 RTX 2070 / RTX 2060 / RTX 2060 Super。如果你差錢,那 GTX 16 系列也算是個不錯的選擇。
什么情況下最好不要購買新的 GPU?
如果你已經(jīng)擁有 RTX 2080 Tis 或更好的 GPU,升級到 RTX 3090 可能就沒有意義。你的 GPU 已經(jīng)很好了,使用新推出的高能耗 RTX 30 卡,你需要為 PSU 和冷卻問題擔(dān)憂,而性能的提升卻微不足道——不值得。
我想要從 4x RTX 2080 Ti 升級到 4x RTX 3090 的唯一原因是,我在研究非常大的 Transformer 或其他高度依賴計算的網(wǎng)絡(luò)訓(xùn)練。但是,如果內(nèi)存是問題,在升級到 RTX 3090 之前,你可以首先考慮一些內(nèi)存技巧,以便在 4x RTX 2080 Tis 上適配大模型。
如果你有一個或多個 RTX 2070 GPU,升級前要三思。這些都是很好的 GPU。如果你發(fā)現(xiàn)自己經(jīng)常受限于 8GB 的內(nèi)存,那么可以在 eBay 上轉(zhuǎn)手出售這些 GPU 并獲得 RTX 3090。這一推論也適用于許多其他 GPU:如果內(nèi)存緊張,那么升級就是對的。
問 & 答 & 誤解
要點:
- PCIe 4.0 和 PCIe 通道在 2x GPU 設(shè)置中并不重要。對于 4x GPU 設(shè)置,它們也不是特別重要。
- RTX 3090 和 RTX 3080 的冷卻會是個問題。使用水冷卡或 PCIe 擴(kuò)展器。
- NVLink 沒用,只對 GPU 集群有用。
- 你可以在一臺計算機(jī)中使用不同的 GPU 類型(如 GTX 1080 + RTX 2080 + RTX 3090),但你無法有效地將它們并行。
- 在兩臺以上的機(jī)器上并行訓(xùn)練,你需要 Infiniband +50Gbit/s 的網(wǎng)絡(luò)。
- AMD CPU 比 Intel CPU 便宜,而 Intel CPU 幾乎沒有任何優(yōu)勢。
- 盡管做出了非常大的努力,但由于缺少社區(qū)和張量核,至少在 1-2 年內(nèi) AMD GPU+ ROCm 可能都無法與 NVIDIA 競爭。
- 如果你使用 GPU 的時間不到一年,那么云 GPU 是有幫助的。除此之外,臺式機(jī)是更便宜的解決方案。
我需要 PCIe 4.0 嗎?
一般來說,不需要。如果你有一個 GPU 集群,PCIe 4.0 很有用。如果你有一臺 8x GPU 機(jī)器,也還可以,但除此之外,它就沒有多大好處了。它可以幫助實現(xiàn)更好的并行化和更快的數(shù)據(jù)傳輸。數(shù)據(jù)傳輸在任何應(yīng)用程序中都不是瓶頸。在計算機(jī)視覺中,在數(shù)據(jù)傳輸管道中,數(shù)據(jù)存儲可能是瓶頸,而 PCIe 從 CPU 到 GPU 的傳輸則不是瓶頸。所以,對于大多數(shù)人來說,沒有真正的理由去安裝 PCIe 4.0。在 4 GPU 設(shè)置中,這樣做的好處是,并行度可能會提高 1-7%。
我需要 8x/16x PCIe 通道嗎?
和 PCIe 4.0 一樣,一般來說,不需要。并行化和快速數(shù)據(jù)傳輸需要 PCIe 通道,但這幾乎不會成為瓶頸。在 4x 通道上運行 GPU 就很好,特別是當(dāng)你只有 2 個 GPU 的時候。對于 4 GPU 設(shè)置,我更希望每個 GPU 有 8 個通道,但如果你是在 4 個 GPU 上并行運行的話,那么 4 個通道可能只會降低 5-10% 的性能。
如果每個 RTX 3090 需要 3 個 PCIe 插槽,我該如何安裝 4x RTX 3090?
你需要一個雙插槽變體,或者你可以嘗試使用 PCIe 擴(kuò)展器布置它們。除了空間之外,你還需要考慮冷卻問題和一個合適的 PSU。最易于管理的解決方案似乎是,4x RTX 3090 EVGA Hydro Copper 加一個定制的水冷循環(huán)。這可以使卡處于低溫狀態(tài)。EVGA 生產(chǎn) Hydro Copper 版本的 GPU 已有多年,我認(rèn)為你可以信任其水冷式 GPU 的質(zhì)量。不過,可能還有其他更便宜的變體。
PCIe 擴(kuò)展器也可以解決空間和冷卻問題,但是你需要確保你的機(jī)箱中有足夠的空間來布置 GPU。一定要確保你的 PCIe 擴(kuò)展器足夠長!
我該如何冷卻 4x RTX 3090 或 4x RTX 3080?
請看上節(jié)。
我可以使用多個不同類型的 GPU 嗎?
是的,你可以!但是不同類型的 GPU 無法有效地并行。我認(rèn)為,一個 3x RTX 3070 加一個 RTX 3090 就夠原型推廣了。另一方面,在 4x RTX 3070 GPU 上并行會非常快,如果你能將模型放到這些 GPU 上的話。除此之外,我能想到的你希望這樣做的唯一原因是,你希望繼續(xù)使用舊 GPU。這沒問題,但是在那些 GPU 上并行會比較低效,因為最快的 GPU 會等待最慢的 GPU 到達(dá)一個同步點(通常是梯度更新)。
NVLink 是什么,有用嗎?
一般來說,NVLink 是沒有用的。NVLink 是 GPU 之間的高速互連。如果你有一個有 +128 GPU 的 GPU 集群,它就有用了。否則,與標(biāo)準(zhǔn) PCIe 傳輸相比,它幾乎不會產(chǎn)生任何好處。
我錢不夠,即使是你推薦的最便宜的 GPU。我能做什么?
當(dāng)然是買二手 GPU。二手 RTX 2070(400 美元)和 RTX 2060(300 美元)都很棒。如果你負(fù)擔(dān)不起,次佳選項是試著買一個二手的 GTX 1070(220 美元)或 GTX 1070 Ti(230 美元)。如果那還太貴,則可以使用 GTX 980 Ti (6GB 150 美元)或使用 GTX 1650 Super(190 美元)。如果這都太貴的話,最好是使用免費的 GPU 云服務(wù)。通常,這些服務(wù)會有時間限制,之后你就需要付費了。你可以輪流使用不同的服務(wù)和賬戶,直到你有錢購買自己的 GPU。
GPU 的碳排放量是多少?我如何使用 GPU 而又不污染環(huán)境?
我構(gòu)建了一個碳計算器,供學(xué)者們計算自己的碳排放量(從航班到會議 + GPU 時間的碳排放)。該計算器也可以用來計算純粹的GPU 碳排放量。你會發(fā)現(xiàn),GPU 產(chǎn)生的碳比國際航班多得多。因此,你應(yīng)該確保你有一個綠色能源,如果你不想有一個天文數(shù)字的碳排放量。如果我們這個地區(qū)沒有電力供應(yīng)商提供綠色能源,最好的辦法就是購買碳抵消。許多人對碳抵消持懷疑態(tài)度。他們工作嗎?他們是在詐騙嗎?
我相信,在這種情況下,懷疑主義是有害的,因為什么都不做比冒著被騙的風(fēng)險更有害。如果你擔(dān)心被騙,只需投資一個抵消投資組合來最小化風(fēng)險。
大約十年前,我參與了一個產(chǎn)生碳抵消的項目。聯(lián)合國官員跟蹤了整個過程,他們獲得了干凈的數(shù)字?jǐn)?shù)據(jù),并對項目現(xiàn)場進(jìn)行了實地檢查。在這種情況下產(chǎn)生的碳抵消是非常可靠的。我相信,其他許多項目也有類似的質(zhì)量標(biāo)準(zhǔn)。
碳計算器: https://github.com/TimDettmers/carbonneutral
在兩臺機(jī)器之間并行需要什么?
如果你想要跨機(jī)器并行,那么你將需要 +50Gbits/s 的網(wǎng)卡來提高速度。關(guān)于這個問題,我有一篇有點過時的博文。現(xiàn)在,我建議至少有一個EDR Infiniband 設(shè)置,這意味著網(wǎng)卡至少有50 GBit/s 的帶寬。兩張帶線纜的EDR 卡在eBay 上大約賣500 美元。
稀疏矩陣乘法特性適用于一般的稀疏矩陣嗎?
似乎并非如此。稀疏矩陣的粒度需要滿足每4 個元素有2 個零值元素,也就是說,稀疏矩陣需要是高度結(jié)構(gòu)化的。可以稍微調(diào)整下算法,這涉及到將4 個值組合成2 個值的壓縮表示,但這也意味著Ampere GPU 不可能實現(xiàn)任意稀疏矩陣的精確乘法。
我需要Intel CPU 來支持多GPU 設(shè)置嗎?
我不推薦Intel CPU,除非你在Kaggle 競賽中大量使用了CPU(CPU 上的大量線性代數(shù)運算)。即使是在Kaggle 競賽中,AMD CPU 仍然很好。在深度學(xué)習(xí)方面,AMD GPU 比Intel GPU 更便宜也更好。對于4x GPU 構(gòu)建,我的首選CPU 是Threadripper。我們在大學(xué)里用Threadripper 構(gòu)建了幾十個系統(tǒng),它們都工作得很好——還沒有人抱怨。對于8x GPU 系統(tǒng),我通常會選擇供應(yīng)商熟悉的CPU。在8x 系統(tǒng)中,CPU 和PCIe/ 系統(tǒng)可靠性比單純的性能或成本效益更重要。
我應(yīng)該等待RTX 3090 Ti 嗎?
目前還不清楚是否會有RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。GTX XX90 的名稱通常是留給雙GPU 卡,所以NVIDIA 是偏離了這一趨勢。從價格和性能來看,似乎RTX 3090 是一個取代RTX 3080 Ti 的名字。但是所有這些都是推測。如果你對這個問題感興趣,我建議你對Rumor Mill 上的新聞跟蹤一兩個月,如果你什么都沒有看到,就不太可能出現(xiàn)RTX 3080 Ti / RTX 3090 Ti / RTX Ampere Titan。
機(jī)箱設(shè)計對散熱有影響嗎?
沒有。只要GPU 之間有一個小間隙,GPU 的冷卻通常就沒問題。機(jī)箱設(shè)計可以提供1 到3 攝氏度的好處,而GPU 之間的間隙將提供10 到30 攝氏度的改進(jìn)。歸根結(jié)底,如果GPU 之間有間隙,冷卻就沒問題。如果GPU 之間沒有間隙,就需要合適的冷卻器設(shè)計(鼓風(fēng)扇)或其他解決方案(水冷、PCIe 擴(kuò)展器),但無論哪種情況,機(jī)箱設(shè)計和機(jī)箱風(fēng)扇都不很重要。
AMD GPUs + ROCm 能趕上 NVIDIA GPUs + CUDA 嗎?
1-2 年內(nèi)趕不上。這涉及三個方面的問題:張量核、軟件和社區(qū)。
就純硅而言,AMD GPU 很棒:優(yōu)秀的 FP16 性能,優(yōu)秀的內(nèi)存帶寬。然而,由于缺乏張量核或等效特性,其深度學(xué)習(xí)性能與 NVIDIA GPU 相比較差。封裝的低精度數(shù)學(xué)函數(shù)不能解決這個問題。沒有這個硬件特性,AMD GPU 將永遠(yuǎn)不會有競爭力。有傳言稱,AMD 計劃在 2020 年推出某種具有張量核等效特性的數(shù)據(jù)中心卡,但此后就沒有新的數(shù)據(jù)出現(xiàn)了。擁有張量核等效特性的數(shù)據(jù)中心卡意味著很少有人能夠負(fù)擔(dān)得起這樣的AMD GPU,這將給NVIDIA 帶來競爭優(yōu)勢。
假設(shè)AMD 在未來引入了類似于張量核的硬件特性。然后很多人會說,“但是沒有軟件針對AMD GPU!”我該怎么使用它們呢?這更多的是一種誤解。AMD 軟件ROCm 已經(jīng)發(fā)展很長一段時間了,并且PyTorch 提供了優(yōu)秀的支持。雖然我沒有看到很多針對AMD GPU+ PyTorch 的經(jīng)驗報告,但所有的軟件功能已整合。看起來,不管你選擇什么網(wǎng)絡(luò),都可以很好地在AMD GPU 上運行。所以,在這方面,AMD 已經(jīng)走過了一段很長的路,這個問題或多或少得到了解決。
然而,如果軟件問題和缺少張量核的問題已得到了解決,AMD 還有一個問題:缺少社區(qū)。如果你使用NVIDIA GPU 遇到問題,你可以在谷歌查詢這個問題并找到解決方案。這讓人們對NVIDIA GPU 產(chǎn)生了很大的信任。你有基礎(chǔ)設(shè)施,使使用NVIDIA GPU 變得很容易(任何深度學(xué)習(xí)框架都可以使用,任何科學(xué)問題都得到很好的支持)。你可以輕松地使用NVIDIA GPU(比如apex)。你很容易就可以找到NVIDIA GPU 和編程專家,而我認(rèn)識的AMD GPU 專家就少得多。
在社區(qū)方面,AMD 和NVIDIA 的對比有點像Julia 和Python。Julia 有很大的潛力,很多人會說,它是科學(xué)計算的高級編程語言。然而,與Python 相比,Julia 很少被使用。這是因為Python 社區(qū)非常強(qiáng)大。Numpy、SciPy、Pandas 都是功能強(qiáng)大的軟件包,有很多人在使用它們。這與NVIDIA vs AMD 的問題非常相似。
因此,在引入張量核等效特性(1/2 到1 年?)并圍繞ROCm 建立一個強(qiáng)大的社區(qū)(2 年?)之前,AMD 很可能都無法趕上NVIDIA。AMD 總是會在特定的子領(lǐng)域(如加密貨幣挖掘、數(shù)據(jù)中心)搶奪一部分市場份額。不過,在深度學(xué)習(xí)領(lǐng)域,至少幾年的時間內(nèi),NVIDIA 可能會保持其壟斷地位。
什么時候使用云GPU?什么時候使用專用的GPU 臺式機(jī)/ 服務(wù)器?
經(jīng)驗法則:如果你希望做深度學(xué)習(xí)超過一年,那就買一臺GPU 臺式機(jī)。否則,最好使用云實例。
最好自己算一下。例如,如果對比下配備了1x V100 的AWS V100 spot 實例和一個只有一塊RTX 3090 的臺式機(jī)(性能類似),那么對于臺式機(jī),我們要花2200 美元( 2-GPU Barebone + RTX 3090)。此外,假設(shè)你在美國,你需要額外支付每千瓦 / 時 0.12 美元的電費,而 AWS 實例是每小時 2.14 美元。
以每年 15% 的利用率來說,臺式機(jī)每年消耗的電量為:
(350 Watt (GPU) + 100 Watt (CPU))*0.15 (utilization) * 24 hours * 365 days = 591 kW/h
即每年 591kW/h,需額外支付 71 美元。
在利用率為 15%(一天中 15% 的時間使用云實例)的情況下,臺式機(jī)和云實例的盈虧平衡點大約是 300 天(2311 美元 vs 2270 美元):
2.14/h∗0.15(utilization)∗24hours∗300days=2.14/h∗0.15(utilization)∗24hours∗300days=2,311
因此,如果你希望在 300 天后繼續(xù)運行深度學(xué)習(xí)模型,最好是購買一臺臺式機(jī),而不是使用 AWS spot 實例。
對任何云服務(wù),你都可以進(jìn)行類似的計算,以決定是使用云服務(wù)還是臺式機(jī)。
下面是常見的利用率:
- 博士生個人臺式機(jī):< 15%
- 博士生 slurm GPU 集群:> 35%
- 企業(yè) slurm 研究集群:> 60%
一般來說,對于那些思考前沿想法比開發(fā)實用產(chǎn)品更重要的職業(yè)來說,利用率較低。有些領(lǐng)域的利用率很低(可解釋性研究),而其他領(lǐng)域的利用率則高得多(機(jī)器翻譯、語言建模)。一般來說,個人機(jī)器的利用率幾乎總是被高估了。大多數(shù)個人系統(tǒng)的利用率通常在 5-10% 之間。這就是為什么我強(qiáng)烈推薦 slurm GPU 集群給研究小組和公司,而不是個人的桌面 GPU 機(jī)器。