玩深度學習選哪塊英偉達 GPU?有性價比排名還不夠!
與「傳統」 AI 演算法相比,深度學習(DL)的計算性能要求,可以說完全在另一個量級上。
而 GPU 的選擇,會在根本上決定你的深度學習體驗。那麼,對於一名 DL 開發者,應該怎麼選擇合適的 GPU 呢?這篇文章將深入討論這個問題,聊聊有無必要入手英特爾協處理器 Xeon Phi,並將各主流顯卡的性能、性價比製成一目了然的對比圖,供大家參考。
先來談談選擇 GPU 對研究深度學習的意義。更快的 GPU,能幫助新人更快地積累實踐經驗、更快地掌握技術要領,並把這些應用於新的任務。沒有快速的反饋,從錯誤中學習要花費太高的時間成本,學習深度學習便很可能變成一個令人反胃、進而望而生畏的經歷。
是否需要多卡?
出於最初的激動,我走上了多卡交火的不歸路——用 40Gbit/s 的 InfiniBand 橋接器連接,我搭建了一個迷你 GPU 「集群」,萬分激動地試驗多卡是否能有更好的表現。
但很快我就發現,讓神經網路在多卡上高效地並行處理,其實是一件挺不容易的事。尤其是對於更密集的神經網路,性能的提升可以用一句「不過如此」來形容。通過數據並行化,小型神經網路倒可以很高效地並行處理,但大型的就不行了。比如 Kaggle 競賽「Partly Sunny with a Chance of Hashtags」,我用深度學習方法拿下了第二名,多卡就基本沒有加速效果。
這之後,我繼續探索如何在多卡環境玩深度學習。
我開發了一個全新的 8 bit 壓縮技術,其模型並行化比起 32 bit 方法要高效得多,尤其是密集或全連接層。但我同時發現,並行化可以讓你極度失望——我幼稚地針對一系列問題優化了並行演算法,結果發現,即便有優化的特製代碼,多 GPU 的並行化仍然效果一般,尤其考慮到投入的大量精力。
在搞並行化之前,你必須要非常了解你的硬體,以及它與深度學習演算法的相互支持程度,來估計是否能從並行化獲益。
這是我的 PC。你看到的是三塊泰坦以及 InfiniBand 橋接卡。但這個配置適合深度學習嗎?
從那時起,對 GPU 並行的支持越來越常見,但離普及還差得遠,更不要提高效地運行。到目前為止,唯一一個能在多卡、多機環境實現高效演算法的深度學習框架,是 CNTK。它利用了微軟特製的具有 1 bit 量化(高效)和 block momentum(非常高效)的並行化演算法。
如果在 96 卡 GPU 集群上運行 CNTK,線性速度預計可達到 90 到 95 倍。PyTorch 或許會是另一個能高效地支持多機並行化的框架,但暫時還沒到位。如果你在一台設備上搞並行化,你的選擇基本就是 CNTK、Torch 或者 PyTorch。這些框架有不錯的加速表現(3.6-3.8 倍),對於一機四卡(最多)有預定義的演算法。其他支持並行化的庫和框架也存在,但它們要麼很慢(比如 TensorFlow,只有兩到三倍的加速);要麼對於在多卡環境很難用(比如 Theano);再要麼兩個缺點都有。
如果並行化對你很重要,我推薦你用 Pytorch 或 CNTK。
多卡,但不搞並行
多卡的另一個優勢是,即便你不對演算法做並行化,還可以同時跑多個演算法、實驗——每個演算法在在一個 GPU 上單獨運行。你不會獲得任何加速,但同時使用不同演算法或參數,你會得到更多關於效果表現的信息。如若你的主要目標是儘快積累深度學習經驗,這是非常有用處的。對於需要對一個新演算法的不同版本做實驗的研究人員,這也相當有用。
這是多卡在心理上的價值。處理一個任務與獲得結果反饋之間的時間越短,大腦把相關記憶碎片組織起來、建立起該任務知識圖的效果就越好。如果數據集不大,你在兩塊 GPU 上用這些數據同時訓練兩個卷積網路,你會很快就會知道「一切順利」的感覺有多好。你會更快地發現交叉驗證誤差,並做合理解釋。你能發現一些線索,讓你知道需要添加、移除或調整哪些參數或層。
總的來講,你可以說對於幾乎所有任務,一塊 GPU 基本就夠了。但用多卡來加速深度學習模型,正在變得越來越重要。如果你的目標是快速入門深度學習,多塊便宜的顯卡也是不錯的。就我個人而言,我更傾向選擇多塊弱一點的 GPU,而不是一塊核彈,對於研究實驗也是如此。
應該選哪家的加速器——英偉達 GPU,AMD GPU,還是英特爾 Xeon Phi?
英偉達的標準演算法庫,使得在 CUDA 中建立第一批深度學習庫非常簡單。但對於 AMD OpenCL,這樣的強大標準庫並不存在。現實是,現在 A 卡並沒有好用的深度學習庫——所以一般人只能選 N 卡。即便將來有了 OpenCL 庫,我仍會接著用 N 卡。原因很簡單:GPU 通用計算,或者說 GPGPU 的社群基本上是圍繞著 CUDA 轉的,而沒有多少人鑽研 OpenCL。因此,在 CUDA 社區,你可以立刻獲得好的開源方案和代碼建議。
另外,對於深度學習,即便這項技術及其產業尚在襁褓之中,英偉達可謂是全面出擊。老黃的投入並沒有白費。那些現在才投入資金、精力,想要趕上深度學習風口的公司,由於起步晚,離英偉達的距離有老大一截。當前,使用任何除 NVIDIA-CUDA 之外的軟硬體組合玩深度學習,簡直是故意跟自己過不去。
至於英特爾 Xeon Phi,官方宣傳是你能用標準的 C 語言代碼,並輕鬆把代碼轉化為加速的 Xeon Phi 代碼。該功能聽著不錯——你也許會想著可以藉助海量的 C 語言資源。但實際情況是,只有非常少數的 C 語言代碼有支持,而且大部分能用的 C 代碼會非常非常的慢。因此,它其實比較雞肋。
我曾在一個 Xeon Phi 集群工作站搞研究,這期間的經歷不忍回想,一把辛酸淚:
我無法運行單位測試,因為 Xeon Phi MKL 和 Python Numpy 不兼容;我不得不重構大部分的代碼,因為 Xeon Phi 編譯器無法對模板做恰當的 reduction,比如說對 switch statement;我不得不修改 C 界面,因為 Xeon Phi 編譯器不支持一些 C++11 功能。
所有這些迫使我在心酸沮喪中重寫代碼,並且沒有單位測試。這過程極度漫長,堪稱地獄般的經歷。
直到我的代碼終於成功執行,但所有東西速度都很慢。有一些問題,搞不清是 bug 還是線程調度程序的原因,總之如果張量大小接連發生改變,性能就會大幅降低。舉個例子,如果你有大小不同的全連接層或 dropout 層,Xeon Phi 比 CPU 還要慢。我在獨立矩陣乘法上重現了這個問題,並發給英特爾,但沒有迴音。
所以,如果你真想搞深度學習,離 Xeon Phi 越遠越好。
預算有限,怎麼挑 GPU?
想到為深度學習挑選 GPU,你腦子裡冒出來的第一個問題大概是:最重要的性能參數是什麼?Cuda 核心數目?頻率?顯存大小?
都不是。
對深度學習性能影響最大的參數是顯存帶寬。
簡單來講,GPU 為顯存帶寬而優化,為此犧牲了顯存讀取時間,即延遲。而 CPU 恰恰與此相反——如果只涉及少量內存,它能非常快速地做計算,比如個位數之間的乘法(3*6*9)。但是對於大量內存之上的運作,比如矩陣乘法(A*B*C),CPU 是非常慢的。由於高顯存帶寬,GPU 就很擅長處理這類問題。當然,CPU 與 GPU 之間有的是微妙細緻的區別,這只是非常重要的一個。
因此,如果你想要買一個玩深度學習快的 GPU,首先要看顯存帶寬。
從顯存帶寬評估 GPU
近幾年 CPU、GPU 的帶寬對比
但不同架構之間,比如 Pascal GTX 1080 vs. Maxwell GTX Titan X,帶寬並不能直接比較。這是由於不同的製造工藝對顯存帶寬的使用情況不同。這使得 GPU 之間的對比會稍嫌棘手。但即便如此,僅僅看帶寬還是能大致估出 GPU 的深度學習速度。
另一個需要考慮的因素,是與 cuDNN 的兼容性。並不是所有 GPU 架構都提供支持。幾乎所有的深度學習庫都藉助 cuDNN 進行卷積運算,這會把 GPU 的選項限制到 Kepler 開普勒或之後的架構,即 GTX 600 系列或更新。另外,Kepler GPU 大多很慢。因此,你應該選擇 GTX 900 或 1000 系的 GPU 獲得理想性能。
為了對每塊顯卡在深度學習上的性能差異,給大家一個大致估計,我創建了一個簡單的條形圖。讀這張圖的姿勢很簡單。比如說,一個 GTX 980 的速度大約是 0.35 個 Titan X Pascal;或者,一個 Titan X Pascal 幾乎比 GTX 980 快三倍。
AI 研習社提醒,我自己並沒有所有這些顯卡,我也並沒有在每張顯卡上做深度學習跑分評測。這些性能對比,是從顯卡參數以及計算評測(與深度學習同一級別的計算任務,比如密碼挖掘)中獲得。因此,這些只是大略估計。真實數字會有一點變化,但誤差應該是極小的,並不會影響排序。
另外需要注意的是,對 GPU 性能利用不足的小型神經網路,會讓性能更強的 GPU 在對比中吃虧。比如說,在 GTX 1080 Ti 上跑一個小型 LSTM(128 隱層; batch size > 64),並不會比在 GTX 1070 上快很多。得到下圖中的數字,你需要跑更大的神經網路,比如 1024 個隱層的 LSTM(batch size > 64)。
GPU 粗略性能對比
性價比分析
如果我們把上圖中的顯卡性能除以價格,就得到了每張卡的性價比指數,便是下圖。它在一定程度上反映出我們的裝機推薦。
性價比對比
新卡的價格來自美亞,舊卡來自 eBay。AI 研習社提醒,該圖的數字在很多方面都有些些微偏頗。首先,它沒有考慮顯存大小。通常情況下,你需要比 GTX 1050 Ti 更大的顯存來玩深度學習。因此,榜上靠前的部分顯卡雖然性價比很高,但是並不實用。
同樣的,用四個小 GPU 比用一個大 GPU 要困難得多,因此小 GPU 出於劣勢。另外,買 16 個 GTX 1050 Ti 不可能得到四個 GTX 1080 Ti 的性能,你還需要另外買 3 個 PC。如果我們把這一點也考慮進去,上圖看上去應該是這樣的:
這幅修正過的 GPU 性價比條形圖,把其他 PC 硬體的成本也納入考慮——把可兼容 4 GPU 的高端 PC 平台的成本,定為 $1500。該情況下,如果你想要買許多 GPU,不出意料的,更高端的 GPU 會佔優勢,因為 PC 平台+ 顯卡的整體性價比更高。
但其實,這還是有所偏頗的。不管四個 GTX 1080 Ti 性價比有多高,對普通人而言,這並沒有意義——因為買不起。因此,開發者真正感興趣的應是有限預算里的性價比。針對你的預算,最佳系統選項是什麼?你還需要考慮一些其它問題:你計劃讓這個 GPU 服役多久?幾年後,你是要升級 GPU 還是升級整機?將來是否希望出手舊 GPU,回收一些成本,再買個新的?
如果你能平衡多方面的考慮,最後的結論應該與下面的建議介意。
GPU 推薦
通常,我會推薦 GTX 1080 Ti, GTX 1080 或 GTX 1070。如果你的預算足夠買 GTX 1080 Ti,就不用猶豫了。GTX 1070 便宜一點,但仍然比上代 GTX Titan X (Maxwell) 要快。相比 GTX 980 Ti,所有這些卡都應該優先考慮,因為更大的顯存:11GB、8GB 而不是 6GB。8GB 顯存聽上去或許不多,但對許多任務是綽綽有餘的。對於 Kaggle 競賽里的大多數圖像數據集、deep style 和自然語言理解任務,你基本不會遇到問題。
如果你是第一次嘗試深度學習,只是偶爾參加 Kaggle 競賽,GTX 1060 是最好的入門 GPU。但我不會推薦 3GB 顯存的 GTX 1060。
在性價比方面,10 系顯卡是相當不錯的。GTX 1050 Ti, GTX 1060, GTX 1070, GTX 1080 和 GTX 1080 Ti 都排在前列。GTX 1060 和 GTX 1050 Ti 面向初學者,GTX 1070、GTX 1080 是適合初創公司的多面手,對部分學術研究和產業界也可。GTX 1080 Ti 則是全能高端選項。
我通常不推薦新推出的 Titan Xp,相比其性能,它定價過高,不如選 GTX 1080 Ti。但對於擺弄大型數據集或視頻數據的計算機視覺研究人員,Titan Xp 仍然有市場。在這些領域,每一 GB 顯存都有價值,而 Titan Xp 比 GTX 1080 Ti 多了 1GB。有了這兩者,我不會推薦 Titan X (Pascal) 。
如果你已經有了 GTX Titan X (Maxwell),想要升級到 Titan Xp。我的建議是:把錢存著買下一代,不值。
如果你預算有限,偏偏又需要 12GB 的內存,可以考慮買個二手的 GTX Titan X (Maxwell) 。
但是,對於大多數研究人員,最好的選項仍然是 GTX 1080 Ti。泰坦的額外 1GB 在大多數情況下沒什麼影響。
對我個人而言,會選擇多個 GTX 1070 或 GTX 1080 來做研究。我寧願多運行幾個慢一點的試驗,而不僅僅是運行一個更快的。在 NLP,內存要求並沒有計算機視覺那麼高,單只 GTX 1070/GTX 1080 對我來說就夠了。我需要處理的任務、如何進行試驗,決定了對我而言的最佳選擇,不管是 GTX 1070 還是 GTX 1080。
對於預算緊張的開發者而言,選擇餘地非常有限。租 AWS 上的 GPU 實體價格已經太高,還是買自己的 GPU 更划算。我不推薦 GTX 970,不僅慢,二手的價格也不夠實惠,而且它還存在顯存啟動問題。我的建議是加點錢上 GTX 1060,更快、顯存更大而且沒有毛病。GTX 1060 超出你的預算的話,我建議 4GB 版 GTX 1050 Ti。4GB 顯存確實限制比較大,但如果對模型做些修改,仍可以得到還可以的性能表現。對於大多數 Kaggle 競賽而言,GTX 1050 Ti 是合適的,在少部分比賽可能會影響你的競爭力。
如果你只是私下玩玩深度學習,沒打算認真鑽研,GTX 1050 Ti 是一個合適的選擇。
結論
有了本文中的所有信息,你大概已經能平衡顯存大小、帶寬、價格等多方面因素,來做出合理的購買決策。現在,我的建議是若預算充足,就上 GTX 1080 Ti, GTX 1080 或 GTX 1070。剛剛上手深度學習、預算有限的話,選 GTX 1060。預算實在有限,那麼 GTX 1050 Ti。計算機視覺研究人員可能會需要 Titan Xp。
研習社特供福利ID:OKweiwu
TensorFlow & 神經網路演算法高級應用班
「TensorFlow & 神經網路演算法高級應用班」 開課啦!
※如何用深度學習推薦電影?教你做自己的推薦系統!
※10行代碼,用大腦重量預測體重!矽谷AI網紅親身示範
※為什麼國內智能音箱難敵 Amazon Echo和Google Home?
※遠場語音交互體驗的思考:Alexa 為什麼不用屏幕和多輪對話?
※英偉達股價暴漲17%、5大AI新品,GTC上黃仁勛都講了啥?
TAG:唯物 |
※加量不加價!米Max3真的有性價比嗎?
※手機不該有性價比?段永平:性價比就是性能不夠好的借口
※不是小米和魅族才有性價比,這款手機性價比也很高,就是生不逢時
※不用跟風買新手機 iPhone X更具有性價比
※還有誰!能比濟南這幾家自助更有性價比!
※並不是所有的小米手機都有性價比,這四部才是最佳的選擇!
※你以為iQOO只有性價比,可它更是個「遊戲怪獸」
※華為這三款旗艦機,不僅有顏值性能,更有性價比
※vivo NEX上手3天體驗:你找不到比它更有性價比的國產手機
※學生開學選擇這幾款旗艦千元機,不僅僅有顏值,更有性能!
※我不是全面屏,但我更有性價比
※誰說只有小米才有性價比手機?這四部手機的性價比不輸小米
※什麼樣的人生,比較有性價比?
※你以為iQOO只有性價比,可它更是個"遊戲怪獸"
※原來耐克也有性價比!赤足Free RN 5.0跑步測評!
※其實小米創造的不僅只有性價比,這三點也同樣讓友商爭相模仿!
※iPhone XR真有性價比?3大不買理由句句扎心
※這款有性價比的千元機,性能很好,擁有很高的熱度
※四款有性價比的千元機,配置都很好,適合學生使用
※一款有性價比的千元機,擁有大容量電池,還有很高的性價比