深度學習的完整硬體指南
原標題 | A Full Hardware Guide to Deep Learning
作者 | Tim Dettmers
譯者 | linlh、呀啦呼(Tufts University)、Ryan222(重慶郵電大學)
深度學習是非常消耗計算資源的,毫無疑問這就需要多核高速的CPU。但買一個更快的CPU有沒有必要?在構建深度學習系統時,最糟糕的事情之一就是把錢浪費在不必要的硬體上。本文中我將一步一步教你如何使用低價的硬體構建一個高性能的系統。
這些年來,我總共搭建了7個不同的深度學習工作站,儘管經過了仔細的研究和推理,我在選擇硬體時也犯了很多錯誤。在這篇文章中,我將分享我這些年的經驗,幫助你避免同樣的錯誤。
這篇博客的順序是按照我犯錯的嚴重程度編排的,所以我首先提到的是那些使人浪費最多錢的錯誤。
GPU
假設你將用GPU來進行深度學習或者你正在構建或者升級用於深度學習的系統,那麼拋開GPU是不合理的。GPU是深度學習應用的心臟——訓練過程速度的提升是非常的大的,不容忽視。
我在GPU推薦博客中對如何選擇GPU講的非常詳細,如何選擇GPU在深度學習系統中相當關鍵。在選擇GPU時,你可能會犯這三個錯誤:(1)性價比不高,(2)內存不夠大,(3)散熱差。
性價比方面,我通常推薦 RTX 2070或者 RTX 2080 Ti。使用這些顯卡的時候,你應該使用16位的模型,除此以外,eBay 的 GTX 1070, GTX 1080 和 GTX 1080 Ti 是非常好的選擇,選擇他們時,可以使用32位的模型,但不能是16位的模型。
在選擇GPU時,要十分留意你的內存需求。在消耗同樣內存的情況下,相比GTX,能跑16位模型的RTX能夠訓練2倍大小的模型。正是因為RTX有著內存優勢,選擇RTX、學習高效地使用16位模型,能夠帶給你更好的的使用體驗。通常,對內存的要求大致如下:
追求最高水平分數的研究:>=11 GB
探尋有趣架構的研究:>=8 GB
其他的研究:8 GB
Kaggle:4 – 8 GB
初學者:8 GB (但是要注意檢查下應用領域的模型大小)
企業:8 GB 用於原型, >=11 GB 用於訓練
在你買了多塊RTX顯卡時,需要留意散熱問題。如果你想將 GPU 固定在彼此相鄰的 PCIe 插槽中,應該確保使用帶有鼓風機式風扇的 GPU。否則,您可能會遇到溫度問題,並且您的 GPU 速度會變慢(約30%)並且損耗得更快。
找茬時間到!
你能否識別出因性能不佳而出現故障的硬體部分?是其中一個GPU?或者也許這是CPU的錯?
RAM
購買內存最大的錯誤就是買了主頻太高的內存。第二個錯誤是沒有購買足夠大的內存,導致在原型構建上出問題。
需要的主頻
主頻是內存公司引誘你購買「更快」的內存的一種營銷手段,實際上幾乎沒有產生任何性能的提升。這個關於RAM的視頻很詳細地解釋了內存在Linux上的技術竅門:內存速度真的重要嗎?
此外,重要的是要知道內存速度與快速CPU RAM-> GPU RAM傳輸幾乎無關。這是因為(1)如果你使用固定內存(pinned memory),那麼你的mini-batch會直接傳輸到GPU中而不需要CPU的干預,(2)如果你不使用固定內存的話,快的和慢的內存獲得的性能差別只有0-3%——把你的錢花到別處去!
內存大小
內存大小不會影響到深度學習的性能。但是,它可能會阻礙你輕鬆執行GPU代碼(無需交換到磁碟)。你應該有足夠的內存來愉快地配合GPU工作。這意味你至少應該有匹配GPU的內存大小。比如說,如果你有一張24GB顯存的Titan RTX,那你至少應該有24GB的內存。但是,如果你有多塊GPU的話,你不需要更多的內存。
「在內存上匹配最大的GPU顯存」策略在於,如果你在處理大數據集時,你可能夠還是會內存不足。最好的方式是和你的GPU匹配,如果你覺得內存不夠,再買更大的內存。
另外一個不同的策略受心理學的影響:心理學告訴我們,專註是一種隨著時間推移而耗盡的資源。內存是為數不多的硬體之一,可以讓您浪費專註的精力,從而聚焦在解決更困難的編程問題。如果你有更多的內存,你可以將注意力集中在更緊迫的事情上,而不是困擾在內存瓶頸上浪費了大量時間。有了大量內存你就可以避開這些瓶頸,為更為緊急的問題節約時間,提升效率。特別在Kaggle比賽中,我發現有著額外的內存對於特徵工程是非常有幫助的。如果資金足夠,並且好做大量的預處理工作,那麼增加額外的內存是一個非常好的選擇。按照這個策略,現在就要考慮購買更多、實惠的內存,而不是後面再考慮。
CPU
人們常犯的最大錯誤是花太多的時間糾結CPU的PCIe通道數。其實,你並不需要太在意CPU的PCIe通道數。取而代之的是,應該注重你的CPU和主板的組合是否能夠支撐起想要運行的GPU數量。第二個最常見錯誤是購買功能過於強大的CPU。
CPU和PCI-Express(新一代匯流排介面)
很多人痴迷於PCIe的通道數。然而,事情的真相是PCIe(的通道數)幾乎不會影響深度學習的表現。如果你只有一個單一的GPU,PCIe通道唯一的作用是能夠快速地將數據從你的CPU 內存中轉換到GPU 內存中。但是,一個具有32張圖片的ImageNet數據集批次(數據集的shape為32*225*225*3)和32位模型,在16通道PCIe上訓練需要1.1毫秒,在8通道上需要2.3毫秒,在4通道上需要4.5毫秒。這些僅僅是理論上的數值,而在實際中你常常會發現PCIe會比理論速度慢上兩倍——但是它仍然像閃電一樣快。PCIe 通道的延時通常在納秒範圍內,因此其延時問題可以被忽視。
綜上考慮後,我們提出了使用152層殘差網路訓練一個具有32張圖片的小批量ImageNet數據集所需的時間,如下所示:
向前傳播和向後傳播用時:216毫秒(ms)
使用16通道PCIe將數據從CPU內存轉換到GPU內存用時:大概2ms(理論上1.1ms)
使用8通道PCIe將數據從CPU內存轉換到GPU內存用時:大概5ms(理論上2.3ms)
使用4通道PCIe將數據從CPU內存轉換到GPU內存用時:大概9ms(理論上4.5ms)
因此將4通道的PCIe換成16通道的PCIe將給你的訓練表現帶來大概3.2%的提升。然而,如果你的pyTorch數據下載器含有CUDA頁鎖定內存,那麼(改變PCIe的通道)其實給你的訓練表現帶來的提升是0%。所以如果你僅使用1個GPU,那麼不要把你的錢浪費在PCIe上!
當你在選擇CPU的PCIe通道和主板PCIe通道時,(一定要)明確所選的CPU和主板組合能夠支持期望的GPU數量。如果你買了一個支持2個GPU的主板,並且你最終確實需要用到2個GPU,那麼就需要確認你購買的CPU能夠支持2個GPU,而沒有必要糾結PCIe的通道數。
PCIe通道數和多GPU並行
如果你在多GPU上並行的訓練數據時,PCIe的通道數是重要的嗎?針對這個問題我在2016年的ICLR會議中發表了一篇論文,而且我可以告訴你如果你有96個GPU那麼PCIe的通道數確實非常重要。然而如果你只有4個或者更少的GPU,那麼PCIe通道數的影響不大。如果在兩到三個GPU上訓練,我完全不會關心PCIe的通道數。當我使用四個GPU訓練時,我才會確保每個GPU都能夠得到8條PCIe通道的支持(總共32條PCIe通道)。由於幾乎沒有人會在超過4個GPU上面運行一個系統,那麼記住一個經驗準則:不要為了在每個GPU中得到更多的PCIe花額外的錢——這沒有必要!
所需的 CPU 核數
為了能夠在CPU上作出明確的選擇,我們首先需要了解CPU以及它和深度學習間的關係。CPU為深度學習做了什麼?當你在一個GPU上運行你的深度網路時,CPU僅進行很簡單的運算。它主要主要(1)啟動GPU函數調用,(2)執行CPU函數。
目前,CPU最大的應用是數據預處理。常用的兩種數據預處理策略有著不同的CPU需求。
一種策略是在訓練過程中進行預處理:
循環以下(三個)步驟:
1.導入小批量數據
2.預處理小批量數據
3. 訓練小批量數據
第二種預處理策略是在訓練之前進行預處理操作:
1. 導入數據
2. 循環以下(兩個)步驟:
導入小批量數據
訓練小批量數據
對於第一種策略,一個多核CPU可以明顯地加強訓練表現。對於第二種策略,你不需要一個很好的CPU。對第一種訓練策略,我建議每個GPU至少有4個線程——通常每個GPU有兩個核心。我沒有對此進行嚴格的測試,但是每增加一個核心/GPU應該有0-5%的額外性能提升。
對於第二種策略,我建議每個GPU最少有2個線程——通常每個GPU有一個核心。如果你使用第二種策略,那麼更多的內核並不會給你帶來明顯的性能提升。
所需的 CPU 主頻(時鐘頻率)
當人們考慮(購買)快速的CPU時,他們通常首先查看時鐘頻率。4GHz的CPU比3.5GHz的好,是嗎?這對於比較具有相同結構的處理器來說通常是正確的,例如「Ivy Bridge微架構」,但是對於不同架構的處理器來說這並不好比較。此外,CPU主頻並不總是衡量性能的最佳方法。
在深度學習中CPU僅僅做一些微不足道的計算:增加一些參數,評估布爾表達式,在GPU或程序內進行函數調用——這些都取決於CPU核心的時鐘頻率。
雖然這些理由看似合理,但是當我運行深度學習程序時卻發現CPU使用率為100%,那麼這是為什麼呢?為了找尋答案,我做了一些CPU降頻實驗。
在MNIST和ImageNet數據集上的GPU降頻實驗:不同CPU時鐘頻率的性能以訓練200個epoch的MNIST數據集和50個epoch的ImageNet數據集所花費的時間來衡量, 其中最大的時鐘頻率作為每個CPU的基線。作為比較:從GTX 680升級到GTX Titan的性能提升約為 15%; 從GTX Titan到GTX 980又提升20%的性能; GPU超頻可為任何GPU帶來5%的性能提升。
值得注意的是,這些實驗是在落後過時的硬體設備上進行的,然而,對於現代的CPU/GPU它的結果仍然不變。
硬碟/SSD
一般來說硬碟不是深度學習的瓶頸。但也別整這種蠢事兒:當你從一個100MB/s的硬碟讀取mini-batch為32的ImageNet時候,需要185毫秒。你可以在數據使用前非同步載入數據(比如說torch vision loader),因為載入數據需要185毫秒而ImageNet上運行的大多數DNN需要200毫秒來計算。我們完全可以提前載入下一個mini-batch來避免性能損失。
從生產效率來說,我推薦SSD,因為程序啟動反應更快,大文件的預處理速度也更快。另外,NVMe SSD會帶給你更好的使用體驗。
電源(PSU)
你得確保你的電源能夠滿足所有預留GPU的功率需求。一般來說,GPU能耗會越來越低,所以不用更換電源,買個好的電源是個值當的買賣。
在計算需要的功率時,你最好加上所有CPU和GPU功耗的10%作為功率峰值的緩衝。舉個例子,你有四個250瓦的GPU和一個150瓦的CPU,那我們需要一個最少4×250 + 150 + 100 = 1250瓦的電源。一般我會加上至少10%來確保一切正常,那麼在這種情況下一共需要1375瓦。最後我會買一個1400瓦的電源。
你得注意有些電源即使達到了要求的功率,但是沒有足夠的8針或者6針PCIe插槽介面。你得多多注意這點。
另外請盡量購買高功率功效的電源——特別是你運行多個GPU且長時間運行。
滿負載運行一個4GPU系統(1000-1500瓦)來訓練卷積神經網路兩周會消耗300-500千瓦時。德國每千瓦時的價格是20分,所以會用60-100歐(66-111美金)。剛剛我們假設的電源效率是100%,如果使用的是效率是80%的電源,還要額外消耗18-26歐。使用單顆GPU的話,會少很多。但是不影響重點:值得在高效電源上多花點兒錢。
全天候的使用一些GPU會顯著的增加你的碳排放足跡,甚至這比你的交通(譬如飛機)和其他因素還要多。如果你想要負責的話,可以用紐約大學機器學習語言組(ML2)- 很容易辦到,也很便宜,可以作為深度學習研究院的標準。
CPU 和 GPU 的冷卻系統
冷卻非常重要,是整個系統中一個重要的瓶頸。相比較於糟糕的硬體選擇,它更容易降低性能。對於CPU,你可以使用標準散熱器或者一體化(AIO)水冷解決方案。但是對於GPU,你需要特別注意。
風冷 GPUs
如果你有多顆GPU並且他們中間有足夠的空間(在3-4顆GPU的位置放置2顆GPU),風冷是安全可靠的。當你想去冷卻3-4顆GPU的時候,可能會犯一個巨大的錯誤。這時候你需要認證考慮在這個案例中的選擇。
運行一個演算法的時候,現代GPU會提高他們的速度以及功耗,直至最大值。一旦GPU達到溫度臨界值(通常為80°C),GPU就會降低運算速度防止達到溫度闕值。這樣可以在保持GPU過熱的同時實現最佳性能。
對於深度學習程序而言,典型的風扇速度預編程時間表設計得很糟糕。啟動一個深度學習程序後幾秒鐘就會達到溫度闕值,結果就是性能會下降0-10%。多個GPU之間相互加熱,性能會下降的更明顯(10%-25%)。
因為 NVIDIA GPU 在大部分情況下是作為遊戲 GPU,它們對windows進行了優化。在Windows中點一點滑鼠就能改變風扇計劃的方式在Linux中行不通。可是大多數深度學習庫都是針對Linux編寫。
如果你有一台Xorg伺服器(Ubuntu),唯一的選項是用「coolbits」來設置溫度。對於單個GPU來說,這種方法非常奏效。當有多個GPU的時候,其中一些沒有監視器,模擬出監視器來監測他們是很艱難晦澀的工作。我曾經花過很長的時間嘗試使用實時啟動CD來恢復我的圖形設置,但是從沒有在無監視器GPU上成功運行過。
在風冷系統下運行3-4顆GPU需要尤其重視風扇設計。「鼓風機式」風扇設計讓冷風進入GPU,然後從機箱背部吹出熱風。「非鼓風機式」風扇吸入GPU附近的空氣來冷卻它。但是如果是多顆GPU,那麼它們的周圍就沒有冷空氣,使用「非鼓風機式」風扇的GPU會越來越熱,最終通過降低性能來降溫。我們應該不惜一切代價來必變在3-4顆GPU的環境中使用「非鼓風機式」風扇。
多GPU使用的水冷系統
另一種更棒更昂貴的方式是使用水冷系統。如果你只有一顆GPU或者兩顆GPU之間有足夠的空間(比如在3-4顆GPU的主板上有兩顆GPU),我不建議使用水冷系統。在4GPU配置中,水冷保證即使最強勁的GPU也能保持低溫,而這在風冷中是不可能實現的。水冷的另一個優點是運行很安靜,這對於在公共區域運行多GPU來說是一個巨大的優勢。每顆GPU需要100美金的成本安裝水冷,另外需要一些額外的前期成本(大約50美金)。組裝有水冷的計算機也會需要一些額外工作,但是不用擔心,會有詳細的指南來指導你安裝,僅僅需要你多付出幾個小時。維護工作也沒有那麼的複雜費力。
一個冷卻的案例
大型的塔式伺服器在GPU位置有額外的風扇,所以我為深度學習集群購買了他們。然後我發現太不划算了,只下降了2-5°C卻要付出大量的投資。最重要的部分是直接在GPU上安裝冷卻系統,完全沒必要為冷卻系統買貴不啦嘰的殼子。
冷卻的總結
對於一個GPU來說,風冷足夠了。如果你有多個GPU, 你可以在接受性能損失(10% - 15%)的情況下使用「鼓風式」風冷系統,或者花更多的錢購置水冷系統,雖然難以設置但是它可以保證沒有性能損失。對於不同的場景,我們可以因地制宜選擇風冷或者水冷。我建議使用風冷就好--使用「鼓風式」GPU。如果你想使用水冷, 請使用一體化水冷(AIO)方案。
主板
你的主板上應該有足夠的PCIe埠來支持你需要運行的GPU數量(即使你有更多的PCIe 插槽,但是一般限制最多4顆GPU);另外,銘記大部分GPU都會佔據兩個PCIe卡槽的寬度,所以如果想使用多顆GPU,請確保購買的主板有足夠的預留空間。主板不僅需要有足夠的PCIe插槽位置,而且需要支持你購買的GPU。在新蛋上你可以查看到對應主板的信息和PCIe情況。
電腦機箱
麻煩買個能放下全尺寸長度GPU的機箱。大部分的機箱都沒問題,不過還是查看尺寸規格來確保沒有買了個小號的;或者你可以嘗試在google image裡面搜索這款兒,然後看有沒有有GPU在裡面的圖片。
另外如果使用定製化水冷系統,得確保你的機箱有足夠空間來放置散熱器。因為每個GPU的散熱器都需要單獨的空間。
顯示器
剛開始吧我覺得寫一些關於顯示器的心得很蠢,但是它們各不相同,所以我還是整點話吧。
花在我的3台27寸顯示器上的錢是我最值當的投資了。當使用多顯示器的時候,生產力提升很多。只有一台顯示器的話,我會感覺完全乾不了活。在這事兒上別妥協,如果幹活不開森,深度學習系統再快有啥意思咧?
我一般這麼擱我的顯示器:左邊看論文,搜搜google,收收郵件,瞅瞅stackoverflow;中間就用來寫代碼;右邊放一些雜七八啦的玩意兒,比如輸出界面辣,文件夾辣,系統、GPU監視器辣,待辦事項辣。
一些後話
因為硬體很貴,很多人怕犯錯,一提到DIY計算機就怵得慌。其實特簡單這事兒,因為不匹配的零件也組裝不到一起對不對?主板手冊啊,指南啊以及網路視頻啊也會教小白的你如何組裝這些玩意兒。
自己組裝計算機的好處是,你整了一次就啥都全明白了,這輩子也忘不掉。計算機么,都大差不差,別慫!
結論 / 長話短說GPU:來自eBay的RTX 2070 、RTX 2080 Ti、 GTX 1070 、GTX 1080, 和 GTX 1080 Ti 是非常好的選擇。
CPU:每個GPU分配1-2個兩個核心,這取決於你是怎麼處理數據的。頻率 > 2GHz。CPU應該要能夠支持你要運行的GPU數量。PCIE通道並不重要。
RAM:
- 時鐘頻率不重要 - 買最便宜的內存
- 最少要購買和你最大的GPU顯存大小的內存
- 只有在需要的時候購買更多的內存
- 如果你經常處理大數據集的話更多的內存是非常有幫助的
硬碟/SSD:
- 存放數據的硬碟(>=3GB)
- 使用SSD可以快速處理小數據集
電源
- 把GPU和CPU需要的功率瓦數加起來,然後乘以總數的110%得到需要的功率瓦數
- 如果使用多個GPU,要選擇高效率的電源。
- 確保電源有足夠的PCIE介面(6+8引腳)
散熱
- CPU:使用標準的CPU散熱或者是一體式的水冷解決方案
- GPU:風扇散熱
- 如果購買多個GPU的話使用「鼓風式」的風扇
- 在Xorg配置中設置coolbits標誌以控制風扇速度
主板
- 為(未來的)GPU預留儘可能多的PCIe插槽(一個GPU需要兩個插槽;每個系統最多4個GPU)
顯示器
- 一個額外的顯示器比一個額外的GPU更能提高你的效率
本文編輯:Pita
英語原文:https://timdettmers.com/2018/12/16/deep-learning-hardware-guide/
想要繼續查看該篇文章相關鏈接和參考文獻?
點擊【深度學習的完整硬體指南】即可訪問!
福利大放送——滿滿的乾貨課程免費送!
「好玩的Python:從數據挖掘到深度學習」該課程涵蓋了從Python入門到CV、NLP實踐等內容,是非常不錯的深度學習入門課程,共計9節32課時,總長度約為13個小時。。
課程頁面:https://ai.yanxishe.com/page/domesticCourse/37
「計算機視覺基礎入門課程」本課程主要介紹深度學習在計算機視覺方向的演算法與應用,涵蓋了計算機視覺的歷史與整個課程規劃、CNN的模型原理與訓練技巧、計算機視覺的應用案例等,適合對計算機視覺感興趣的新人。
課程頁面:https://ai.yanxishe.com/page/domesticCourse/46
現AI研習社將兩門課程免費開放給社區認證用戶,只要您在認證時在備註框里填寫「Python」,待認證通過後,即可獲得該課程全部解鎖許可權。心動不如行動噢~
認證方式:https://ai.yanxishe.com/page/blogDetail/13999
雷鋒網雷鋒網雷鋒網
※DeepMind 綜述深度強化學習:智能體和人類相似度竟然如此高!
※CCF-GAIR 智能商業論壇:看清 AI 零售三大勢力的走向丨CCF-GAIR 2019
TAG:雷鋒網 |