1. 程式人生 > 其它 >深度學習的GPU:深度學習中使用GPU的經驗和建議

深度學習的GPU:深度學習中使用GPU的經驗和建議

深度學習是一個計算需求強烈的領域,您的GPU的選擇將從根本上決定您的深度學習體驗。在沒有GPU的情況下,這可能看起來像是等待實驗結束的幾個月,或者執行一天或更長時間的實驗,只是看到所選引數已關閉。

有了一個好的,堅實的GPU,人們可以快速迭代深度學習網路,並在幾天而不是幾個月,幾小時而不是幾天,幾分鐘而不是幾小時的時間內執行實驗。因此,在購買GPU時做出正確的選擇至關重要。那麼你如何選擇適合你的GPU呢?這個部落格文章將深入探討這個問題,並會借給你的建議,這將有助於你做出適合你的選擇。

擁有高速GPU是開始學習深度學習的一個非常重要的方面,因為這可以讓您快速獲得實踐經驗,這是建立專業知識的關鍵,您可以將深度學習應用於新問題。如果沒有這種快速的反饋,只需花費太多的時間從錯誤中學習,而繼續深入的學習可能會令人沮喪和沮喪。

藉助GPU,我很快就學會了如何在一系列Kaggle比賽中應用深度學習,並且我使用深度學習方法在“部分陽光”中獲得了第二名,,這是預測給定鳴叫的天氣評分的任務。在比賽中,我使用了一個相當大的兩層深度神經網路,整數線性單位和正則化退出,這個深度網路幾乎適合我的6GB GPU記憶體。

我應該得到多個GPU?

受到GPU深度學習的激勵,我通過組裝一個帶有InfiniBand 40Gbit / s互連的小型GPU叢集,使自己陷入了多GPU領域。我很高興看到多個GPU可以獲得更好的結果。

我很快發現,要在多個GPU上高效地並行化神經網路不僅非常困難,而且對於稠密神經網路來說,加速只是平庸的。小型神經網路可以使用資料並行性相當高效地進行並行化處理,但是像Partly Sunny中使用的大型神經網路幾乎沒有任何加速。

後來我進一步冒險,我開發了一種新的8位壓縮技術,與32位方法相比,您可以更高效地將密集或完全連線的層並行化。

不過,我也發現並行化可能會令人非常沮喪。我天真地優化了一系列問題的並行演算法,只是發現即使在多個GPU上優化的定製程式碼並行性也不能很好地工作,因為您必須付出努力。您需要非常瞭解您的硬體,以及它如何與深度學習演算法進行互動,以評估您是否能從並行化中受益。

在我的主電腦上安裝:您可以看到三個GXT Titan和一個InfiniBand卡。這是一個深入學習的好設定嗎?

自那時以來,GPU的並行性支援更為普遍,但與通用可用性和高效性相差甚遠。當前在GPU和計算機之間實現高效演算法的唯一深度學習庫是CNTK,它使用微軟的1位量化(高效)和塊動量(非常高效)的特殊並行演算法。

有了CNTK和96個GPU的叢集,您可以預期約90x-95x的新線速度。Pytorch可能是支援跨機器的高效並行性的下一個庫,但圖書館還沒有。如果你想在一臺機器上並行,那麼你的選擇主要是CNTK,Torch,Pytorch。這些庫產生良好的加速(3.6x-3.8x),並在一臺機器上具有預定義的並行演算法,最多支援4個GPU。還有其他支援並行性的庫,

如果你把並行的價值,我建議使用Pytorch或CNTK。

使用多個GPU沒有並行性

使用多個GPU的另一個優勢是,即使您沒有並行化演算法,您也可以在每個GPU上分別執行多個演算法或實驗。你沒有獲得加速,但是通過一次使用不同的演算法或引數,你可以獲得更多的效能資訊。如果您的主要目標是儘快獲得深入的學習體驗,這對於想要同時嘗試多個版本的新演算法的研究人員非常有用。

如果你想學習深度學習,這在心理上很重要。執行任務和接收任務的時間間隔越短,大腦就越能夠將相關記憶片段整合到一個連貫的畫面中。如果您在小資料集上的單獨GPU上訓練兩個卷積網路,您將更快感受到重要的效能表現; 您將更容易在交叉驗證錯誤中檢測到模式並正確解釋它們。你將能夠檢測到模式,給你提示什麼引數或層需要新增,刪除或調整。

總體而言,可以說一個GPU幾乎適用於任何任務,但是多個GPU對於加速您的深度學習模型變得越來越重要。如果您想快速學習深度學習,多款便宜的GPU也非常出色。我個人擁有相當多的小型GPU,甚至是我的研究實驗。

我應該得到什麼樣的加速器?NVIDIA GPU,AMD GPU或Intel Xeon Phi?

NVIDIA的標準庫使得在CUDA中建立第一個深度學習庫非常容易,而AMD的OpenCL則沒有這樣強大的標準庫。現在,AMD卡沒有很好的深度學習庫,所以就是NVIDIA。即使未來有一些OpenCL庫可用,我也會堅持使用NVIDIA:GPU計算或GPGPU社群對於CUDA來說是非常大的,而對於OpenCL而言是相當小的。因此,在CUDA社群中,很容易獲得良好的開源解決方案和可靠的建議。

此外,即使深度學習剛剛起步,NVIDIA仍然深入學習。這個賭注得到了回報。而其他公司現在把錢和精力放在深度學習上,由於起步較晚,他們還是很落後。目前,除NVIDIA-CUDA之外,使用任何軟硬體組合進行深度學習都將導致重大挫折。

在英特爾至強融核的情況下,廣告宣稱您可以使用標準的C程式碼,並將程式碼輕鬆轉換為加速Xeon Phi程式碼。這個特性聽起來很有趣,因為你可能認為你可以依靠C程式碼的龐大資源。但是,實際上只有很小部分的C程式碼是被支援的,所以這個功能並不是很有用,而且你可以執行的大部分C程式碼都很慢。

我曾經在一個至少有500個至強Phis的Xeon Phi叢集上工作,對它的失望是無止境的。我無法執行我的單元測試,因為Xeon Phi MKL與Python Numpy不相容; 我不得不重構大部分程式碼,因為英特爾至強融核編譯器無法對模板進行適當的縮減 - 例如對於switch語句; 我不得不改變我的C介面,因為Intel Xeon Phi編譯器不支援一些C ++ 11功能。所有這些都導致了我不得不在單元測試中執行的重構。這花了很多時間。這是地獄。

然後當我的程式碼最終執行時,一切都非常緩慢。執行緒排程程式(?)中存在錯誤(?)或問題,如果您操作的張量大小連續發生變化,則會使效能癱瘓。例如,如果您有不同大小的完全連線的圖層或丟棄圖層,則Xeon Phi比CPU要慢。我在一個孤立的矩陣矩陣乘法例子中複製了這個行為,並將它傳送給了Intel。我從來沒有從他們那裡聽到。所以,如果你想深入學習,那就離開至強菲斯吧!

給定預算最快的GPU

你的第一個問題可能是深度學習的GPU效能最重要的特性是:cuda核心?時鐘速度?記憶體大小?

這兩者都不是,但深度學習效能最重要的特徵是記憶體頻寬。

簡而言之:GPU針對記憶體頻寬進行了優化,同時犧牲了記憶體訪問時間(延遲)。CPU的設計恰恰相反:如果涉及少量記憶體(例如乘以幾個數字(3 * 6 * 9)),CPU可以快速計算,但是對於大量記憶體(如矩陣乘法(A * B * C)他們很慢。由於記憶體頻寬的限制,圖形處理器擅長涉及大量記憶體的問題。當然,GPU和CPU之間還有更復雜的區別,如果您對GPU深度學習的深度感興趣,您可以在我的quora答案中閱讀關於這個問題的更多資訊。

所以如果你想購買一個快速的GPU,首先要看看那個GPU的頻寬。

通過記憶體頻寬評估GPU

隨著時間的推移,CPU和GPU的頻寬比較:頻寬是GPU比CPU更快的主要原因之一。

頻寬可以直接在體系結構中進行比較,例如像GTX 1080和GTX 1070這樣的Pascal卡的效能可以直接通過單獨檢視記憶體頻寬進行比較。例如,GTX 1080(320GB / s)比GTX 1070(256 GB / s)快25%(320/256)。然而,跨體系結構,例如像GTX 1080與GTX Titan X之類的Pascal與Maxwell不能直接比較,因為不同製造工藝的架構(以奈米為單位)如何不同地利用給定的記憶體頻寬。這使得一切都有點棘手,但僅僅整體頻寬就能讓你很好地概括一下GPU的速度。為了確定一個給定的預算最快的GPU可以使用這個維基百科頁面以GB / s為單位檢視頻寬; 上市的價格是相當準確的新卡(900和1000系列),但較舊的卡比明顯便宜的價格 - 特別是如果你通過eBay購買這些卡。例如,一個普通的GTX Titan X在eBay上的售價約為550美元。

另一個需要考慮的重要因素是並不是所有的架構都與cuDNN相容。由於幾乎所有深度學習庫都使用cuDNN進行卷積運算,因此將GPU的選擇限制在開普勒GPU或更高的版本,即GTX 600系列或更高版本。最重要的是,開普勒GPU一般都很慢。所以這意味著你應該選擇900或1000系列的GPU來獲得更好的效能。

為了粗略地估計這些卡在深度學習任務上的表現,我構建了一個簡單的GPU等值圖。如何閱讀這個?例如,一個GTX 980與0.35 Titan X Pascal一樣快,或者換句話說,Titan X Pascal幾乎是GTX 980的三倍。

請注意,我自己並沒有所有這些卡,我沒有在所有這些卡上執行深入的學習基準。比較是從卡片規格與計算基準的比較中得出的(一些加密貨幣挖掘的情況是與深度學習在計算上相當的任務)。

所以這些是粗略的估計。實際的數字可能會有所不同,但通常錯誤應該是最小的,卡的順序應該是正確的。另外請注意,那些利用GPU不足的小型網路會讓更大的GPU看上去不好。例如,GTX 1080 Ti上的小型LSTM(128個隱藏單元;批量大小> 64)不會比在GTX 1070上執行速度快得多。為了獲得圖表中顯示的效能差異,需要執行更大的網路具有1024個隱藏單位的LSTM(批量大小> 64)。

GPU之間粗略的效能比較。此比較僅適用於較大的工作負載。

成本效益分析

如果我們現在從上面畫出粗略的表現指標,並將它們除以每張卡片的成本,那麼就是如果我們為您賺取高昂的成本,我們最終會得出一個情節,這在某種程度上反映了我的建議。

使用上面粗略的效能度量標準和亞馬遜的價格來計算新卡的成本效率和舊卡的eBay價格。請注意,這個數字在很多方面都有偏差,例如它沒有考慮到記憶體

但請注意,這種對GPU排名的衡量標準是相當有偏見的。首先,這不考慮GPU的記憶體大小。您經常需要比GTX 1050 Ti所能提供的記憶體更多的記憶體,因此雖然具有成本效益,但一些高階卡卻沒有實際可行的解決方案。

類似地,使用4個小型GPU而不是1個大型GPU是困難的,因此小型GPU具有缺點。此外,你不能購買16個 GTX 1050 Ti來獲得4 GTX 1080 Ti的效能,你還需要購買3臺額外的昂貴的電腦。如果我們考慮這最後一點,圖表看起來像這樣。

考慮到其他硬體的價格,GPU的成本效率標準化。在這裡,我們比較一臺完整的機器,即4個GPU,以及價值1500美元的高階硬體(CPU,主機板等)。

因此,在這種情況下,如果您想要購買許多GPU,實際上代表了這種情況,如果您購買更具成本效益的計算機+ GPU組合(而不僅僅是經濟高效的GPU),則毫無疑問,大GPU將贏得勝利。但是,這仍然是GPU選擇的偏見。無論如何,如果您擁有有限的金額,而且首先無法負擔得起,那麼一個盒子裡的4個GTX 1080 Ti如何具有成本效益並不重要。

因此,您可能對如何使用高性價比的卡片感興趣,但實際上,對於您擁有的金額,您可以購買哪種效能最好的系統?您還必須處理其他問題,例如:我將有多長時間使用此GPU?我想在幾年內升級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競爭。所有這三款顯示卡應該比GTX 980 Ti由於他們增加了11GB和8GB(而不是6GB)的記憶體。

8GB的記憶體可能看起來有點小,但是對於許多工來說,這已經足夠了。例如對於Kaggle比賽,大多數影象資料集,深入的風格和自然語言理解任務,您將遇到幾個問題。

GTX 1060是第一次嘗試深度學習的最佳入門級GPU,或者偶爾用於Kaggle比賽。我不會推薦帶有3GB記憶體的GTX 1060變種,因為另一個變種的6GB記憶體已經相當有限了。但是,對於許多應用來說,6GB就足夠了。GTX 1060比普通的Titan X慢,但在GTX 980的效能和eBay價格上都是可比的。

就爆炸而言,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在計算機視覺研究人員中仍然佔有一席之地,他們從事大資料集或視訊資料。在這些領域,每GB的記憶體數量,NVIDIA Titan Xp只比GTX 1080 Ti多1GB,因此在這種情況下是一個優勢。我不會推薦NVIDIA Titan X(Pascal),因為NVIDIA Titan Xp速度更快,價格幾乎相同。由於市場上這些GPU的稀缺性,如果你找不到可以購買的NVIDIA Titan Xp,你也可以購買Titan X(Pascal)。你也許能夠從eBay搶奪便宜的Titan X(Pascal)。

如果你已經有了GTX Titan X(Maxwell)GPU,那麼升級到NVIDIA Titan X(Pascal)或NVIDIA Titan Xp是不值得的。節省您的下一代GPU的錢。

如果你缺錢,但是你知道12GB記憶體對你來說很重要,那麼eBay的GTX Titan X(Maxwell)也是一個很好的選擇。

但是,大多數研究人員使用GTX 1080 Ti做得很好。大多數研究和大多數應用程式不需要額外的GB記憶體。

我個人會與多個GTX 1070或GTX 1080研究。我寧願執行幾個比只執行一個更快的實驗慢一點的實驗。在NLP中,記憶體限制並不像計算機視覺那麼嚴格,所以GTX 1070 / GTX 1080對我來說也不錯。我工作的任務以及如何執行我的實驗決定了我的最佳選擇,不管是GTX 1070還是GTX 1080。

當你選擇你的GPU時,你應該以類似的方式推理。考慮一下你在做什麼任務,如何執行你的實驗,然後嘗試找到適合這些要求的GPU。

對於GPU幾乎沒有錢的人來說,選項現在更加有限。亞馬遜網路服務上的GPU例項現在相當昂貴和緩慢,如果您擁有更少的資金,則不再是一個不錯的選擇。我不推薦GTX 970,因為它很慢,即使在使用的條件下購買也是相當昂貴的(在eBay上150美元),並且存在與卡啟動相關的記憶體問題。相反,嘗試獲得額外的錢購買GTX 1060更快,有更大的記憶體,沒有記憶體問題。如果你買不起GTX 1060,我會選擇配備4GB記憶體的GTX 1050 Ti。4GB可以是限制,但你將能夠深入學習,如果你對模型進行一些調整,你可以得到良好的效能。

GTX 1050 Ti一般來說也是一個堅實的選擇,如果你只是想深入學習一下,沒有任何認真的承諾。

亞馬遜網路服務(AWS)GPU例項

在此部落格文章的以前版本中,我推薦AWS GPU現貨例項,但我不會再推薦這個選項。AWS上的GPU現在非常慢(一個GTX 1080的速度是AWS GPU的四倍),價格在過去幾個月急劇上升。現在再次購買你自己的GPU似乎更合理。

結論

有了這篇文章中的所有資訊,您應該能夠通過平衡需要的記憶體大小,以GB / s為單位的速度和GPU的價格來平衡選擇哪一種GPU,並且這個推理在未來很多年內將會保持穩定。但是現在我的建議是要買一臺GTX 1080 Ti,GTX 1070或者GTX 1080,一個GTX 1060,如果你剛剛開始深入學習或受到金錢的限制; 如果你有很少的錢,試著買一個GTX 1050 ; 如果你是計算機視覺研究人員,你可能想要一個Titan Xp。

最好的GPU整體(小幅度):Titan Xp 成本效益,但昂貴:GTX 1080 Ti,GTX 1070,GTX 1080 成本效益和便宜:GTX 1060(6GB)

  • 我使用資料集> 250GB:GTX Titan X(Maxwell) ,NVIDIA Titan X Pascal或NVIDIA Titan Xp
  • 我沒有多少錢:GTX 1060(6GB)
  • 我幾乎沒有錢:GTX 1050 Ti(4GB)
  • 我做Kaggle:GTX 1060(6GB)適用於任何“正常”比賽,或GTX 1080 Ti為“深度學習競賽”
  • 我是一名具有競爭力的計算機視覺研究員:NVIDIA Titan Xp; 不要從現有的Titan X(Pascal或Maxwell)升級
  • 我是一名研究員:GTX 1080 Ti

在某些情況下,如自然語言處理,一個GTX 1070或GTX 1080也可能是一個堅實的選擇-檢查你的現有機型的記憶體需求我想建立一個GPU叢集: 這確實是複雜的,你可以得到一些想法 在這裡我開始深入學習,我認真對待它:從GTX 1060(6GB)開始。

根據你選擇什麼樣的區域,毗鄰(啟動,Kaggle,研究,應用深度學習)推銷自己的GTX 1060和買東西更合適我想嘗試深度學習,但我不認真的:GTX 1050 Ti(4或2GB)via http://blog.csdn.net/sinat_36458870/article/details/78946030