大數據文摘出品

  來源: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。

  https://medium.com/deep-learning-turkey/google-colab-free-gpu-tutorial-e113627b9f5d)

  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。如果裝得下的話,不要購買新電腦!

  相關報道:

  http://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/

  志願者介紹

  點「在看」的人都變好看了哦

相关文章