自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何為你的深度學(xué)習(xí)任務(wù)挑選最合適的GPU?

開發(fā) 開發(fā)工具 深度學(xué)習(xí)
深度學(xué)習(xí)是一個計算密集型領(lǐng)域,而 GPU 的選擇將從根本上決定你的深度學(xué)習(xí)實驗。那么,如何選擇一個適合你的 GPU 呢?這正是本篇博文探討的問題,幫助你做出正確選擇。

深度學(xué)習(xí)是一個計算密集型領(lǐng)域,而 GPU 的選擇將從根本上決定你的深度學(xué)習(xí)實驗。沒有 GPU,一個實驗也許花費數(shù)月才能完成,或者實驗運行一天卻只關(guān)閉了被選擇的參數(shù);而一個良好穩(wěn)定的 GPU 可讓你在深度學(xué)習(xí)網(wǎng)絡(luò)中快速迭代,在數(shù)天、數(shù)小時、數(shù)分鐘內(nèi)完成實驗,而不是數(shù)月、數(shù)天、數(shù)小時。所以,購買 GPU 時正確的選擇很關(guān)鍵。那么,如何選擇一個適合你的 GPU 呢?這正是本篇博文探討的問題,幫助你做出正確選擇。

對于深度學(xué)習(xí)初學(xué)者來說,擁有一個快速 GPU 非常重要,因為它可以使你迅速獲得有助于構(gòu)建專業(yè)知識的實踐經(jīng)驗,這些專業(yè)知識可以幫助你將深度學(xué)習(xí)應(yīng)用到新問題上。沒有這種迅速反饋,從錯誤中汲取經(jīng)驗將會花費太多時間,在繼續(xù)深度學(xué)習(xí)過程中也會感到受挫和沮喪。在 GPU 的幫助下,我很快就學(xué)會了如何在一系列 Kaggle 競賽中應(yīng)用深度學(xué)習(xí),并且在 Partly Sunny with a Chance of Hashtags Kaggle 競賽上獲得了第二名,競賽內(nèi)容是通過一個給定推文預(yù)測氣象評分。比賽中,我使用了一個相當(dāng)大的兩層深度神經(jīng)網(wǎng)絡(luò)(帶有兩個修正線性單元和 dropout,用于正則化),差點就沒辦法把這個深度網(wǎng)絡(luò)塞進(jìn)我的 6G GPU 內(nèi)存。

應(yīng)該使用多個 GPU 嗎?

在 GPU 的幫助下,深度學(xué)習(xí)可以完成很多事情,這讓我感到興奮。我投身到多 GPU 的領(lǐng)域之中,用 InfiniBand 40Gbit/s 互連組裝了小型 GPU 集群。我瘋狂地想要知道多個 GPU 能否獲得更好的結(jié)果。我很快發(fā)現(xiàn),不僅很難在多個 GPU 上并行神經(jīng)網(wǎng)絡(luò)。而且對普通的密集神經(jīng)網(wǎng)絡(luò)來說,加速效果也很一般。小型神經(jīng)網(wǎng)絡(luò)可以并行并且有效地利用數(shù)據(jù)并行性,但對于大一點的神經(jīng)網(wǎng)絡(luò)來說,例如我在 Partly Sunny with a Chance of Hashtags Kaggle 比賽中使用的,幾乎沒有加速效果。

隨后,我進(jìn)一步試驗,對比 32 位方法,我開發(fā)了帶有模型并行性的新型 8 位壓縮技術(shù),該技術(shù)能更有效地并行處理密集或全連接神經(jīng)網(wǎng)絡(luò)層。

然而,我也發(fā)現(xiàn),并行化也會讓人沮喪得發(fā)狂。針對一系列問題,我天真地優(yōu)化了并行算法,結(jié)果發(fā)現(xiàn):考慮到你投入的精力,即使使用優(yōu)化過的自定義代碼,多個 GPU 上的并行注意的效果也并不好。你需要非常留意你的硬件及其與深度學(xué)習(xí)算法交互的方式,這樣你一開始就能衡量你是否可以受益于并行化。

[[185944]]

我的計算機主機設(shè)置:你可以看到 3 個 GXT Titan 和一個 InfiniBand 卡。對于深度學(xué)習(xí)來說,這是一個好的設(shè)置嗎?

自那時起,GPU 的并行性支持越來越普遍,但距離全面可用和有效還差的很遠(yuǎn)。目前,在 GPU 和計算機中實現(xiàn)有效算法的唯一深度學(xué)習(xí)庫是 CNTK,它使用微軟的 1 比特量子化(有效)和 block momentum(很有效)的特殊并行化算法。通過 CNTK 和一個包含 96 塊 GPU 的聚類,你可以擁有一個大約 90x-95x 的新線性速度。Pytorch 也許是跨機器支持有效并行化的庫,但是,庫目前還不存在。如果你想要在一臺機器上做并行,那么,CNTK、Torch 和 Pytorch 是你的主要選擇,這些庫具備良好的加速(3.6x-3.8x),并在一臺包含 4 至 8 塊 GPU 的機器之中預(yù)定義了并行化算法。也有其他支持并行化的庫,但它們不是慢(比如 2x-3x 的 TensorFlow)就是難于用于多 GPU (Theano),或者兼而有之。

如果你重視并行,我建議你使用 Pytorch 或 CNTK。

使用多 GPU 而無并行

使用多 GPU 的另外一個好處是:即使沒有并行算法,你也可以分別在每個 GPU 上運行多個算法或?qū)嶒?。速度沒有變快,但是你能***使用不同算法或參數(shù)得到更多關(guān)于性能信息。如果你的主要目標(biāo)是盡快獲得深度學(xué)習(xí)經(jīng)驗,這是非常有用的,而且對于想同時嘗試新算法不同版本的研究人員來說,這也非常有用。

如果你想要學(xué)習(xí)深度學(xué)習(xí),這也具有心理上的重要性。執(zhí)行任務(wù)的間隔以及得到反饋信息的時間越短,大腦越能將相關(guān)記憶片段整合成連貫畫面。如果你在小數(shù)據(jù)集上使用獨立的 GPU 訓(xùn)練兩個卷積網(wǎng)絡(luò),你就能更快地知道什么對于性能優(yōu)良來說是重要的;你將更容易地檢測到交叉驗證誤差中的模式并正確地解釋它們。你也會發(fā)現(xiàn)暗示需要添加、移除或調(diào)整哪些參數(shù)與層的模式。

所以總體而言,幾乎對于所有任務(wù)來說,一個 GPU 已經(jīng)足夠了,但是加速深度學(xué)習(xí)模型,多個 GPU 會變得越來越重要。如果你想快速學(xué)習(xí)深度學(xué)習(xí),多個廉價的 GPU 也很好。我個人寧愿使用多個小的 GPU,而不是一個大的 GPU,即使是出于研究實驗的沒目的。

那么,我該選擇哪類加速器呢?英偉達(dá) GPU、AMD GUP 還是英特爾的 Xeon Phi?

英偉達(dá)的標(biāo)準(zhǔn)庫使得在 CUDA 中建立***個深度學(xué)習(xí)庫很容易,但沒有適合 AMD 的 OpenCL 那樣強大的標(biāo)準(zhǔn)庫。目前還沒有適合 AMD 顯卡的深度學(xué)習(xí)庫——所以,只能選擇英偉達(dá)了。即使未來一些 OpenCL 庫可用,我仍會堅持使用英偉達(dá):因為對于 CUDA 來說,GPU 計算或者 GPGPU 社區(qū)是很大的,對于 OpenCL 來說,則相對較小。因此,在 CUDA 社區(qū),有現(xiàn)成的好的開源解決方案和為編程提供可靠建議。

此外,英偉達(dá)現(xiàn)在為深度學(xué)習(xí)賭上一切,即使深度學(xué)習(xí)還只是處于嬰兒期。押注獲得了回報。盡管現(xiàn)在其他公司也往深度學(xué)習(xí)投入了錢和精力,但由于開始的晚,目前依然很落后。目前,除了 NVIDIA-CUDA,其他任何用于深度學(xué)習(xí)的軟硬結(jié)合的選擇都會讓你受挫。

至于英特爾的 Xeon Phi,廣告宣稱你能夠使用標(biāo)準(zhǔn) C 代碼,還能將代碼輕松轉(zhuǎn)換成加速過的 Xeon Phi 代碼。聽起來很有趣,因為你可能認(rèn)為可以依靠龐大的 C 代碼資源。但事實上,其只支持非常一小部分 C 代碼,因此,這一功能并不真正有用,大部分 C 運行起來會很慢。

我曾研究過 500 多個 Xeon Phi 集群,遭遇了無止盡的挫折。我不能運行我的單元測試(unit test),因為 Xeon Phi 的 MKL(數(shù)學(xué)核心函數(shù)庫)并不兼容 NumPy;我不得不重寫大部分代碼,因為英特爾 Xeon Phi 編譯器無法讓模板做出適當(dāng)約簡。例如,switch 語句,我不得不改變我的 C 接口,因為英特爾 Xeon Phi 編譯器不支持 C++ 11 的一些特性。這一切迫使你在沒有單元測試的情況下來執(zhí)行代碼的重構(gòu),實在讓人沮喪。這花了很長時間。真是地獄啊。

隨后,執(zhí)行我的代碼時,一切都運行得很慢。是有 bug(?)或者僅僅是線程調(diào)度器(thread scheduler)里的問題?如果作為運行基礎(chǔ)的向量大小連續(xù)變化,哪個問題會影響性能表現(xiàn)?比如,如果你有大小不同的全連接層,或者 dropout 層,Xeon Phi 會比 CPU 還慢。我在一個獨立的矩陣乘法(matrix-matrix multiplication)實例中復(fù)制了這一行為,并把它發(fā)給了英特爾,但從沒收到回信。所以,如果你想做深度學(xué)習(xí),遠(yuǎn)離 Xeon Phi!

給定預(yù)算下的最快 GPU

你的***個問題也許是:用于深度學(xué)習(xí)的快速 GPU 性能的最重要特征是什么?是 cuda 內(nèi)核、時鐘速度還是 RAM 的大小?

以上都不是。最重要的特征是內(nèi)存帶寬。

簡言之,GPU 通過犧牲內(nèi)存訪問時間(延遲)而優(yōu)化了內(nèi)存帶寬; 而 CPU 的設(shè)計恰恰相反。如果只占用了少量內(nèi)存,例如幾個數(shù)相乘(3*6*9),CPU 可以做快速計算,但是,對于像矩陣相乘(A*B*C)這樣占用大量內(nèi)存的操作,CPU 運行很慢。由于其內(nèi)存帶寬,GPU 擅長處理占用大量內(nèi)存的問題。當(dāng)然 GPU 和 CPU 之間還存在其他更復(fù)雜的差異。

如果你想購買一個快速 GPU,***等重要的就是看看它的帶寬。

根據(jù)內(nèi)存帶寬評估 GPU

隨著時間的推移,比較 CPU 以及 GPU 的帶寬。

隨著時間的推移,比較 CPU 以及 GPU 的帶寬。為什么 GPU 計算速度會比 CPU 快?主要原因之一就是帶寬。

帶寬可直接在一個架構(gòu)內(nèi)進(jìn)行比較,例如, 比較 Pascal 顯卡 GTX 1080 與 GTX 1070 的性能;也可通過只查看其內(nèi)存帶寬而直接比較。例如,GTX 1080 (320GB/s) 大約比 GTX 1070 (256 GB/s) 快 25%。然而, 在多個架構(gòu)之間,例如 Pascal 對于 Maxwell 就像 GTX 1080 對于 GTX Titan X 一樣,不能進(jìn)行直接比較,因為加工過程不同的架構(gòu)使用了不同的給定內(nèi)存帶寬。這一切看起來有點狡猾,但是,只看總帶寬就可對 GPU 的大致速度有一個很好的全局了解。在給定預(yù)算的情況下選擇一塊最快的 GPU,你可以使用這一維基百科頁面(List of Nvidia graphics processing units),查看 GB/s 中的帶寬;對于更新的顯卡(900 和 1000 系列)來說,列表中的價格相當(dāng)精確,但是,老舊的顯卡相比于列舉的價格會便宜很多,尤其是在 eBay 上購買這些顯卡時。例如,一個普通的 GTX Titan X 在 eBay 上的價格大約是 550 美元。

然而,另一個需要考慮的重要因素是,并非所有架構(gòu)都與 cuDNN 兼容。由于幾乎所有的深度學(xué)習(xí)庫都使用 cuDNN 做卷積運算,這就限制了對于 Kepler GPU 或更好 GPU 的選擇,即 GTX 600 系列或以上版本。最主要的是 Kepler GPU 通常會很慢。因此這意味著你應(yīng)該選擇 900 或 1000 系列 GPU 來獲得好的性能。

為了大致搞清楚深度學(xué)習(xí)任務(wù)中的顯卡性能比較情況,我創(chuàng)建了一個簡單的 GPU 等價表。如何閱讀它呢?例如,GTX 980 的速度相當(dāng)于 0.35 個 Titan X Pascal,或是 Titan X Pascal 的速度幾乎三倍快于 GTX 980。

請注意我沒有所有這些顯卡,也沒有在所有這些顯卡上跑過深度學(xué)習(xí)基準(zhǔn)。這些對比源于顯卡規(guī)格以及計算基準(zhǔn)(有些加密貨幣挖掘任務(wù)需要比肩深度學(xué)習(xí)的計算能力)的比較。因此只是粗略的比較。真實數(shù)字會有點區(qū)別,但是一般說來,誤差會是最小的,顯卡的排序也沒問題。

也請注意,沒有充分利用 GPU 的小型網(wǎng)絡(luò)會讓更大 GPU 看起來不那么帥。比如,一個 GTX 1080 Ti 上的小型 LSTM(128 個隱藏單元;batch 大小大于 64)不會比在 GTX 1070 上運行速度明顯快很多。為了實現(xiàn)表格中的性能差異,你需要運行更大的網(wǎng)絡(luò),比如 帶有 1024 個隱藏單元(而且 batch 大小大于 64)的 LSTM。當(dāng)選擇適合自己的 GPU 時,記住這一點很重要。

粗略的比較用于大型深度學(xué)習(xí)網(wǎng)絡(luò) 的 GPU 性能

粗略的比較用于大型深度學(xué)習(xí)網(wǎng)絡(luò) 的 GPU 性能。

總的來說,我會推薦 GTX 1080 Ti 或者 GTX 1070。它們都是優(yōu)秀的顯卡,如果你有錢買得起 GTX 1080 Ti 那么就入手吧。GTX 1070 更加便宜點,但是仍然比普通的 GTX Titan X (Maxwell) 要快一些。較之 GTX 980 Ti,這兩者都是更佳選擇,考慮到增加的 11 G 以及 8G 的內(nèi)存(而不是 6G)。

8G 的內(nèi)存看起來有點小,但是對于許多任務(wù)來說,綽綽有余。比如,Kaggle 比賽,很多圖像數(shù)據(jù)集、深度風(fēng)格以及自然語言理解任務(wù)上,你遇到的麻煩會少很多。

GTX 1060 是***的入門 GPU,如果你是***嘗試深度學(xué)習(xí)或者有時想要使用它來參加 Kaggle 比賽。我不會推薦 GTX 1060 帶有 3G 內(nèi)存的變體產(chǎn)品,既然其他 6G 內(nèi)存產(chǎn)品的能力已經(jīng)十分有限了。不過,對于很多應(yīng)用來說,6G 內(nèi)存足夠了。GTX 1060 要比普通版本的 Titan X 慢一些,但是,在性能和價格方面(eBay 上)都可比肩 GTX980。

如果要說物有所值呢,10 系列設(shè)計真的很贊。GTX 1060、GTX 1070 和 GTX 1080 Ti 上都很出色。GTX 1060 適合初學(xué)者,GTX 1070 是某些產(chǎn)業(yè)和研究部門以及創(chuàng)業(yè)公司的好選擇,GTX 1080 Ti 通殺高端選擇。

一般說來,我不會推薦英偉達(dá) Titan X (Pascal),就其性能而言,價格死貴了。繼續(xù)使用 GTX 1080 Ti 吧。不過,英偉達(dá) Titan X (Pascal) 在計算機視覺研究人員當(dāng)中,還是有它的地位的,這些研究人員通常要研究大型數(shù)據(jù)集或者視頻集。在這些領(lǐng)域里,每 1G 內(nèi)存都不會浪費,英偉達(dá) Titan X 比 GTX 1080 Ti 多 1G 的內(nèi)存也會帶來更多的處理優(yōu)勢。不過,就物有所值而言,這里推薦 eBay 上的 GTX Titan X(Maxwell)——有點慢,不過 12G 的內(nèi)存哦。

不過,絕大多數(shù)研究人員使用 GTX 1080 Ti 就可以了。對于絕大多數(shù)研究和應(yīng)用來說,額外 1G 內(nèi)存其實是不必要的。

我個人會使用多個 GTX 1070 進(jìn)行研究。我寧可多跑幾個測試,哪怕速度比僅跑一個測試(這樣速度會快些)慢一些。在自然語言處理任務(wù)中,內(nèi)存限制并不像計算機視覺研究中那么明顯。因此,GTX 1070 就夠用了。我的研究任務(wù)以及運行實驗的方式?jīng)Q定了最適合我的選擇就是 GTX 1070。

當(dāng)你挑選自己的 GPU 時,也應(yīng)該如法炮制,進(jìn)行甄選??紤]你的任務(wù)以及運行實驗的方式,然后找個滿足所有這些需求的 GPU。

現(xiàn)在,對于那些手頭很緊又要買 GPU 的人來說,選擇更少了。AWS 的 GPU 實例很貴而且現(xiàn)在也慢,不再是一個好的選擇,如果你的預(yù)算很少的話。我不推薦 GTX 970,因為速度慢還死貴,即使在 eBay 上入二手(150 刀),而且還有存儲及顯卡啟動問題。相反,多弄點錢買一個 GTX 1060,速度會快得多,存儲也更大,還沒有這方面的問題。如果你只是買不起 GTX 1060,我推薦 4GB RAM 的 GTX 1050 Ti。4GB 會有限,但是你可以玩轉(zhuǎn)深度學(xué)習(xí)了,如果你調(diào)一下模型,就能獲得良好的性能。GTX 1050 適合絕大多數(shù) kaggle 競賽,盡管可能會在一些比賽中限制你的競爭力。

亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)中的 GPU 實例

在這篇博文的前一個版本中,我推薦了 AWS GPU 的現(xiàn)貨實例,但現(xiàn)在我不會再推薦它了。目前 AWS 上的 GPU 相當(dāng)慢(一個 GTX 1080 的速度是 AWS GPU 的 4 倍)并且其價格在過去的幾個月里急劇上升?,F(xiàn)在看起來購買自己的 GPU 又似乎更為明智了。

總結(jié)

運用這篇文章里的所有信息,你應(yīng)該能通過平衡內(nèi)存大小的需要、帶寬速度 GB/s 以及 GPU 的價格來找到合適的 GPU 了,這些推理在未來許多年中都會是可靠的。但是,現(xiàn)在我所推薦的是 GTX 1080 Ti 或 GTX 1070,只要價格可以接受就行;如果你剛開始涉足深度學(xué)習(xí)或者手頭緊,那么 GTX 1060 或許適合你。如果你的錢不多,就買 GTX 1050 Ti 吧;如果你是一位計算機視覺研究人員,或許該入手 Titan X Pascal(或者就用現(xiàn)有的 GTX Titan Xs)。

總結(jié)性建議

  • 總的說來***的 GPU:Titan X Pascal 以及 GTX 1080 Ti
  • 有成本效益但價格高的:GTX 1080 Ti, GTX 1070
  • 有成本效益而且便宜:GTX 1060
  • 用來處理大于 250G 數(shù)據(jù)集:常規(guī) GTX Titan X 或者 Titan X Pascal
  • 我錢不多:GTX 1060
  • 我?guī)缀鯖]錢:GTX 1050 Ti
  • 我參加 Kaggle 比賽: 用于任何常規(guī)比賽,GTX 1060 , 如果是深度學(xué)習(xí)比賽,GTX 1080Ti
  • 我是一名有競爭力的計算機視覺研究人員: Titan X Pascal 或常規(guī) GTX Titan X
  • 我是一名研究人員:GTX 1080 Ti. 有些情況下,比如自然語言處理任務(wù),GTX 1070 或許是可靠的選擇——看一下你當(dāng)前模型的存儲要求。
  • 想建立一個 GPU 集群:這真的很復(fù)雜,你可以從這里得到一些思路:https://timdettmers.wordpress.com/2014/09/21/how-to-build-and-use-a-multi-gpu-system-for-deep-learning/
  • 我剛開始進(jìn)行深度學(xué)習(xí),并且我是認(rèn)真的:開始用 GTX 1060。根據(jù)你下一步的情況(創(chuàng)業(yè)?Kaggle 比賽?研究還是應(yīng)用深度學(xué)習(xí))賣掉你的 GTX 1060 然后買更適合使用目的的。

 

原文地址:http://timdettmers.com/2017/03/19/which-gpu-for-deep-learning/

【本文是51CTO專欄機構(gòu)機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

 

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2016-02-29 10:15:16

公有云私有云云平臺

2018-07-25 15:43:27

機器學(xué)習(xí)框架開發(fā)

2020-12-31 09:39:39

應(yīng)用圖像格式SVGOMG

2011-12-09 09:33:44

服務(wù)器虛擬化虛擬機

2024-11-25 16:15:14

2017-02-28 14:17:03

機器學(xué)習(xí)算法

2012-02-07 09:31:59

2021-09-30 12:55:44

數(shù)據(jù)處理流處理引擎

2009-01-12 17:28:10

服務(wù)器虛擬化VMware

2021-08-23 11:35:37

代碼開發(fā)開源

2018-06-19 10:38:42

數(shù)據(jù)中心遷移時機

2011-05-07 14:59:18

投影幕投影機

2016-01-18 09:26:24

2023-11-13 15:58:33

RPA人工智能

2017-10-17 12:49:18

無線AP無線AP

2017-05-31 09:12:51

機器學(xué)習(xí)算法數(shù)據(jù)

2022-03-01 18:21:27

云遷移云服務(wù)

2010-09-27 09:45:34

數(shù)據(jù)中心光纖

2015-03-16 12:54:25

虛擬化存儲設(shè)備

2009-01-07 18:17:18

點贊
收藏

51CTO技術(shù)棧公眾號