英偉達Titan Xp之後,如何為深度學習挑選合適的GPU?
選自Tim Dettmers
作者:Tim Dettmers
參與:李澤南、微胖
4 月初,英偉達發布了 Titan X Pascal 的升級版——新一代旗艦顯卡 Titan Xp。它搭載 12G DDR5X 內存,速度為 11.4Gbps,共 3840 個 CUDA 核心(Titan X 和 GTX 1080 Ti 均為 3584 個),運行頻率為 1.6GHz,運算速度可達 12TFLOPs。這是英偉達在發布售價為 818 美元的 GeForce GTX 1080Ti 後,對於顯卡產品線的又一次調整。「這塊新顯卡將為用戶提供極端的性能,」英偉達在發布公告中表示。Titan Xp 的目標用戶不僅在於高端遊戲玩家,更包括需要訓練神經網路的研究者。隨後(4 月 9 日),Tim Dettmers 再度更新了他的系列博客。這次更新主要比較了不同 GPU 產品性價比,補充、更新最終推薦名單。機器之心編譯了更新後的博文全文(請注意,加粗部分為本次更新內容)。
深度學習是一個計算密集型領域,而 GPU 的選擇將從根本上決定你的深度學習實驗。沒有 GPU,一個實驗也許花費數月才能完成,或者實驗運行一天卻只關閉了被選擇的參數;而一個良好穩定的 GPU 可讓你在深度學習網路中快速迭代,在數天、數小時、數分鐘內完成實驗,而不是數月、數天、數小時。所以,購買 GPU 時正確的選擇很關鍵。那麼,如何選擇一個適合你的 GPU 呢?這正是本篇博文探討的問題,幫助你做出正確選擇。
對於深度學習初學者來說,擁有一個快速 GPU 非常重要,因為它可以使你迅速獲得有助於構建專業知識的實踐經驗,這些專業知識可以幫助你將深度學習應用到新問題上。沒有這種迅速反饋,從錯誤中汲取經驗將會花費太多時間,在繼續深度學習過程中也會感到受挫和沮喪。在 GPU 的幫助下,我很快就學會了如何在一系列 Kaggle 競賽中應用深度學習,並且在 Partly Sunny with a Chance of Hashtags Kaggle 競賽上獲得了第二名,競賽內容是通過一個給定推文預測氣象評分。比賽中,我使用了一個相當大的兩層深度神經網路(帶有兩個修正線性單元和 dropout,用於正則化),差點就沒辦法把這個深度網路塞進我的 6G GPU 內存。
應該使用多個 GPU 並聯嗎?
在 GPU 的幫助下,深度學習可以完成很多事情,這讓我感到興奮。我投身到多 GPU 的領域之中,用 InfiniBand 40Gbit/s 互連組裝了小型 GPU 集群。我瘋狂地想要知道多個 GPU 能否獲得更好的結果。我很快發現,不僅很難在多個 GPU 上並行神經網路。而且對普通的密集神經網路來說,加速效果也很一般。小型神經網路可以並行並且有效地利用數據並行性,但對於大一點的神經網路來說,例如我在 Partly Sunny with a Chance of Hashtags Kaggle 比賽中使用的,幾乎沒有加速效果。
隨後,我進一步試驗,對比 32 位方法,我開發了帶有模型並行性的新型 8 位壓縮技術,該技術能更有效地並行處理密集或全連接神經網路層。
然而,我也發現,並行化也會讓人沮喪得發狂。針對一系列問題,我天真地優化了並行演算法,結果發現:考慮到你投入的精力,即使使用優化過的自定義代碼,多個 GPU 上的並行注意的效果也並不好。你需要非常留意你的硬體及其與深度學習演算法交互的方式,這樣你一開始就能衡量你是否可以受益於並行化。
我的計算機配置:你可以看到三塊 GTX Titan 和一塊 InfiniBand 卡。這是用於深度學習的好配置嗎?
自那時起,GPU 的並行性支持越來越普遍,但距離全面可用和有效還差的很遠。目前,在 GPU 和計算機中實現有效演算法的唯一深度學習庫是 CNTK,它使用微軟的 1 比特量子化(有效)和 block momentum(很有效)的特殊並行化演算法。通過 CNTK 和一個包含 96 塊 GPU 的聚類,你可以擁有一個大約 90x-95x 的新線性速度。Pytorch 也許是跨機器支持有效並行化的庫,但是,庫目前還不存在。如果你想要在一台機器上做並行,那麼,CNTK、Torch 和 Pytorch 是你的主要選擇,這些庫具備良好的加速(3.6x-3.8x),並在一台包含 4 至 8 塊 GPU 的機器之中預定義了並行化演算法。也有其他支持並行化的庫,但它們不是慢(比如 2x-3x 的 TensorFlow)就是難於用於多 GPU (Theano),或者兼而有之。
如果你重視並行計算,我建議你使用 Pytorch 或 CNTK。
使用多 GPU 而無並行
使用多 GPU 的另外一個好處是:即使沒有並行演算法,你也可以分別在每個 GPU 上運行多個演算法或實驗。速度沒有變快,但是你能一次性通過使用不同演算法或參數得到更多關於性能信息。如果你的主要目標是儘快獲得深度學習經驗,這是非常有用的,而且對於想同時嘗試新演算法不同版本的研究人員來說,這也非常有用。
如果你想要學習深度學習,這也具有心理上的重要性。執行任務的間隔以及得到反饋信息的時間越短,大腦越能將相關記憶片段整合成連貫畫面。如果你在小數據集上使用獨立的 GPU 訓練兩個卷積網路,你就能更快地知道什麼對於性能優良來說是重要的;你將更容易地檢測到交叉驗證誤差中的模式並正確地解釋它們。你也會發現暗示需要添加、移除或調整哪些參數與層的模式。
所以總體而言,幾乎對於所有任務來說,一個 GPU 已經足夠了,但是加速深度學習模型,多個 GPU 會變得越來越重要。如果你想快速學習深度學習,多個廉價的 GPU 也很好。我個人寧願使用多個小的 GPU,而不是一個大的 GPU,即使是出於研究實驗的沒目的。
英偉達 GPU、AMD GUP 還是英特爾的 Xeon Phi?
英偉達的標準庫使得在 CUDA 中建立第一個深度學習庫很容易,但沒有適合 AMD 的 OpenCL 那樣強大的標準庫。目前還沒有適合 AMD 顯卡的深度學習庫——所以,只能選擇英偉達了。即使未來一些 OpenCL 庫可用,我仍會堅持使用英偉達:因為對於 CUDA 來說,GPU 計算或者 GPGPU 社區是很大的,對於 OpenCL 來說,則相對較小。因此,在 CUDA 社區,有現成的好的開源解決方案和為編程提供可靠建議。
此外,英偉達現在為深度學習賭上一切,即使深度學習還只是處於嬰兒期。押注獲得了回報。儘管現在其他公司也往深度學習投入了錢和精力,但由於開始的晚,目前依然很落後。目前,除了 NVIDIA-CUDA,其他任何用於深度學習的軟硬結合的選擇都會讓你受挫。
至於英特爾的 Xeon Phi,廣告宣稱你能夠使用標準 C 代碼,還能將代碼輕鬆轉換成加速過的 Xeon Phi 代碼。聽起來很有趣,因為你可能認為可以依靠龐大的 C 代碼資源。但事實上,其只支持非常一小部分 C 代碼,因此,這一功能並不真正有用,大部分 C 運行起來會很慢。
我曾研究過 500 多個 Xeon Phi 集群,遭遇了無止盡的挫折。我不能運行我的單元測試(unit test),因為 Xeon Phi 的 MKL(數學核心函數庫)並不兼容 NumPy;我不得不重寫大部分代碼,因為英特爾 Xeon Phi 編譯器無法讓模板做出適當約簡。例如,switch 語句,我不得不改變我的 C 介面,因為英特爾 Xeon Phi 編譯器不支持 C++ 11 的一些特性。這一切迫使你在沒有單元測試的情況下來執行代碼的重構,實在讓人沮喪。這花了很長時間。真是地獄啊。
隨後,執行我的代碼時,一切都運行得很慢。是有 bug(?)或者僅僅是線程調度器(thread scheduler)里的問題?如果作為運行基礎的向量大小連續變化,哪個問題會影響性能表現?比如,如果你有大小不同的全連接層,或者 dropout 層,Xeon Phi 會比 CPU 還慢。我在一個獨立的矩陣乘法(matrix-matrix multiplication)實例中複製了這一行為,並把它發給了英特爾,但從沒收到回信。所以,如果你想做深度學習,遠離 Xeon Phi!
給定預算下的最快 GPU
你的第一個問題也許是:用於深度學習的快速 GPU 性能的最重要特徵是什麼?是 cuda 內核數、時鐘速度還是 RAM 的大小?
以上都不是。最重要的特徵是內存帶寬。
簡言之,GPU 通過犧牲內存訪問時間(延遲)而優化了內存帶寬; 而 CPU 的設計恰恰相反。如果只佔用了少量內存,例如幾個數相乘(3*6*9),CPU 可以做快速計算,但是,對於像矩陣相乘(A*B*C)這樣佔用大量內存的操作,CPU 運行很慢。由於其內存帶寬,GPU 擅長處理佔用大量內存的問題。當然 GPU 和 CPU 之間還存在其他更複雜的差異。
如果你想購買一個快速 GPU,第一等重要的就是看看它的帶寬。
根據內存帶寬評估 GPU
CPU 與 GPU 的帶寬,按時間順序的縱向對比。帶寬是 GPU 計算速度高於 CPU 的一大原因。
帶寬可直接在一個架構內進行比較,例如, 比較 Pascal 顯卡 GTX 1080 與 GTX 1070 的性能;也可通過只查看其內存帶寬而直接比較。例如,GTX 1080 (320GB/s) 大約比 GTX 1070 (256 GB/s) 快 25%。然而, 在多個架構之間,例如 Pascal 對於 Maxwell 就像 GTX 1080 對於 GTX Titan X 一樣,不能進行直接比較,因為加工過程不同的架構使用了不同的給定內存帶寬。這一切看起來有點狡猾,但是,只看總帶寬就可對 GPU 的大致速度有一個很好的全局了解。在給定預算的情況下選擇一塊最快的 GPU,你可以使用這一維基百科頁面(List of Nvidia graphics processing units),查看 GB/s 中的帶寬;對於更新的顯卡(900 和 1000 系列)來說,列表中的價格相當精確,但是,老舊的顯卡相比於列舉的價格會便宜很多,尤其是在 eBay 上購買這些顯卡時。例如,一個普通的 GTX Titan X 在 eBay 上的價格大約是 550 美元。
然而,另一個需要考慮的重要因素是,並非所有架構都與 cuDNN 兼容。由於幾乎所有的深度學習庫都使用 cuDNN 做卷積運算,這就限制了對於 Kepler GPU 或更好 GPU 的選擇,即 GTX 600 系列或以上版本。最主要的是 Kepler GPU 通常會很慢。因此這意味著你應該選擇 900 或 1000 系列 GPU 來獲得好的性能。
為了大致搞清楚深度學習任務中的顯卡性能比較情況,我創建了一個簡單的 GPU 等價表。如何閱讀它呢?例如,GTX 980 的速度相當於 0.35 個 Titan X Pascal,或是 Titan X Pascal 的速度幾乎三倍快於 GTX 980。
請注意:我沒有所有這些顯卡,也沒有在所有這些顯卡上跑過深度學習基準。這些對比源於顯卡規格以及計算基準(有些加密貨幣挖掘任務需要比肩深度學習的計算能力)的比較。因此只是粗略的比較。真實數字會有點區別,但是一般說來,誤差會是最小的,顯卡的排序也沒問題。
也請注意,沒有充分利用 GPU 的小型網路會讓更大 GPU 看起來不那麼帥。比如,一個 GTX 1080 Ti 上的小型 LSTM(128 個隱藏單元;batch 大小大於 64)不會比在 GTX 1070 上運行速度明顯快很多。為了實現表格中的性能差異,你需要運行更大的網路,比如 帶有 1024 個隱藏單元(而且 batch 大小大於 64)的 LSTM。當選擇適合自己的 GPU 時,記住這一點很重要。
GPU 性能的粗略對比(2017 年 4 月 9 日)。注意:此對比僅適用於大計算量任務。
性價比分析(主要新增部分)
如果參照上圖,將所有 GPU 的性能除以各自的價格,我們就得到了性價比的分析圖,它一定程度上影響了我們在文末的建議。
性價比分析使用了新 GPU 在美國亞馬遜的價格,以及舊 GPU 在 eBay 上的價格。請注意:這一對比在很多方面可能存在偏差,例如它沒有考慮 GPU 內存大小的問題。
雖然 GTX 1050Ti 的性價比遙遙領先,但這是在沒有考慮內存的情況下算出的,在應用時,1050Ti 的內存常常不能滿足需求,這意味著你只能被迫選擇那些單位價格性能較低的高端顯卡。同樣,你也很難用 4 塊小 GPU 代替 1 塊大 GPU 執行任務,因為小 GPU 存在很多缺點。所以你不能簡單地通過買 16 塊 GTX 1050 Ti 來試圖達到 4 塊 GTX 1080 Ti 的性能,因為這可能意味著你需要多買三台計算機——性價比反而低了。如果考慮這些細節的話,性價比的對比圖應該是這樣:
將其他硬體價格考慮在內後,各型號 GPU 的性價比。參考狀態為:一個機箱,承載 4 塊 GPU,價值 1500 美元的高端主板和 CPU。
所以,在實際情況下,如果你想要更高的性能,毫無疑問大 GPU 更有性價比。當然這一對比可能仍然存在偏差。因為每個人的預算都不是無限的。在給定資金的情況下,哪種 GPU 是最合適的?你的 GPU 在被升級前要使用幾年?這些問題還有待解決。
所以在裝機上做出選擇並不容易。不過如果你充分考慮了所有問題,你所得出的結論應該與下面的推薦類似。
GPU 推薦(更新幅度較大)
總的來說,我會推薦 GTX 1080 Ti 、GTX 1080 或者 GTX 1070。它們都是優秀的顯卡,如果你買得起 GTX 1080 Ti 就入手吧。GTX 1070 更加便宜點,但是仍然比普通的 GTX Titan X (Maxwell) 要快一些。GTX 1080 比 GTX 1070 性價比要低一點,但是,既然 GTX 1080 Ti 價格跌得厲害,那麼現在 GTX 1080 就與 GTX 1070 有的一拼。考慮到增加的內存(11G 和 8G),這三張顯卡應該比 GTX 980 Ti 更值得選擇。
8G 內存看起來有點小,但是對於許多任務來說,綽綽有餘。比如,在 Kaggle 比賽,很多圖像數據集、深度風格以及自然語言理解任務這些問題上,你遇到的麻煩會少很多。GTX 1060 是最好的入門 GPU,如果你是首次嘗試深度學習或者有時想要使用它來參加 Kaggle 比賽。我不會推薦 GTX 1060 帶有 3G 內存的變體產品,既然其他 6G 內存產品能力已經十分有限了。不過,對於很多應用來說,6G 內存足夠了。GTX 1060 要比普通版本的 Titan X 慢一些,但是,在性能和價格方面(eBay 上)都可比肩 GTX 980。
如果要說物有所值呢,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 通殺高端選擇。
一般說來,我不會推薦英偉達 NVIDIA Titan Xp,就其性能而言,價格死貴了。繼續使用 GTX 1080 Ti 吧。不過,NVIDIA Titan Xp 在計算機視覺研究人員當中,還是有它的一席之地,這些研究人員通常要研究大型數據集或者視頻集。在這些領域裡,每 1G 內存都不會浪費,NVIDIA Titan Xp 比 GTX 1080 Ti 僅多出 1G 的內存也會帶來更多的處理優勢。我不會再推薦 NVIDIA Titan X (Pascal) 了,因為 NVIDIA Titan Xp 跑的快一些但價格幾乎差不多。不過呢,考慮到市場上這些 GPU 的稀缺,如果你買不到 NVIDIA Titan Xp,你也可以買 Titan X (Pascal)。或許可以從 eBay 上淘到便宜的 Titan X (Pascal)。
如果你已經有了 GTX Titan X (Maxwell) GPUs,升級到 NVIDIA Titan X (Pascal) 或 NVIDIA Titan Xp 就不值了。剩下這個錢買下一代 GPU 吧。
如果你差錢,但真需要 12G 內存,那麼,最好去 eBay 淘個 GTX Titan X (Maxwell)。
不過,絕大多數研究人員使用 GTX 1080 Ti 就可以了。對於絕大多數研究和應用來說,額外 1G 內存其實是不必要的。
我個人的研究工作,會用多個 GTX 1070 或者GTX 1080。我寧可多跑幾個測試,哪怕速度比僅跑一個測試(這樣速度會快些)慢一些。在自然語言處理任務中,內存限制並不像計算機視覺研究中那麼明顯。因此,GTX 1070/GTX 1080 就夠用了。我的研究任務以及運行實驗的方式決定了最適合我的選擇就是 GTX 1070/GTX 1080。
現在,對於那些手頭很緊又要買 GPU 的人來說,選擇更少了。AWS 的 GPU 實例很貴而且現在也慢,不再是一個好的選擇,如果你的預算很少的話。我不推薦 GTX 970,因為速度慢還死貴,即使在 eBay 上入二手(150 刀),而且還有存儲及顯卡啟動問題。相反,多弄點錢買一個 GTX 1060,速度會快得多,存儲也更大,還沒有這方面的問題。如果你只是買不起 GTX 1060,我推薦 4GB RAM 的 GTX 1050 Ti。4GB 會有限,但是你可以玩轉深度學習了,如果你調一下模型,就能獲得良好的性能。GTX 1050 Ti 適合絕大多數 kaggle 競賽,儘管可能會在一些比賽中限制你的競爭力。
如果你僅僅是想嘗試一下深度學習,GTX 1050 Ti(2G 或 4G 內存)是一個不錯的選擇。
AWS GPU 實例
在這篇博文的前一個版本中,我推薦了 AWS GPU 的現貨實例,但現在我不會再推薦它了。目前 AWS 上的 GPU 相當慢(一個 GTX 1080 的速度是 AWS GPU 的 4 倍)並且其價格在過去的幾個月里急劇上升。現在看起來購買自己的 GPU 又似乎更為明智了。
結論
這篇文章里的所有信息應該能幫助你通過平衡內存大小的需要、帶寬速度 GB/s 以及 GPU 價格來找到合適的 GPU 了,這些推理在未來許多年中都會是可靠的。
但是,現在我所推薦的是 GTX 1080 Ti 、 GTX 1070 或者 GTX 1080,只要你買得起;如果你剛涉足深度學習或者手頭緊,那麼 GTX 1060 或許適合;如果你的錢不多,就買 GTX 1050 Ti 吧;如果你是一位計算機視覺研究人員,或許該入手 Titan Xp。
總結性建議
總的說來最好的 GPU:Titan Xp
有成本效益但價格高的:GTX 1080 Ti, GTX 1070,GTX 1080
有成本效益而且便宜:GTX 1060(6GB)
用來處理大於 250G 數據集:GTX Titan X (Maxwell), NVIDIA Titan X Pascal, or NVIDIA Titan Xp
我的錢不多:GTX 1060(6GB),用於常規比賽,或者 GTX 1080 Ti 用於「深度學習比賽」
我幾乎沒錢:GTX 1050 Ti(4GB)
我參加 Kaggle 比賽: 用於任何常規比賽,GTX 1060 (6GB), 如果是深度學習比賽,GTX 1080 Ti
我是一名有競爭力的計算機視覺研究人員:NVIDIA Titan Xp ; 不要從現有的 Titan X (Pascal or Maxwell) 進行升級
我是一名研究人員:GTX 1080 Ti。有些情況下,比如自然語言處理任務,GTX 1070 或者 GTX 1080或許是可靠的選擇——看一下你當前模型的存儲要求。
想建立一個 GPU 集群:這真的很複雜,你可以從這裡得到一些思路:http://t.cn/RXvx5X5
剛開始進行深度學習,我是認真的:開始用 GTX 1060(6GB)。根據你下一步的情況(創業?Kaggle 比賽?研究還是應用深度學習)賣掉你的 GTX 1060 然後換成更適合使用目的的 GPU。
※新手教程:在新應用中實踐深度學習的最佳建議
※深度學習和量子物理的共同點,或可用物理學打開深度學習黑箱
※解讀|合成梯度,不需反向傳播的深度學習
※最強對決:谷歌AlphaGo 5月決戰柯潔
TAG:機器之心 |
※「LeCun論戰Yoav」自然語言GAN惹爭議:深度學習遠離NLP?
※英偉達Volta架構:為深度學習而生的Tensor Core
※Yoav與LeCun深度學習之爭:谷歌VP談NLP「三幕劇」
※「Ian Goodfellow 五問」GAN、深度學習,如何與谷歌競爭
※雲CPU上的TensorFlow基準測試:優於雲GPU的深度學習
※從Yoav與LeCun爭論,看當今的深度學習與NLP風氣
※吳恩達deeplearning.ai的深度學習課程怎麼樣?DT君親測後為你劃重點
※Yoav撰文再回應LeCun:「深度學習這群人」不了解NLP
※XGBoost與深度學習到底孰優孰劣?都說XGBoost好用,為什麼名氣總不如深度學習?
※Goodfellow五問:GAN、深度學習,如何與谷歌競爭
※利用 OpenCL? 平台和英特爾? Stratix? 10 FPGA 加快深度學習發展
※從深度攝像頭說起,國產手機何時能用上iPhone X的「Face ID」?
※利用 OpenCL? 平台和英特爾 Stratix 10 FPGA 加快深度學習發展
※深度學習框架TensorFlow、Caffe、MXNet、PyTorch如何抉擇?6 位大咖現身說法
※Intel+Cloudera,用BigDL玩轉深度學習
※Autodesk與英偉達深度合作,讓VR成為設計師的新利器
※DeepMind最新論文提出「Rainbow」,將深度強化學習組合改進
※阿根廷Satellogic公司創始人兼CEO Emiliano Kargieman——期待與中國深度合作
※設計神器Affinity Designer要秒殺PS?與PS、AI深度對比測評竟然是這結果!