更新2080Ti後,深度學習該選什麼顯卡?
來自專欄論智186 人贊了文章
作者:Tim Dettmers
編譯:Bot
深度學習對算力要求很高,GPU的選擇將從根本上決定你的深度學習體驗。如果沒有GPU,可能你完成整個實驗需要幾個月,甚至當你只想看看參數調整、模型修改後的效果時,那可能也得耗費1天或更久的時間。
憑藉性能良好、穩定的GPU,人們可以快速迭代深層神經網路的架構設計和參數,把原本完成實驗所需的幾個月壓縮到幾天,或是把幾天壓縮到幾小時,把幾小時壓縮到幾分鐘。因此,在選購GPU時做出正確選擇至關重要。
下面是華盛頓大學博士Tim Dettmers結合競賽經驗給出的GPU選擇建議,有需要的讀者可把它可作為參考意見。
當一個人開始涉足深度學習時,擁有一塊高速GPU是一件很重要的事,因為它能幫人更高效地積累實踐經驗,而經驗是掌握專業知識的關鍵,能打開深入學習新問題的大門。如果沒有這種快速的反饋,我們從錯誤中汲取經驗的時間成本就太高了,同時,過長的時間也可能會讓人感到挫敗和沮喪。
以我個人的經驗為例。通過配置合理的GPU,我在短時間內就學會把深度學慣用於一系列Kaggle競賽,並在Chaly of Hashtags比賽中取得第二名。當時我構建了一個相當大的兩層深層神經網路,裡面包含用於整流的線性神經元和用於正則化的損失函數。
像這麼深的網路,我手裡的6GB GPU是跑不動的。所以之後我入手了一塊GTX Titan GPU,這也是最終獲得佳績的主要原因。
終極建議
性能最好的GPU:RTX 2080 Ti
性價比高,但小貴:RTX 2080, GTX 1080
性價比高,同時便宜:GTX 1070, GTX 1070 Ti, GTX 1060
使用的數據集>250GB:RTX 2080 Ti, RTX 2080
預算很少:GTX 1060 (6GB)
幾乎沒預算:GTX 1050 Ti (4GB)/CPU(建模)+ AWS/TPU(訓練)
參加Kaggle競賽:GTX 1060 (6GB)(建模)+ AWS(最終訓練)+ fast ai庫
有前途的CV研究員:GTX 2080 Ti; 在2019年升級到RTX Titan
普通研究員:RTX 2080 Ti/GTX 10XX -> RTX Titan,注意內存是否合適
有雄心壯志的深度學習菜鳥:從GTX 1060 (6GB)、GTX 1070、GTX 1070 Ti開始,慢慢進階
隨便玩玩的深度學習菜鳥:GTX 1050 Ti (4或2GB)
我應該多買幾塊GPU嗎?
那時候,看到GPU能為深度學習提供這麼多的可能性,我很興奮,於是鑽進了多GPU的「深坑」:我組裝了一個IB 40Gbit/s的小型GPU陣列,希望它能產出更好的結果。
但現實很殘酷,我很快就被「打臉」了,在多個GPU上並行訓練神經網路不僅非常困難,一些常用的加速技巧也收效甚微。誠然,小型神經網路可以通過數據並行性大大降低訓練用時,但由於我構建的是個大型神經網路,它的效率並沒有多大變化。
面對失敗,我深入研究了深度學習中的並行化,並在2016年的ICLR上發表了一篇論文:8-Bit Approximations for Parallelism in Deep Learning。在論文中,我提出了8位近似演算法,它能在包含96個GPU的系統上獲得50倍以上的加速比。與此同時,我也發現CNN和RNN非常容易實現並行化,尤其是在只用一台計算機或4個GPU的情況下。
所以,雖然現代GPU並沒有針對並行訓練做過高度優化,但我們仍然可以「花式」提速。
此外,和三年前相比,目前在主流框架中使用並行技術的體驗已經相當不錯了。對於CNN,如果使用了2/3/4塊GPU,那麼你可以預期的加速倍數就是1.9x / 2.8x / 3.5x;對於RNN,序列長度是最重要的參數,所以在常規NLP任務中,由GPU數量帶來的加速效果和CNN基本一致。
因此,在當前使用多個GPU還是比用單個GPU有優勢,如果你與算夠,多買幾塊很有意義。
N卡?A卡?Intel?谷歌?亞馬遜?
NVIDIA:主導者
在很早的時候,NVIDIA就已經提供了一個標準庫,這使得在CUDA中建立深度學習庫非常容易。再加上那時AMD的OpenCL沒有意識到標準庫的前景,NVIDIA結合這個早期優勢和強大的社區支持,讓CUDA社區規模實現迅速擴張。發展至今,如果你是NVIDIA的用戶,你就能在各個地方輕鬆找到深度學習的教程和資源,大多數庫也都對CUDA提供最佳支持。
因此,如果要入手NVIDIA的GPU,強大的社區、豐富的資源和完善的庫支持絕對是最重要的因素。
另一方面,考慮到NVIDIA在去年年底不聲不響地修改了GeForce系列顯卡驅動最終用戶許可協議:數據中心只被允許使用Tesla系列GPU,而不能用GTX或RTX卡。雖然他們到現在都沒有定義「數據中心」是什麼,但考慮到其中的法律隱患,現在不少機構和大學已經開始被迫購買更貴但效率低的Tesla GPU——即便價格上可能相差10倍,Tesla卡相比GTX和RTX卡並沒有真正優勢。
這意味著作為個人買家,當你接受了N卡的便捷性和優勢時,你也要做好接受「不平等」條款的心理準備,因為NVIDIA在這一領域佔據壟斷地位。
AMD:功能強大但缺乏支持
在2015年的國際超算會議上,AMD推出HIP,可以把針對CUDA開發的代碼轉換成AMD顯卡可以運行的代碼。這意味著如果我們在HIP中擁有所有GPU代碼,這將是個重要的里程碑。但三年過去了,我們還是沒能見證A卡在深度學習領域的崛起,因為這實踐起來太困難,尤其是移植TensorFlow和PyTorch代碼庫。
確切來說,TensorFlow是支持AMD顯卡的,所有常規網路都可以在AMD GPU上運行,但如果你想構建新網路,它就會出現不少bug,讓你怎麼都不能如意。此外,ROCm社區也不是很大,沒法直接解決這個問題,再加上缺乏深度學習開發的資金支持,AMD比肩NVIDIA遙遙無期。
然而,如果我們對比兩家的下一代產品,可以發現AMD的顯卡顯示出了強勁性能,未來,Vega 20可能會擁有類似Tensor-Core計算單元的計算能力。
總的來說,對於只是希望模型能在GPU上穩穩噹噹跑完的普通用戶,目前我還找不到推薦AMD的理由,選N卡是最合適的。但如果你是GPU開發者或是希望對GPU計算做出貢獻的人,你可以支持AMD,打擊NVIDIA的壟斷地位,因為這將使所有人長期受益。
Intel:努力嘗試
用過Intel家的Phi後,我簡直要「一生黑」。我認為它們不是NVIDIA或AMD卡的真正競爭對手,所以這裡我們長話短說。如果你決定入手Xeon Phi,下面是你可能會遇到的問題:支持很爛、計算代碼段比CPU慢、編寫優化代碼非常困難、不完全支持C++11特徵、編譯器不支持一些重要的GPU設計模式、和其他庫的兼容性差(NumPy和SciPy)等等。
我真的很期待Intel的Nervana神經網路處理器(NNP),但自提出以來,它就陷入了無休無止的跳票。根據最近的說法,NNP會在2019年第三/第四季度出貨,但參考他們家的Xeon Phi,如果我們想買顆技術成熟的NNP,估計至少得等到2020年。
谷歌:按需提供的廉價服務?
到現在為止,Google TPU已經發展成為非常成熟的雲產品,性價比超高。要理解TPU,我們可以把它簡單看做是打包在一起的多個GPU。如果你曾對比過Tensor-Core-enabled V100和TPUv2在ResNet50上的性能差距,如下圖所示,可以發現,兩者的準確率差不多,但TPU更便宜。
那麼如果手頭緊又期望高性能,是不是就選TPU呢?是,也不是。如果你要做論文研究,或是會頻繁用到它,TPU確實是個經濟實惠的選擇。但是,如果你上過fast ai的課,用過fast ai庫,你就會發現自己可以用更低的價格實現更快的收斂——至少對於CNN目標識別來說是這樣的。
此外,雖然相比其他同類產品,TPU性價比更高,但它也存在不少問題:(1)TPU不能用於fast ai庫,即PyTorch;(2)TPU演算法主要依賴谷歌內部團隊;(3)沒有統一的高級庫,無法為TensorFlow提供良好的標準。
以上三點都是TPU的痛點,因為它需要單獨的軟體才能跟上深度學習演算法的更新迭代。我相信谷歌團隊已經完成了一些列工作,但它們對某些任務的支持效果還是個未知數。因此,目前的TPU更適合計算機視覺任務,並作為其他計算資源的補充,我不建議開發者把它當做自己的主要深度學習資源。
亞馬遜:可靠但昂貴
AWS的GPU很豐富,價格也有點高。如果突然需要額外的計算,AWS GPU可能是一個非常有用的解決方案,比如論文deadline快到了。
經濟起見,如果要購買亞馬遜服務,你最好只跑一部分網路,而且確切知道哪些參數最接近最佳選擇。否則,這些因為自己失誤多出來的花費可能會讓你的錢包見底。所以,即便亞馬遜的雲GPU很快,我們還是自己買一塊專用的實體顯卡吧,GTX 1070很貴,但它至少也能用個一兩年啊。
是什麼決定了GPU的快慢?
是什麼讓這個GPU比那個GPU更快?面對這個問題,可能你最先想到的是看和深度學習有關的顯卡特徵:是CUDA核心嗎?主頻多少?RAM多大?
雖然「看內存帶寬」是個「萬金油」的說法,但我不建議這麼做,因為隨著GPU硬體和軟體的多年開發,現在帶寬已經不再是性能的唯一代名詞。尤其是消費級GPU中Tensor Cores的引入,這個問題就更複雜了。
現在,如果要判斷顯卡性能好不好,它的指標應該是帶寬、FLOPS和Tensor Cores三合一。要理解這一點,我們可以看看矩陣乘積和卷積這兩個最重要的張量操作是在哪裡被加速的。
提到矩陣乘積,最簡單有效的一個理念是它受帶寬限制。如果你想用LSTM和其他需要經常進行大量矩陣乘積運算的RNN,那麼內存帶寬是GPU最重要的特性。類似地,卷積受計算速度約束,因此對於ResNets和其他CNN,GPU上的TFLOP是性能的最佳指標。
Tensor Cores的出現稍稍改變了上述平衡。它們是非常簡單的專用計算單元,可以加速計算——但不是內存帶寬 ——因此對CNN來說,如果GPU里有Tensor Core,它們帶來的最大改善就是速度提高約30%到100%。
雖然Tensor Cores只能提高計算速度,但它們也可以使用16bit數進行計算。這對矩陣乘法也是一個巨大優勢,因為在具有相同存儲器帶寬的矩陣中,16bit數的信息傳輸量是32bit數的兩倍。數字存儲器大小的削減對於在L1高速緩存中存儲更多數字特別重要,實現了這一點,矩陣就越大,計算效率也更高。所以如果用了Tensor Cores,它對LSTM的提速效果約為20%至60%。
請注意,這種加速不是來自Tensor Cores本身,而是來自它們進行16bit數計算的能力。AMD GPU也支持16bit數計算,這意味著在進行乘積運算時,它們其實和具有Tensor Cores的NVIDIA顯卡一樣快。
Tensor Cores的一個大問題是它們需要16位浮點輸入數據,這可能會引入一些軟體支持問題,因為網路通常使用32位。如果沒有16位輸入,Tensor Cores將毫無用處。但是,我認為這些問題將很快得到解決,因為Tensor Cores太強大了,現在它們已經出現在消費級GPU中,未來,使用它的人只會越來越多。請注意,隨著16bit數被引入深度學習,GPU內存其實也相當於翻倍了,因為現在我們可以在同樣大小的內存中存儲比之前多一倍的參數。
總的來說,最好的經驗法則是:如果用RNN,請看帶寬;如果用卷積,請看FLOPS;如果有錢,上Tensor Cores(除非你必須購買Tesla)。
成本效益分析
GPU的成本效益可能是選擇GPU最重要的標準。我圍繞帶寬、TFLOP和Tensor Cores做了一項新的性價比分析。首先,顯卡的銷售價格來自亞馬遜和eBay,兩個平台的權重是50:50;其次,我查看了有無Tensor Cores的顯卡在LSTM和CNN上的性能指標,對這些指標做歸一化處理後進行加權,獲得平均性能得分;最後,我計算得到了下面這個性能/成本比率:
根據初步數據,我們可以發現RTX 2080比RTX 2080 Ti更實惠。雖然後者在Tensor Cores和帶寬上提升了40%,在價格上提高了50%,但這不意味著它能在深度學習性能上提升40%。對於LSTM和其他RNN,GTX 10系列和RTX 20系列帶給它們的性能提升主要來自支持16bit數計算,而不是Tensor Cores;對於CNN,雖然Tensor Cores帶來的計算速度提升效果明顯,但它對卷積體系結構的其他部分也不存在輔助作用。
因此,相比GTX 10系列,RTX 2080在性能上實現了巨大提升;相比RTX 2080 Ti,它在價格上又佔盡優勢。所以RTX 2080性價比最高是可以理解的。
此外,圖中的數據不可迷信,這個分析也存在一些問題:
- 如果你買了性價比更高但速度很慢的顯卡,那麼之後你的計算機可能就裝不下更多顯卡了,這是一種資源浪費。所以為了抵消這種偏差,上圖會偏向更貴的GPU。
- 這個圖假設我們用的是帶Tensor Cores和16bit數計算的顯卡,這意味著對於支持32bit數計算的RTX卡,它們的性價比會被統計得偏低。
- 考慮到「礦工」的存在,RTX 20系列開售後,GTX 1080和GTX 1070可能會迅速降價,這會影響性價比排名。
- 因為產品還未發布,表中RTX 2080和RTX 2080 Ti的數字存在水分,不可盡信。
綜上可得,如果只從性價比角度看,選擇最好的GPU是不容易的。所以如果你想根據自身條件選一款中庸的GPU,下面的建議是合理的。
關於GPU選擇的一般建議
目前,我會推薦兩種主要的選擇方法:(1)購買RTX系列,然後用上兩年;(2)等新品發布後,購買降價的GTX 1080/1070/1060或GTX 1080Ti / GTX 1070Ti。
很長一段時間內,我們一直在等GPU升級,所以對於很多人來說,第一種方法最立竿見影,現在就可以獲得最好的性能。雖然RTX 2080更具成本效益,但RTX 2080 Ti內存更大,這對CV研究人員是個不小的誘惑。如果你是追求一步到位的人,買這兩種顯卡都是明智的選擇,至於選擇哪種,除了預算,它們的主要區別就是你究竟要不要RTX 2080 Ti的額外內存。
如果你想用16bit計算,選Ti,因為內存會翻倍;如果沒這方面的需要,2080足矣。
至於第二種方法,它對那些想要追求更大的升級、想買RTX Titan的人來說是個不錯的選擇,因為GTX 10系列顯卡可能會降價。請注意,GTX 1060有時會缺少某些型號,因此當你發現便宜的GTX 1060時,首先要考慮它的速度和內存是否真正滿足自己的需求。否則,便宜的GTX 1070、GTX 1070 Ti、GTX 1080和GTX 1080 Ti也是絕佳的選擇。
對於創業公司、Kaggle競賽參賽者和想要學習深度學習的新手,我的推薦是價格便宜的GTX 10系列顯卡,其中GTX 1060是非常經濟的入門裝備。
如果是想在深度學習上有所建樹的新手,一下子買幾個GTX 1060組裝成陣列也不錯,一旦技術純熟,你可以在2019年把顯卡升級到RTX Titan。
如果你缺錢,我會推薦4GB內存的GTX 1050 Ti,當然如果買得起,還是盡量上1060。請注意,GTX 1050 Ti的優勢在於它不需要連接到PSU的額外PCIe,所以你可以把它直接插進現有計算機,節省額外資金。
如果缺錢又看重內存,eBay上的GTX Titan X也值得入手。
我個人會買一塊RTX 2080 Ti,因為我的GTX Titan X早該升級了,而且考慮到研究需要的內存比較大,加上我打算自己開發一個Tensor Core演算法,這是唯一的選擇。
小結
看到這裡,相信現在的你應該知道哪種GPU更適合自己。總的來說,我提的建議就是兩個:一步到位上RTX 20系列,或是買便宜的GTX 10系列GPU,具體參考文章開頭的「終極建議」。性能和內存,只要你真正了解自己要的是什麼,你就能挑出屬於自己的最合適的顯卡。
推薦閱讀:
TAG:深度學習DeepLearning | 圖形處理器GPU | 顯卡 |