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






