《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > RTX 2080時(shí)代,如何打造屬于自己的深度學(xué)習(xí)機(jī)器

RTX 2080時(shí)代,如何打造屬于自己的深度學(xué)習(xí)機(jī)器

2018-12-17

深度學(xué)習(xí)計(jì)算密集型的領(lǐng)域,搭建深度學(xué)習(xí)系統(tǒng)時(shí),最糟糕的事情之一就是把錢浪費(fèi)在并非必需的硬件上。本文中,華盛頓大學(xué)博士生 Tim Dettmers 將一步步帶你了解搭建一個(gè)高性能經(jīng)濟(jì)系統(tǒng)所需的硬件。


作者曾在 2015 年寫過一版深度學(xué)習(xí)硬件推薦的文章,但如今計(jì)算機(jī)硬件的迭代速度非???,因此作者在近期將原來的文章進(jìn)行了大幅改動(dòng),寫出了第二版深度學(xué)習(xí)硬件推薦。


參見:深度 | 史上最全面的深度學(xué)習(xí)硬件指南


以下是博客原文的編譯,機(jī)器之心摘取了 GPU、RAM、CPU、硬盤、主板部分的全部?jī)?nèi)容,并簡(jiǎn)單總結(jié)了剩余部分(包括電源、散熱、機(jī)箱和顯示器),同時(shí)在最后給出了結(jié)論清單,具體細(xì)節(jié)還請(qǐng)參閱原文。


深度學(xué)習(xí)硬件推薦第二版:研究并行化深度學(xué)習(xí)過程中,我搭建了 7 個(gè)深度學(xué)習(xí)工作站,為此,我需要仔細(xì)挑選硬件。盡管經(jīng)過了仔細(xì)的研究和邏輯推理,但是,挑選硬件時(shí),我還是會(huì)犯相當(dāng)多的錯(cuò)誤,當(dāng)我在實(shí)踐中應(yīng)用集群時(shí),錯(cuò)誤就會(huì)顯現(xiàn)出來。下面就是我想分享的所得,希望你們不會(huì)再掉入同樣的陷阱。


GPU


在這篇博文中,我們假設(shè)你會(huì)利用 GPU 來進(jìn)行深度學(xué)習(xí)。如果你正在構(gòu)建或升級(jí)你的深度學(xué)習(xí)系統(tǒng),忽視 GPU 是不理智的。GPU 正是深度學(xué)習(xí)應(yīng)用的核心要素——計(jì)算性能提升,收獲巨大,不可忽視。


我在另一篇博客中討論了 GPU 選擇推薦,對(duì)于深度學(xué)習(xí)系統(tǒng)而言,GPU 的選擇可能是最關(guān)鍵的部分。在選擇 GPU 的時(shí)候,人們最可能犯的三個(gè)錯(cuò)誤是:(1)性價(jià)比低;(2)沒有足夠內(nèi)存;(3)散熱效果差。


博客地址:http://timdettmers.com/2018/11/05/which-gpu-for-deep-learning/


對(duì)于性價(jià)比高的 GPU,我一般推薦 RTX 2070 或 RTX 2080 Ti。如果你使用了這些顯卡,你應(yīng)該使用 16 位的模型。否則,在 eBay 上購買 GTX 1070、GTX 1080 和 GTX 1080 Ti 會(huì)更合適,你可以在這些顯卡上使用 32 位模型(但不能是 16 位模型)。


在選擇 GPU 的時(shí)候,要注意內(nèi)存需求問題。RTX 顯卡可以運(yùn)行 16 位模型,相比 GTX 顯卡,可以用相同的內(nèi)存訓(xùn)練兩倍大的模型。由于其內(nèi)存優(yōu)勢(shì),學(xué)會(huì)如何使用 RTX 顯卡高效運(yùn)行 16 位模型可以帶給你很多好處。一般而言,內(nèi)存需求狀況如下所示:


追求當(dāng)前最佳結(jié)果(SOTA)的 AI 實(shí)驗(yàn)研究:≥11GB;

探究有趣架構(gòu)的 AI 實(shí)驗(yàn)研究:≥8GB;

任何其它研究:8GB;

Kaggle:4-8GB;

初創(chuàng)公司:8GB(但需根據(jù)模型尺寸的具體用例做調(diào)整);

公司:8GB 用于原型設(shè)計(jì),11GB 用于訓(xùn)練。


另一個(gè)需要注意的問題是冷卻,尤其當(dāng)你購買 RTX 顯卡的時(shí)候。如果你想將 GPU 放入 PCIe 插槽中,讓它們彼此相鄰放置,確保能為 GPU 提供鼓風(fēng)式風(fēng)扇。否則你可能會(huì)遇到溫度問題,你的 GPU 將變慢(約 30%),而且會(huì)更早報(bào)廢。

 

微信圖片_20181217185250.jpg


你能否識(shí)別出因性能不佳而出現(xiàn)故障的硬件部分?是其中一個(gè) GPU?或者其實(shí)是 CPU 出現(xiàn)故障?


RAM


選擇 RAM 時(shí)會(huì)犯的最大錯(cuò)誤是 RAM 的時(shí)鐘頻率太高。第二個(gè)錯(cuò)誤是選擇的 RAM 不夠,導(dǎo)致不能獲得連續(xù)的原型設(shè)計(jì)經(jīng)驗(yàn)。


所需 RAM 時(shí)鐘頻率


RAM 時(shí)鐘頻率只是一種營銷手段,RAM 生產(chǎn)公司想以此誘惑你購買「更快的」RAM,但實(shí)際上這并不能帶來多少性能增益。可以在「Does RAM speed REALLY matter?」這個(gè)視頻中看到最佳的解釋。此外,你要知道 RAM 速度與快速 CPU RAM->GPU RAM 傳輸幾乎無關(guān)。這是因?yàn)椋?)如果你使用了固定內(nèi)存,模型的樣本批量不需要 CPU 參與就可以被轉(zhuǎn)移到 GPU,以及(2)如果你不使用固定內(nèi)存,快速 RAM 相對(duì)于慢速 RAM 的性能提升約為 0-3%,所以把錢花在別的地方!


RAM 大小


RAM 大小不會(huì)影響深度學(xué)習(xí)性能。但是,它可能會(huì)阻礙你輕松運(yùn)行 GPU 代碼(無需交換到磁盤)。你需要有足夠的內(nèi)存來使用 GPU。這意味著你應(yīng)該至少擁有與最大 GPU 匹配的 RAM 量。例如,如果你有一個(gè) 24 GB 內(nèi)存的 Titan RTX,你應(yīng)該至少有 24 GB 的 RAM。但是,如果你有多塊 GPU,則不一定需要更多 RAM。


這種「在 RAM 中匹配最大 GPU 內(nèi)存」策略的問題在于,如果處理大型數(shù)據(jù)集,你的 RAM 可能仍然不夠。所以最好的策略是匹配你的 GPU,如果覺得 RAM 不夠,再買多些就是了。


心理學(xué)告訴我們,注意力是一種隨著時(shí)間推移而耗盡的資源。RAM 是為數(shù)不多的可以讓你節(jié)省集中資源以解決更困難的編程問題的硬件之一。如果你有更多的 RAM,你可以將注意力集中在更緊迫的問題上,而不是花費(fèi)大量時(shí)間來解決 RAM 瓶頸。有了足夠的 RAM,你可以避免這些瓶頸,節(jié)省時(shí)間并提高效率,解決更緊迫的問題。特別是在 Kaggle 比賽中,我發(fā)現(xiàn)額外的 RAM 對(duì)于特征工程非常有用。因此,如果你有錢并需要進(jìn)行大量預(yù)處理,那么額外的 RAM 可能是一個(gè)不錯(cuò)的選擇。因此,根據(jù)此策略,你需要現(xiàn)在就購買更多、更便宜的 RAM,而不是等以后。


CPU


人們通常犯的主要錯(cuò)誤是將太多的注意力放在了 CPU 的 PCIe 通道上。你不用太在意 PCIe 通道。你應(yīng)該查看 CPU 和主板的組合能否支持你想要安裝的 GPU 數(shù)量。第二個(gè)常見錯(cuò)誤是選擇太強(qiáng)大的 CPU。


CPU 和 PCI-Express


人們對(duì) PCIe 通道過于執(zhí)著。然而,事實(shí)上它對(duì)深度學(xué)習(xí)的性能幾乎沒有影響。如果你有單個(gè) GPU,PCIe 通道只是用來快速把數(shù)據(jù)從 CPU RAM 轉(zhuǎn)移到 GPU RAM。用 16 個(gè)通道傳輸批量為 32 張圖像(32x225x225x3)的 ImageNet 到 32 位模型需要 1.1 毫秒,用 8 個(gè)通道需要 2.3 毫秒,用 4 個(gè)通道需要 4.5 毫秒。這些都只是理論數(shù)字,在實(shí)踐中 PCIe 通道傳輸數(shù)據(jù)的速度通常只有一半,但這仍然很快!PCIe 通道的延遲通常在納秒范圍內(nèi),因此可以忽略不計(jì)。


綜合起來,將批量為 32 的 ImageNet 圖像傳輸?shù)?ResNet-152 的時(shí)間如下所示:


正向傳遞和反向傳遞:216 毫秒


16 個(gè) PCIe 通道的 CPU->GPU 傳輸:大約 2 毫秒(理論上為 1.1 毫秒)

8 個(gè) PCIe 通道的 CPU->GPU 傳輸:大約 5 毫秒(理論上為 2.3 毫秒)

4 個(gè) PCIe 通道的 CPU->GPU 傳輸:大約 9 毫秒(理論上為 4.5 毫秒)


因此,將 PCIe 通道從 4 個(gè)增加到 16 個(gè)將會(huì)帶來大約 3.2% 的性能提升。但是,如果你使用固定內(nèi)存來運(yùn)行 PyTorch 的數(shù)據(jù)加載器,那你將獲得 0% 的性能提升。所以,如果你使用的是單個(gè) GPU,就不要把錢浪費(fèi)在 PCIe 通道上了。


當(dāng)你選擇 CPU PCIe 通道和主板 PCIe 通道時(shí),確定你選擇的組合能夠支持你想要安裝的 GPU 數(shù)量。如果你買的主板支持 2 個(gè) GPU,而你最終也想安裝 2 個(gè) GPU,那就確保你買的 CPU 支持你安裝 2 個(gè) GPU,但無需查看 PCIe 通道數(shù)。


PCIe 通道和多 GPU 并行化


如果你使用數(shù)據(jù)并行化在多 GPU 上訓(xùn)練網(wǎng)絡(luò),PCIe 通道是否重要?關(guān)于這個(gè)我在 ICLR2016 年發(fā)表過論文《Title:8-Bit Approximations for Parallelism in Deep Learning》。我可以告訴你,如果你有 96 個(gè) GPU,那 PCIe 通道數(shù)真的很重要。但是,如果你有不超過 4 個(gè) GPU,那 PCIe 通道數(shù)就沒那么重要了。如果在 2-3 個(gè) GPU 上進(jìn)行并行化處理,那你完全不必在意 PCIe 通道。如果你有 4 個(gè) GPU,則每個(gè) GPU 需要 8 個(gè) PCIe 通道的支持(總共需要 32 個(gè) PCIe 通道)。根據(jù)以往的經(jīng)驗(yàn),幾乎沒有人會(huì)運(yùn)行超過 4 個(gè) GPU,所以完全沒必要額外花錢獲得更多的 PCIe 通道,那不值當(dāng)!


所需 CPU 核心數(shù)


為了更好地選擇 CPU,首先要了解它以及它與深度學(xué)習(xí)的關(guān)系。CPU 能為深度學(xué)習(xí)做什么?當(dāng)你在 GPU 上運(yùn)行深度網(wǎng)絡(luò)時(shí),CPU 幾乎不做計(jì)算。它主要干兩件事:1)啟動(dòng) GPU 函數(shù)調(diào)用;2)執(zhí)行 CPU 函數(shù)。


到目前為止,CPU 最有用的應(yīng)用是數(shù)據(jù)預(yù)處理。有兩種不同的通用數(shù)據(jù)處理策略,它們有不同的 CPU 需求。


第一種策略是在訓(xùn)練網(wǎng)絡(luò)時(shí)進(jìn)行預(yù)處理:


循環(huán):


1. 加載小批量

2. 預(yù)處理小批量

3. 在小批量上訓(xùn)練


第二種策略是在開始任何訓(xùn)練之前進(jìn)行預(yù)處理:


1. 預(yù)處理數(shù)據(jù)

2. 循環(huán):

  a. 加載預(yù)處理的小批量

  b. 在小批量上訓(xùn)練


對(duì)于第一種策略,具有多核的高性能 CPU 可以顯著提升性能。對(duì)于第二種策略,你不需要非常好的 CPU。至于第一個(gè)策略,我推薦每個(gè) GPU 至少 4 個(gè)線程——通常每個(gè) GPU 兩個(gè)核心。對(duì)此我還沒有做硬件測(cè)試,但每增加一個(gè)核心/GPU,你估計(jì)會(huì)獲得 0-5% 的性能提升。


至于第二個(gè)策略,我建議每個(gè) GPU 最少 2 個(gè)線程——通常每個(gè) GPU 一個(gè)核心。如果你采用第二個(gè)策略,當(dāng)你增加核心時(shí),性能不會(huì)顯著提升。


所需 CPU 時(shí)鐘頻率(頻率)


當(dāng)人們想到快速的 CPU 時(shí),他們一般最先想到其時(shí)鐘頻率(clock rate)。4GHz 比 3.5GHz 快,是這樣嗎?在比較具有相同架構(gòu)的處理器時(shí),這一般是對(duì)的,例如「第三代酷睿處理器」(Ivy Bridge)。但在比較不同架構(gòu)的處理器時(shí),這個(gè)想法卻沒那么準(zhǔn)確。而且這也并非一直是測(cè)量性能的最好指標(biāo)。


在深度學(xué)習(xí)中,只有很少一部分的計(jì)算會(huì)用 CPU 來完成:增值幾個(gè)變量、評(píng)估幾個(gè)布爾表達(dá)式、在 GPU 或在編程里面調(diào)用幾個(gè)函數(shù)——所有這些會(huì)取決于 CPU 核的頻率。


這種推理似乎是合理的,但當(dāng)我運(yùn)行深度學(xué)習(xí)編程的時(shí)候,CPU 會(huì)有 100% 的使用率,那這是怎么回事兒?為了找出原因,我做了一些 CPU 核頻率降頻的實(shí)驗(yàn)。

微信圖片_20181217185324.jpg


CPU 降頻后在 MNIST 及 ImageNet 的表現(xiàn):使用不同的 CPU 核頻率,將 MNIST 數(shù)據(jù)集運(yùn)行 200 遍或遍歷 1/4 的 ImageNet 數(shù)據(jù)集運(yùn)行作為測(cè)量時(shí)間,我們測(cè)量 CPU 的性能,其中每個(gè) CPU 的最高頻率被定為參照線。對(duì)于比較:在性能上,GTX Titan 比 GTX 680 提升了 15%;GTX 980 比 GTX Titan 提升了 20%;GPU 超頻比任何 GPU 提升了 5%。


請(qǐng)注意,這些實(shí)驗(yàn)是在過時(shí)的硬件上進(jìn)行的,但是,這些結(jié)果對(duì)現(xiàn)在的 CPU/GPU 來說應(yīng)該同樣適用。


硬盤/SSD


硬盤通常不是深度學(xué)習(xí)的瓶頸。但是,也有例外:如果你在需要數(shù)據(jù)時(shí)直接從磁盤讀取,那么一個(gè) 100 MB / s 的硬盤驅(qū)動(dòng)器在批量為 32 的 ImageNet 上花費(fèi)大約 185 毫秒!但是,如果你在使用數(shù)據(jù)之前異步獲取數(shù)據(jù)(例如 torch vision loaders),那么你可以在 185 毫秒內(nèi)加載批量,而在 ImageNet 上大多數(shù)深度神經(jīng)網(wǎng)絡(luò)的計(jì)算時(shí)間約為 200 毫秒。因此,在當(dāng)前仍處于計(jì)算狀態(tài)時(shí)加載下一個(gè)批量,你將不會(huì)面臨任何性能損失。


但是,我推薦使用 SSD 來提高舒適度和工作效率:程序啟動(dòng)和響應(yīng)速度更快,使用大文件進(jìn)行預(yù)處理要快得多。你可以購買 NVMe SSD,與普通 SSD 相比,你將獲得更加流暢的體驗(yàn)。


因此,理想的配置是為數(shù)據(jù)集提供大而緩慢的硬盤驅(qū)動(dòng)器,并使用 SSD 提高生產(chǎn)率和舒適度。


主板


你的主板應(yīng)該擁有足夠的 PCIe 端口來支持你想運(yùn)行的 GPU 數(shù)量(通常最多 4 塊 GPU,即使你有更多的 PCIe 端口);記住大多數(shù) GPU 有兩個(gè) PCIe 端口的寬度,因此如果你想使用多塊 GPU,確保在 PCIe 端口之間有足夠的空間。確保你的主板不僅有 PCIe 端口,同時(shí)還支持你想運(yùn)行的 GPU 的設(shè)置。如果你在 newegg 上搜索選擇的主板并查看規(guī)格頁面上的 PCIe 部分,通??梢哉业较嚓P(guān)信息。


其它設(shè)備


后面作者還介紹了供電單元、冷卻設(shè)備和機(jī)箱等,不過限于篇幅這里只做簡(jiǎn)要的總結(jié),更詳細(xì)的內(nèi)容請(qǐng)查看 Tim Dettmers 的原博客。


1. 電源供應(yīng)設(shè)備(PSU)


一般說來,你需要一個(gè)給你未來所有 GPU 充足供應(yīng)的 PSU。隨著時(shí)間的推移,GPU 通常會(huì)更加高效節(jié)能;因此,盡管其它組件會(huì)需要更換,PSU 會(huì)用很久,一個(gè)好的 PSU 是一個(gè)好的投資。CPU 加上 GPU 所需瓦特,再加上其它組件額外所需的功率(約 10%),我們就能計(jì)算出電力峰值所需瓦特?cái)?shù),再加 10% 作為緩沖就行了。


例如如果你有 4 塊 GPU,每塊 250 瓦特,一塊 CPU 150 瓦特,那么我們至少需要 4×250 + 150 + 100 = 1250 瓦特的 PSU。而我們一般會(huì)再加 10% 左右以作為緩沖,即選擇 1400 瓦特 PSU。


2.CPU 和 GPU 散熱


GPU 空氣散熱:對(duì)于單個(gè) GPU 或者彼此之間具有空隙的多個(gè) GPU(如可以安裝 3-4 個(gè) GPU 的情況下安裝了 2 個(gè))來說,空氣散熱既安全又穩(wěn)定。但是,當(dāng)你冷卻 3-4 個(gè) GPU 時(shí),可能會(huì)犯一個(gè)很大的錯(cuò)誤。在這種情況下空氣散熱的冷卻效果不太好,你要仔細(xì)考慮自己的選擇。


GPU 水冷散熱:對(duì)于多塊 GPU,水冷能確保最強(qiáng)勁的 4 塊 GPU 集群設(shè)置中保持溫度。但相對(duì)而言更貴一些,水冷每塊 GPU 需要花費(fèi)大約 100 美元和一些額外的前期成本(大約 50 美元)。水冷還需要一些額外的工作來組裝計(jì)算機(jī),不過現(xiàn)在有很多詳細(xì)的指南。


所以最后的散熱策略很簡(jiǎn)單,對(duì)于單塊 GPU,空氣散熱是最好的,當(dāng)然也可以添加水冷以提升硬件性能。對(duì)于多塊 GPU,尤其是 GPU 間空隙比較小的設(shè)備,比較建議使用水冷,且你可以嘗試為 GPU 找到一體化(AIO)水冷解決方案。


3. 機(jī)箱


當(dāng)你選擇機(jī)箱時(shí),要確保它能滿足你 GPU 的長度要求,這樣它才能在主板上放穩(wěn)。多數(shù)機(jī)箱都能滿足要求,但如果你選的是一個(gè)小機(jī)箱,就需要多加留心。要核查它的面積和規(guī)格,你也可以嘗試用 google 的圖片搜索引擎,看看能不能找到 GPU 放在上面的圖片。此外,如果你使用定制化的水冷設(shè)備,你需要確保機(jī)箱的空間足夠裝下散熱器。


4. 顯示器


我在我的 3'27 英寸顯示器上付出了可能是我從未有過的大代價(jià),買了幾個(gè)顯示器后,效率提高了很多。如果我只能用一臺(tái)顯示器,那我的效率肯定會(huì)大打折扣。別在這上面和自己過不去,如果你不能有效的運(yùn)轉(zhuǎn)一個(gè)快速的深度學(xué)習(xí)系統(tǒng),那它又有什么用?


總結(jié)


GPU:RTX 2070 、RTX 2080 Ti、GTX 1070、GTX 1080 和 GTX 1080 Ti。


CPU:每個(gè) GPU 1-2 核,這取決于你的數(shù)據(jù)預(yù)處理。只要主頻大于 2GHz,那 CPU 就應(yīng)該支持我們想要運(yùn)行的大量 GPU,PCIe 通道并不是太重要。


RAM:


時(shí)鐘頻率無關(guān)緊要,買更便宜的 RAM;

購入至少和你已有 GPU 內(nèi)存大小相同的 CPU 內(nèi)存;

只有更需要時(shí)才買更多的 RAM;

如果要使用超大規(guī)模的數(shù)據(jù)集,那么需要更多的內(nèi)存。


硬盤驅(qū)動(dòng)器/SSD:


用于存儲(chǔ)數(shù)據(jù)的硬盤驅(qū)動(dòng)器至少需要 3TB;

使用 SSD 預(yù)處理小數(shù)據(jù)集。


PSU:


GPU+CPU+10% 就是你必需的電源供應(yīng)量,再將總電量乘以 110% 而獲得最終所需要的電源功率;

如果使用多塊 GPU,還要增加一些額外的電源供應(yīng)量;

確保 PSU 有足夠的 PCIe 連接器(6+8pins)。


散熱:


CPU,使用標(biāo)準(zhǔn)的 CPU 散熱器或一體化的水冷解決方案;

GPU,使用空氣散熱、使用鼓風(fēng)機(jī)式的散熱器、配置風(fēng)扇的速度。


主板:


盡可能獲得更多的 PCIe 插槽,為未來增加 GPU 做好準(zhǔn)備。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。