做深度學習這麼多年還不會挑GPU?這兒有份選購全攻略
大資料文摘出品
來源:timdettmers
編譯:劉佳瑋、錢天培
深度學習是一個對算力要求很高的領域。GPU的選擇將從根本上決定你的深度學習體驗。
一個好的GPU可以讓你快速獲得實踐經驗,而這些經驗是正是建立專業知識的關鍵。如果沒有這種快速的反饋,你會花費過多時間,從錯誤中吸取教訓。
那麼,現在問題來了。
如果你想購買新的GPU,應該關注哪些指標呢?GPU RAM,核心,還是Tensor Core?
各種廠商五花八門。英偉達,英特爾,還是谷歌?我又應該選擇哪家的產品?
本文將深入研究這些問題,並將為你提供建議,幫助你做出適合的選擇。
本文結構如下:
首先,我會討論擁有多個GPU的用處,然後討論所有相關的硬體選項,如英偉達和AMD GPU,Intel Xeon Phis,Google TPU和初創公司的硬體。然後我會討論哪些GPU規格指標是深度學習效能的良好指標。最後,我會總結GPU的選購建議。
只想閱讀最終採購建議的同學可以直接跳到文末。
多個GPU能讓我的訓練更快嗎?
我的核心觀點是,卷積和迴圈網路很容易並行化,特別是當你只使用一臺計算機或4個GPU時。然而,包括Google的Transformer在內的全連線網路並不能簡單並行,並且需要專門的演算法才能很好地執行。
圖1:主計算機中的設定:你可以看到三個GPU和一個InfiniBand網路卡。這是一個很好的深度學習配置嗎?
像TensorFlow和PyTorch這樣的現代庫非常適合並行化迴圈和卷積網路。以卷積為例,2/3/4 塊GPU的期望加速大約分別是1.9x / 2.8x / 3.5x。對於迴圈網路,序列長度是最重要的引數,在常見的NLP問題中,對應的加速比與卷積網路相似或稍差。
然而,全連線網路(包括Transformer)通常具有較差的資料並行效能,並且需要更高階的演算法來加速網路的這些部分。如果你在多個GPU上執行Transformer,你應該也嘗試在單個GPU上執行,並比較檢視是否真的有加速。
在不考慮並行性的情況下使用多個GPU
除了並行運算,擁有多個GPU能帶來的更顯著幫助是,讓你可以在每個GPU上單獨執行多個演算法或實驗。
高效的超引數搜尋是多個GPU的最常見用途。雖然你沒有獲得加速,但你可以獲得有關不同超引數設定或不同網路架構的效能的更快資訊。這對新手來說也非常有用,因為你可以快速獲得訓練不熟悉的深度學習架構的見解和經驗。
以這種方式使用多個GPU通常比透過資料並行在多個GPU上執行單個網路更有用。購買多個GPU時,請記住這一點:當你購買多個GPU時,用於提高並行性的指標(如PCIe通道數量)並不重要。
另外,請注意,單個GPU應該足以滿足幾乎所有任務的要求。單GPU的體驗範圍與4個 GPU的體驗不會差太多。唯一的區別是,你可以在給定時間內使用多個GPU執行更多實驗。
你該如何選擇:英偉達 vs AMD vs 英特爾 vs 谷歌 vs 亞馬遜 vs 微軟 vs 初創公司
英偉達:領導者
英偉達的標準庫使得在CUDA中建立第一個深度學習庫非常容易,而AMD的OpenCL沒有這樣強大的標準庫。這一早期優勢與英偉達強大的社群支援相結合,迅速增加了CUDA社群的規模。這意味著只要你使用英偉達 GPU,如果出現問題,你將很容易找到支援;如果你自己編寫CUDA,你會找到支援和建議;並且你會發現大多數深度學習庫都對英偉達 GPU提供最佳支援。在過去的幾個月裡,英偉達仍將更多的資源投入到軟體中。例如,Apex庫支援在PyTorch中實現穩定的16位梯度,還包括融合快速最佳化器,如FusedAdam。總的來說,軟體是英偉達 GPU非常強大的一步。
另一方面,英偉達現在有一項政策,即只允許Tesla GPU在資料中心使用CUDA,而不允許GTX或RTX卡。目前外界尚不清楚“資料中心”的嚴格定義,但這意味著,由於擔心法律問題,組織和大學將被迫購買價格昂貴且價效比低的Tesla GPU。然而,Tesla卡與GTX和RTX卡相比沒有真正的優勢,成本卻高達10倍。
英偉達可以在沒有任何重大阻力的情況下做到這一點,正表明了他們壟斷的力量——他們可以隨心所欲地做,我們必須接受這些條款。如果你選擇了英偉達 GPU在社群和支援方面的主要優勢,你也需要同時接受隨時可能出現的各種限制。
AMD:功能強大但缺乏支援
HIP透過ROCm將英偉達和AMD GPU統一為一種通用程式語言,在編譯成GPU元件之前編譯成相應的GPU語言。如果我們將所有GPU程式碼都放在HIP中,這將是一個重要的里程碑,但這很困難,其中就包含了移植TensorFlow和PyTorch程式碼庫。 TensorFlow和PyTorch對AMD GPU有一些支援,所有主要網路都可以在AMD GPU上執行,但如果你想開發新網路,可能會遺漏一些細節,這可能會阻止你實現你需要的東西。 ROCm社群也不是太大,因此很難直接解決問題。 AMD對他們的深度學習軟體投入很少,因此不能指望英偉達和AMD之間的軟體差距將在未來縮小。
目前,AMD GPU的效能還可以。它們現在具有16位計算能力,這是一個重要的里程碑,但英偉達 GPU的Tensor核心為Transformer和卷積網路提供了更高的計算效能(不過對於詞級迴圈網路而言,沒有提高那麼多)。
總的來說,我認為對於那些只希望GPU能夠順利執行的普通使用者,我不太推薦AMD GPU。更有經驗的使用者應該可以減少問題,並且透過支援AMD GPU和ROCm / HIP開發人員,他們有助於打擊英偉達的壟斷地位,因為這將使每個人長期受益。如果你是GPU開發人員並希望為GPU計算做出重要貢獻,那麼AMD GPU可能是長期發揮良好影響力的最佳方式。對於其他所有人來說,英偉達 GPU可能是更安全的選擇。
英特爾:努力追趕
以我的親身經歷而言,我對英特爾Xeon Phis非常失望,我不認為它們是英偉達或AMD顯示卡的真正競爭對手,因此我只簡單描述一下:如果你決定使用Xeon Phi,你可能會遇到以下問題:很差的技術支援,程式碼執行得比CPU還慢,編寫最佳化程式碼困難,沒有完全支援C ++ 11特性,不支援某些重要的GPU設計模式,難以相容依賴BLAS例程的其他庫(NumPy和SciPy)等等。
除了Xeon Phi之外,我非常期待英特爾的Nervana神經網路處理器(NNP),因為它的規格對GPU開發人員而言非常強大,並且它將允許新的演算法,這可能重新定義神經網路的使用方式,但這一專案已經無休止地延遲,有傳言稱大部分研發都打了水漂。NNP計劃於2019年第三季度/第四季度開始。如果你想等待那麼長時間,請記住,從AMD和英特爾自己的Xeon Phi可以看出,好的硬體並非一切。可能直到2020年或2021年,NNP才有能力與GPU或TPU競爭
谷歌:強大,廉價的按需處理
Google TPU已發展成為一種非常成熟的基於雲的產品,具有成本效益。理解TPU的最簡單方法是將其視為打包在一起的多個專用GPU——而且只為了一個目的:進行快速矩陣乘法。如果我們看一下Tensor-Core-enabled V100與TPU v2的效能指標,我們發現兩個系統在執行ResNet50模型時的效能幾乎相同。
但是,Google TPU更具成本效益。由於TPU具有複雜的並行化基礎架構,如果你使用多於1個雲TPU(相當於4個GPU),TPU將比GPU具有更大的速度優勢。
儘管仍在試驗中,但PyTorch現在也支援TPU了,這將有助於加強TPU社群和生態系統。
TPU仍然存在一些各種各樣的問題,例如,2018年2月的一份報告稱,當使用LSTM時TPUv2沒有收斂。我至今沒有找到該問題已經解決的報導。
另一方面,在TPU上訓練大型Transformer取得了巨大成功。GPT-2,BERT和機器翻譯模型可以在TPU上非常有效地進行訓練。根據我的估計,TPU比GPU快約56%,並且由於它們與雲GPU相比價格較低,因此它們是大型Transformer專案的絕佳選擇。
然而,在TPU上訓練大型模型的一個問題可能是累積成本。TPU具有高效能,最適合在訓練階段使用。在原型設計階段,你應該關閉雲端來降低成本。因此,最佳選擇是,在你的個人GPU上進行原型設計,然後在TPU訓練最終模型。
總而言之,目前TPU似乎最適合用於訓練卷積網路或大型Transformer,並且應該結合其他計算資源共同使用,而不是作為主要的深度學習資源。
亞馬遜AWS和微軟Azure:可靠但昂貴
來自Amazon AWS和微軟Azure的GPU例項非常具有吸引力,因為你可以根據需要輕鬆擴充套件和縮小例項。這對於趕paper或者更大的一次性專案非常有用。然而,與TPU類似,成本會隨例項數增長而迅速累加。目前,GPU雲例項太昂貴而無法單獨使用,我建議在雲中啟動最終訓練工作之前,使用一些專用的廉價GPU進行原型設計。
初創公司:具有革命性的硬體概念但缺乏軟體
有一系列初創公司旨在生產下一代深度學習硬體。這些公司通常擁有出色的理論設計,然後被谷歌、英特爾或其他公司收購,以獲得完成設計和生產晶片所需的資金。下一代晶片的開發成本十分昂貴(約10億美元)。一旦這個階段完成,軟體就成了主要問題。目前,還沒有初創公司能夠生產出適用於當前深度學習硬體的軟體。需要開發一個完整的軟體套件才能具有競爭力,這一點從AMD與英偉達的例子中可以清楚地看出:AMD擁有出色的硬體,但只有90%的軟體——這還不足以與英偉達競爭。
目前,沒有任何公司能夠完成所有的硬體和軟體步驟。英特爾NNP可能是最接近的,但目前來看,我們不能指望在2020年或2021年之前出現有競爭力的產品。所以目前我們需要繼續使用GPU和TPU。
因此,你就先別指望初創公司的新硬體了。
一個優秀的GPU應該擁有什麼效能?
訓練深度學習模型時,GPU效能中最重要的特性到底是什麼?是CUDA Core嗎?還是時脈頻率?或是RAM大小?
GPU的選擇實在令人困惑:16位計算能力,Tensor Core,沒有Tensor Core的16位GPU,多代GPU仍然可行(Turning,Volta,Maxwell)。
所幸我們仍然有一些可靠的效能指標,我們可以使用這些指標作為經驗法則。這裡有一些針對不同深度學習架構的優先順序指南:
卷積網路和Transformer:Tensor Core> FLOP>儲存器頻寬> 16位計算能力
迴圈網路:儲存器頻寬> 16位計算能力>Tensor Core> FLOP
解釋如下:如果我想使用卷積網路,我應該首先優先考慮具有Tensor Core的GPU,然後是高FLOP指數,然後是高記憶體頻寬,然後是具有16位計算能力的GPU 。在確定優先順序時,你也需要根據模型大小選擇具有足夠記憶體的GPU。
為什麼優先順序是這樣的呢?
GPU可以快速實現兩個最重要的張量操作:矩陣乘法和卷積。
考慮矩陣乘法A * B = C。將A,B的儲存器複製到晶片上比計算A * B更昂貴。這意味著,如果你想使用LSTM和其他經常進行大量小矩陣乘法的迴圈網路,則記憶體頻寬是GPU最重要的特性。矩陣乘法越小,記憶體頻寬就越重要。
相反,卷積受計算速度的約束。因此,GPU上的TFLOP是ResNets和其他卷積架構效能的最佳指標。Tensor Core可以明顯增加FLOP。
圖2:GPU和TPU的標準化效能資料。越高越好。RTX卡假定16位計算。RNN編號指的是長度小於100的短序列的biLSTM效能。使用PyTorch 1.0.1和CUDA 10完成基準測試。
價效比分析
GPU的價效比可能是選擇GPU的最重要標準。本文的效能分析如下:
1.對於Transformer,我對Transformer-XL和BERT進行了基準測試。
2.對於詞級和字元級RNN,我對最先進的biLSTM模型進行了基準測試。
3.(1)和(2)中的基準測試是針對Titan Xp,Titan RTX和RTX 2080 Ti進行的。對於其他卡,我線性地縮放了效能差異。
4.我使用現有的CNN基準。
5.我使用亞馬遜和eBay的平均成本作為GPU的參考成本。
圖3:卷積網路(CNN),迴圈網路(RNN)和Transformer的標準化效能/成本。越高越好。RTX 2060的成本效率是Tesla V100的5倍以上。RNN編號指的是長度小於100的短序列的biLSTM效能。使用PyTorch 1.0.1和CUDA 10完成基準測試。
從這些資料中,我們看到RTX 2060比RTX 2070,RTX 2080或RTX 2080 Ti更具價效比。為什麼會這樣呢?使用Tensor Core進行16位計算的能力遠遠超過擁有更多Tensor Core核心的更大的硬體。使用RTX 2060,你可以以最低的價格獲得這些功能。
然而,這種分析存在一些應該考慮的偏差:
1.這種分析強烈傾向於較小的顯示卡。較小而經濟高效的GPU可能沒有足夠的記憶體來執行你真正感興趣的模型!
2.GTX 10xx卡標價過高:目前,由於遊戲玩家不喜歡RTX卡,GTX 10XX卡似乎加價格被哄抬過高。
3.單GPU偏置:一臺具有4個低成本卡(4x RTX 2080 Ti)的計算機比具有最高成本/效率卡(8x RTX 2060)的2臺計算機更具價效比。
警告:多GPU RTX發熱問題
如果你使用多個彼此相鄰的GPU,那麼RTX 2080 Ti和其他具有標準雙風扇的RTX GPU就存在問題了——尤其是一臺計算機中的多個RTX 2080 Ti。多個RTX 2080和RTX 2070也會受到影響。
RTX卡上的風扇是由英偉達開發的一種新設計,用於改善執行單GPU的遊戲玩家的體驗(靜音,低發熱)。但是,如果你使用具有此開放式雙風扇設計的多個GPU,那麼這種設計非常糟糕。如果你想使用多個彼此相鄰的RTX卡(直接在下一個PCIe插槽中),那麼你應該獲得具有“鼓風式”單風扇設計的版本。對於RTX 2080 Ti卡尤其如此。華碩和PNY目前市場上有RTX 2080 Ti型號,帶有鼓風式風扇。如果你使用兩個RTX 2070,你可以使用任何風扇,但是,我仍願意選擇使用一個鼓風式風扇,以便在彼此旁邊執行2個以上的RTX 2070。
所需記憶體大小和16位訓練
GPU上的記憶體對於某些應用程式(如計算機視覺,機器翻譯和某些其他NLP應用程式)至關重要,你可能認為RTX 2070具有價效比,但其記憶體太小,只有8 GB。但請注意,透過16位訓練,你幾乎可以擁有16 GB的記憶體。任何標準型號都可以被輕鬆放入RTX 2070。
RTX 2080和RTX 2080 Ti也是如此。但請注意,在大多數軟體框架中,16位運算並非預設選項,因為某些框架以32位儲存權重以執行更精確的梯度下降。一個好的經驗法則是,使用16位計算往往可以節省50%的記憶體。因此,16位8GB記憶體的大小與12 GB 32位記憶體大致相當。
GPU推薦
目前,我的主要建議是購買RTX 2070 GPU並使用16位訓練。我永遠不會建議購買XP Titan,Titan V,任何Quadro顯示卡或任何Founders Edition GPU。但是,有一些特定的GPU也有它們的用武之處:
1.如果要額外記憶體的話,我建議使用RTX 2080 Ti。如果你真的需要大量的記憶體,RTX Titan是最好的選擇——但要確保你真的需要那麼多記憶體!
2.如果想要額外的效能,我建議使用RTX 2080 Ti。
3.如果你缺錢,我會推薦eBay上的任何便宜的GTX 10XX卡(取決於你需要多少記憶體)或RTX 2060。如果太貴,可以看看Colab。
)
4.如果你只想入門深度學習,GTX 1060(6GB)是一個很好的選擇。
5.如果你已經擁有GTX 1070或更高版本,請再等等。除非你使用大型Transformer,否則升級是不值得的。
6.如果你想快速學習深度學習,建議使用多個GTX 1060(6GB)。
雲端深度學習
AWS / Azure上的GPU例項和Google Cloud中的TPU都是深度學習的可行選擇。雖然TPU稍微便宜一點,但它缺乏雲GPU的多功能性和靈活性。
TPU可能是訓練物體識別或Transformer模型的首選武器。對於其他工作負載,雲GPU是更安全的選擇——雲例項的好處是你可以隨時在GPU和TPU之間切換,甚至可以同時使用兩者。
但是,請注意這樣做的代價:如果你一直使用AWS / Azure完成工作,那麼你將無法學到如何在個人GPU上工作的技能,並且你也無法獲得使用TPU的技能。如果你一直使用個人GPU,則無法學會透過雲擴充套件到更多GPU / TPU的技能。
如果你使用TPU,當你需要完整功能時,你可能就只能使用TensorFlow了。學習雲GPU / TPU工作流的代價是很高,如果你正在面臨TPU、雲GPU和個人GPU的選擇,你應該意識到這個代價。
另一個問題是,何時使用雲服務?如果你試圖學習深度學習,或者你需要搭建原型,那麼個人GPU可能是最好的選擇,因為雲例項可能很昂貴。
但是,一旦你找到了良好的深度網路配置,並且你只想使用資料並行性訓練模型,那麼使用雲例項是一種可靠的方法。小型GPU足以進行原型設計,而人們可以依靠雲端計算的強大功能來擴充套件到更大的實驗。
如果你的資金不足,雲端計算例項也可能是一個很好的解決方案:在CPU上進行原型設計,然後在GPU / TPU例項上實驗,以便快速進行訓練。這不是最好的工作流程,因為在CPU上做原型設計十分痛苦,但它可以是一個具有高價效比的替代方案。
結論
總的來說,在GPU選取上,我推薦以下三個策略:
1.堅持使用GTX 1070或更好的GPU
2.購買RTX GPU
3.使用某種GPU進行原型設計,然後在TPU或雲GPU上進行並行訓練。
更多建議
最佳GPU:RTX 2070
最差GPU:任何Tesla卡、任何Quadro卡、任何初創公司的卡; Titan RTX,Titan V,Titan XP
高價效比但價格昂貴:RTX 2070
高價效比且價格便宜:RTX 2060,GTX 1060(6GB)
有點小錢:GTX 1060(6GB)
沒錢:GTX 1050 Ti(4GB)或者:CPU(原型)+ AWS / TPU(訓練);或者Colab。
參加Kaggle:RTX 2070。如果你沒有足夠的錢,可以從eBay購買GTX 1060(6GB)或GTX Titan(Pascal)進行原型設計,然後使用AWS進行最終訓練。使用fastai庫。
計算機視覺或機器翻譯研究員:GTX 2080 Ti(採用鼓風機設計)。如果你訓練非常大的網路,請使用RTX Titans。
NLP研究員:16位的RTX 2080 Ti。
想認真學習深度學習:從RTX 2070開始。在6-9個月後購買更多RTX 2070。根據你接下來選擇的領域(創業,Kaggle,研究,應用深度學習),賣掉你的GPU,並在大約兩年後購買更合適的東西。
只想玩一玩試深度學習:GTX 1050 Ti(4或2GB)。這通常適合你的標準桌面,不需要新的PSU。如果裝得下的話,不要購買新電腦!
相關報導:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2641060/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Titan XP值不值?教你如何挑選深度學習GPU深度學習GPU
- 做了這麼多年前端,為什麼你還是不會寫業務程式碼?前端
- 寫了這麼多年 JavaScript ,竟然還不知道這些技巧?JavaScript
- 炒股這麼多年,不會判斷壓力位是虧損根源
- 看完這個你還不會 插入排序 麼排序
- [AI開發]深度學習如何選擇GPU?AI深度學習GPU
- 機器學習其實就這麼回事兒!機器學習
- 用了這麼多年MySql,這些好習慣你用過哪些MySql
- 唱衰這麼多年,PHP 仍然還是你大爺!PHP
- 哪些電腦最適合做機器學習、資料科學和深度學習呢?這裡有份調研報告機器學習資料科學深度學習
- 這就是為什麼你學不會DDD
- 使用Python這麼多年,竟然還有這些實用的功能和特點!Python
- 遊戲大廠花了這麼多心思做這件事,為什麼還是吃力不討好?遊戲
- 還不會用 GitHub Actions ?看看這篇Github
- 這才是深度學習的本源深度學習
- 【圖文並茂】 做開發這麼久了,還不會搭建伺服器Maven私有倉庫?這也太Low了吧伺服器Maven
- 【圖文並茂】做開發這麼久了,還不會搭建伺服器Maven私有倉庫?這也太Low了吧伺服器Maven
- vlookup函式不會用?詳細使用方法就在這兒,用心學!函式
- 機器學習中特徵選擇怎麼做?這篇文章告訴你機器學習特徵
- 還不會正規表示式?看這篇!
- Logback配置檔案這麼寫,還愁不會整理日誌?
- 敲了這麼多年程式碼,這樣的登入方式還真是頭一回見
- 深度學習入行,現在門檻這麼低了嗎?深度學習
- 還不會做銷售分析?掌握這3個思路,讓你秒變分析高手
- 金融資料分析還能這樣做?快試試這個BI工具小白也能學會!
- 用Java這麼多年,這些祕密你知道嗎?Java
- 手遊內購增長“龜速”?面對“另類”新玩家還得這麼玩兒
- 深度思考:擁有多年開發經驗為何還會被多家大廠拒絕?Android開發還有什麼能學習的?Android
- Docker學不會?不妨看看這篇文章Docker
- 這麼神奇的屬性,確定不來學習下麼
- Mysql備份還有這麼多套路,還不瞭解下?MySql
- 學習Java,我建議這樣做Java
- 教你如何選購電腦記憶體條?學會這些少花冤枉錢!記憶體
- 【學習筆記】不會吧不會吧,不會有人還在手寫堆吧筆記
- 現在學Java可以做什麼?這10大領域任你選Java
- 深度學習該往何處走?Yoshua Bengio這麼認為深度學習
- 還怕Web 安全程式設計學不會?來這裡,準沒錯!Web程式設計
- 這麼簡單,還不會使用java8 stream流的map()方法嗎?Java