「深度分析」深度學習選GPU,RTX 20系列值不值得?

「深度分析」深度学习选GPU,RTX 20系列值不值得?

新智元報道

深度學習常被戲謔為“煉丹術”,那麼,GPU於深度學習研究人員而言就是不可或缺的“煉丹爐”。

深度學習是一個計算要求很高的領域,選擇什麼 GPU、選擇多少個 GPU 將從根本上決定你的深度學習體驗。如果沒有 GPU,可能需要好幾個月等待實驗完成,或者實驗運行一整天下來只是看到失敗的結果。

憑藉良好、可靠的 GPU,煉丹師們可以快速迭代深度網絡的設計和參數,運行實驗的時間只需幾天而不是幾個月,幾小時而不是幾天,幾分鐘而不是幾小時。 因此,在購買 GPU 時做出正確的選擇至關重要。

「深度分析」深度学习选GPU,RTX 20系列值不值得?

Tim Dettmers 的GPU選擇

那麼如何選擇適合你的 GPU 呢?本文作者 Tim Dettmers 是瑞士盧加諾大學信息學碩士,熱衷於開發自己的 GPU 集群和算法來加速深度學習。這篇文章深入研究這個問題,並提供建議,幫你做出最合適的選擇。

本週 NVIDIA 震撼發佈的 GeForce RTX 20 系列顯卡值不值得買?它的能力、性價比如何?本文也給出分析。

先放結論:RTX 2080 最具成本效益的選擇。當然,GTX 1080/1070(+ Ti)卡仍然是非常好的選擇。

「深度分析」深度学习选GPU,RTX 20系列值不值得?

作者給出的GPU建議如下:

  • 總體來說最好的 GPU 是: RTX 2080 Ti

  • 成本效益高,但價格昂貴:RTX 2080, GTX 1080

  • 成本效益高,且價格實惠: GTX 1070, GTX 1070 Ti, GTX 1060

  • 我使用的數據集 > 250GB: RTX 2080 Ti or RTX 2080

  • 我沒有太多預算: GTX 1060 (6GB)

  • 我很窮: GTX 1050 Ti (4GB) or CPU (prototyping) + AWS/TPU (training)

  • 我參加 Kaggle 競賽: GTX 1060 (6GB) 用於原型設計 , AWS 用於最終訓練; 使用 fastai 庫

  • 我是計算機視覺研究人員:RTX 2080 Ti; 2019 年可以升級到 RTX Titan

  • 我是一名研究人員:RTX 2080 Ti 或 GTX 10XX -> RTX Titan(看一下你當前模型的存儲要求)

  • 我想建立一個 GPU 集群:這很複雜,可以參考這篇文章[1]

  • 我剛開始進行深度學習,並且我是認真的:可以先從 GTX 1060 (6GB) 開始,或者從便宜的 GTX 1070 或 GTX 1070 Ti 開始。這取決於你下一步想做什麼(去初創公司,參加 Kaggle 競賽,做研究,應用深度學習),然後賣掉最初的 GPU 再買更適合的

全面對比:NVIDIA、AMD、Intel、Google、Amazon

NVIDIA: 絕對王者

NVIDIA 的標準庫使得在 CUDA 中建立第一個深度學習庫變得非常容易,而 AMD 的 OpenCL 卻沒有這樣強大的標準庫。這種領先優勢,再加上英偉達強大的社區支持,迅速擴大了 CUDA 社區的規模。這意味著,如果你使用 NVIDIA GPU,在遇到問題時可以很容易找到支持;如果你自己寫 CUDA 程序,也很容易找到支持和建議,並且你會發現大多數深度學習庫都對 NVIDIA GPU 提供最佳支持。對於 NVIDIA GPU 來說,這是非常強大的優勢。

另一方面,英偉達現在有一項政策,在數據中心使用 CUDA 只允許 Tesla GPU,而不允許使用 GTX 或 RTX 卡。“數據中心” 的含義模糊不清,但這意味著,由於擔心法律問題,研究機構和大學往往被迫購買昂貴而且成本效率低的 Tesla GPU。然而,Tesla 卡與 GTX 和 RTX 卡相比並無大的優勢,價格卻要高 10 倍。

英偉達能夠沒有任何大障礙地實施這些政策,這顯示出其壟斷力量——他們可以隨心所欲,我們必須接受這些條款。如果你選擇了 NVIDIA GPU 在社區和支持方面的主要優勢,你還需要接受他們的隨意擺佈。

AMD:能力強大,但缺乏支持

HIP 通過 ROCm 將 NVIDIA 和 AMD 的 GPU 統一在一種通用編程語言之下,在編譯成 GPU 彙編代碼之前被編譯成各自的 GPU 語言。如果我們的所有 GPU 代碼都在 HIP 中,這將成為一個重要里程碑,但這是相當困難的,因為 TensorFlow 和 PyTorch 代碼基很難移植。TensorFlow 對 AMD GPU 有一些支持,所有的主要網絡都可以在 AMD GPU 上運行,但是如果你想開發新的網絡,可能會遺漏一些細節,這可能阻止你實現想要的結果。ROCm 社區也不是很大,因此要快速解決問題並不容易。此外,AMD 似乎也沒有太多資金用於深度學習開發和支持,這減緩了發展的勢頭。

但是,AMD GPU 性能並不比 NVIDIA GPU 表現差,而且下一代 AMD GPU Vega 20 將會是計算能力非常強大的處理器,具有類似 Tensor Core 的計算單元。

總的來說,對於那些只希望 GPU 能夠順利運行的普通用戶,我仍然無法明確推薦 AMD GPU。更有經驗的用戶應該遇到的問題不多,並且支持 AMD GPU 和 ROCm / HIP 開發人員有助於打擊英偉達的壟斷地位,從長遠來看,這將為每個人帶來好處。如果你是 GPU 開發人員並希望為 GPU 計算做出重要貢獻,那麼 AMD GPU 可能是長期產生良好影響的最佳方式。對於其他人來說,NVIDIA GPU 是更安全的選擇。

英特爾:仍需努力

我個人對英特爾 Xeon Phis 的經驗非常令人失望,我認為它們不是 NVIDIA 或 AMD 顯卡的真正競爭對手:如果你決定使用 Xeon Phi,請注意,你遇到問題時能得到的支持很有限,計算代碼段比 CPU 慢,編寫優化代碼非常困難,不完全支持 c++ 11 特徵,不支持一些重要的 GPU 設計模式編譯器,與其他以來 BLAS routine 的庫(例如 NumPy 和 SciPy))的兼容性差,以及可能還有許多我沒遇到的挫折。

我很期待英特爾 Nervana 神經網絡處理器(NNP),因為它的規格非常強大,它可以允許新的算法,可能重新定義神經網絡的使用方式。NNP 計劃在 2019 年第三季度 / 第四季度發佈。

谷歌:按需處理更便宜?

Google TPU 已經發展成為非常成熟的基於雲的產品,具有極高的成本效益。理解 TPU 最簡單的方法是將它看作多個打包在一起的 GPU。如果我們看一下支持 Tensor Core 的 V100 和 TPUv2 的性能指標,我們會發現對於 ResNet50,這兩個系統的性能幾乎相同。但是,谷歌 TPU 更划算。

那麼,TPU 是不是基於雲的經濟高效的解決方案呢?可以說是,也可以說不是。不管在論文上還是在日常使用上,TPU 都更具成本效益。但是,如果你使用 fastai 團隊的最佳實踐和指南以及 fastai 庫,你可以以更低的價格實現更快的收斂——至少對於用卷及網絡進行對象識別來說是這樣。

使用相同的軟件,TPU 甚至可以更具成本效益,但這也存在問題:(1)TPU 不能用於 fastai 庫,即 PyTorch;(2)TPU 算法主要依賴於谷歌內部團隊,(3)沒有統一的高層庫可以為 TensorFlow 實施良好的標準。

這三點都打擊了 TPU,因為它需要單獨的軟件才能跟上深度學習的新算法。我相信谷歌的團隊已經完成了這些工作,但是還不清楚對某些模型的支持有多好。例如,TPU 的官方 GitHub 庫只有一個 NLP 模型,其餘的都是計算機視覺模型。所有模型都使用卷積,沒有一個是循環神經網絡。不過,隨著時間的推移,軟件支持很可能會迅速改進,並且成本會進一步下降,使 TPU 成為一個有吸引力的選擇。不過,目前 TPU 似乎最適合用於計算機視覺,並作為其他計算資源的補充,而不是主要的深度學習資源。

亞馬遜:可靠但價格昂貴

自從上次更新這篇博文以來,AWS 已經添加了很多新的 GPU。但是,價格仍然有點高。如果你突然需要額外的計算,例如在研究論文 deadline 之前所有 GPU 都在使用,AWS GPU instances 可能是一個非常有用的解決方案

然而,如果它有成本效益,那麼就應該確保只運行幾個網絡,並且確切地知道為訓練運行選擇的參數是接近最優的。否則,成本效益會大大降低,還不如專用 GPU 有用。即使快速的 AWS GPU 是誘人的堅實的 gtx1070 和 up 將能夠提供良好的計算性能一年或兩年沒有太多的成本。

總結而言,AWS GPU instance 非常有用,但需要明智而謹慎地使用它們,以確保成本效益。有關雲計算,我們後面還會再討論。

是什麼讓一個 GPU 比另一個更快?

選擇 GPU 時,你的第一個問題可能是:對於深度學習來說,使得 GPU 運算速度快的最重要的特性是什麼?是 CUDA Core,時鐘速度,還是 RAM 的大小?

雖然一個很好的簡化建議應該是 “注意內存帶寬”,但我不再建議這樣做。這是因為 GPU 硬件和軟件多年來的開發方式使得 GPU 的帶寬不再是其性能的最佳指標。在消費級 GPU 中引入 Tensor Core 進一步複雜化了這個問題。現在,帶寬、FLOPS 和 Tensor Core 的組合才是 GPU 性能的最佳指標

為了加深理解,做出明智的選擇,最好要了解一下硬件的哪些部分使 GPU 能夠快速執行兩種最重要的張量操作:矩陣乘法和卷積

考慮矩陣乘法的一個簡單而有效的方法是:它是受帶寬約束的。如果你想使用 LSTM 和其他需要做很多矩陣乘法的循環網絡的話,內存帶寬是 GPU 最重要的特性,

同樣,卷積受計算速度約束。因此,對於 ResNets 和其他卷積體系結構來說,GPU 的 TFLOP 是其性能的最佳指標。

Tensor Cores 稍微改變了這種平衡。Tensor Cores 是專用計算單元,可以加速計算——但不會加大內存帶寬——因此對於卷積網絡來說,最大的好處是 Tensor Core 可以使速度加快 30%到 100%。

雖然 Tensor Cores 只能加快計算速度,但它們也允許使用 16-bit 數字進行計算。這也是矩陣乘法的一大優點,因為數字的大小隻有 16-bit 而不是 32-bit,在內存帶寬相同的矩陣中,數字的數量可以傳輸兩倍。一般來說,使用 Tensor Cores 的 LSTM 可以加速 20% 到 60%。

請注意,這種加速並不是來自 Tensor Cores 本身,而是來自它進行 16-bit 計算的能力。在 AMD GPU 上的 16-bit 算法和在 NVIDIA 的具有 Tensor Cores 的卡上的矩陣乘法算法一樣快。

Tensor Cores 的一個大問題是它們需要 16-bit 浮點輸入數據,這可能會帶來一些軟件支持問題,因為網絡通常使用 32-bit 的值。如果沒有 16-bit 的輸入,Tensor Cores 就相當於沒用的。

但是,我認為這些問題很快就能得到解決,因為 Tensor Cores 太強大了,現在消費級 GPU 也使用 Tensor Cores,因此,將會有越來越多的人使用它們。隨著 16-bit 深度學習的引入,我們實際上使 GPU 的內存翻倍了,因為同樣內存的 GPU 中包含的參數翻倍了。

總的來說,最好的經驗法則是:如果你使用 RNN,要看帶寬;如果使用卷積,就看看 FLOPS;如果你買得起,就考慮 Tensor Cores(除非必要,否則不要買 Tesla 卡)

「深度分析」深度学习选GPU,RTX 20系列值不值得?

GPU 和 TPU 的標準化原始性能數據。越高越好。 RTX 2080 Ti 的速度大約是 GTX1080 Ti 的兩倍:0.75 vs 0.4。

性價比分析

性價比也許是選擇 GPU 時要考慮的最重要的一類指標。我對此做了一個新的成本性能分析,其中考慮了內存位寬、運算速度和 Tensor 核心。價格上,我參考了亞馬遜和 eBay 上的價格,參考權重比為 1:1。然後我考察了使用 / 不使用 Tensor Core 情況下的 LSTM、CNN 等性能指標。將這些指標數字通過標準化幾何平均得到平均性能評分,計算出性價比數字,結果如下:

「深度分析」深度学习选GPU,RTX 20系列值不值得?

標準化處理後的性價比結果,考慮了內存帶寬(RNN)、計算速度(卷積網絡)、是否使用 Tensor Cores 等因素,數字越高越好。RTX2080 的性價比大概是 Tesla V100 的 5 倍。

請注意,RTX 2080 和 RTX 2080 Ti 的數字可能有些水分,因為實際的硬性能數據還未發佈。我根據這個硬件下的矩陣乘法和卷積的 roofline 模型以及來自 V100 和 Titan V 的 Tensor Core 基準數字來估計性能。由於目前沒有硬件規格數字,RTX 2070 完全沒有排入。注意,RTX 2070 可能很容易在成本效益上擊敗其他兩款 RTX 系列顯卡,但目前沒有數據支持。

從初步數據來看,我們發現 RTX 2080 比 RTX 2080 Ti 的性價比更高。 與 RTX2080 相比,RTX 2080 Ti 的 Tensor 核心和帶寬增加了約 40%,價格提高了 50%,但性能並沒有提高 40%。對於 LSTM 和其他 RNN 來說,從 GTX 10 繫到 RTX 20 系的性能增長,主要是在於支持了 16 位浮點計算,而不是 Tensor 核心本身。雖然卷積網絡的性能在理論上應該與 Tensor 核心呈線性增加,但我們從性能數據中並沒有看出這一點。

這表明,卷積體系結構的其他部分無法憑藉 Tensor 核心獲得性能提升,而這些部分在整體計算需求中也佔了很大比重。因此,RTX 2080 具有更高的性價比,因為它具有比 GTX 10 系列獲得性能提升(GDDR6 + Tensor 核心)所需的所有功能,同時也比 RTX 2080 Ti 更便宜。

此外請讀者注意,這個分析中存在一些問題,對這些數據的解釋需要慎重:

(1)如果你購買的是高性價比、但運算速度較慢的顯卡,那麼在某些時候計算機可能不再會有更多 GPU 空間,因此會造成資源浪費。因此,本圖表偏向於昂貴的 GPU。為了抵消這種偏差,還應該對原始性能圖表進行評估。

(2)此性價比圖表假設,讀者會盡量多地使用 16 位計算和 Tensor 內核。也就是說,對於 32 位計算而言,RTX 系顯卡的性價比很低。

(3)此前有傳聞說,有大量的 RTX 20 系顯卡由於加密貨幣行情的下滑而被延緩發佈。因此,像 GTX 1080 和 GTX 1070 這樣流行的挖礦 GPU 可能會迅速降價,其性價比可能會迅速提高,使得 RTX 20 系列在性價比方面不那麼有優勢。另一方面,大量的 RTX 20 系顯卡的價格將保持穩定,以確保其具備競爭力。很難預測這些顯卡的後續前景。

(4)如前文所述,目前還沒有關於 RTX 顯卡硬性、無偏見的性能數據,因此所有這些數字都不能太當真。

可以看出,在這麼多顯卡中做出正確選擇並不容易。但是,如果讀者對所有這些問題採取一種平衡的觀點,其實還是能夠做出自己的最佳選擇的。

雲端深度學習

AWS 上的 GPU 實例和 Google Cloud 中的 TPU 都是深度學習的可行選擇。雖然 TPU 稍微便宜一點,但它缺乏 AWS GPU 的多功能性和靈活性。 TPU 可能是訓練目標識別模型的首選。但對於其他類型的工作負載,AWS GPU 可能是更安全的選擇。部署雲端實例的好處在於可以隨時在 GPU 和 TPU 之間切換,甚至可以同時使用它們。

但是,請注意這種場景下的機會成本問題:如果讀者學習了使用 AWS 實例能夠順利完成工作流程的技能,那麼也就失去了利用個人 GPU 進行工作的時間,也無法獲得使用 TPU 的技能。而如果使用個人 GPU,就無法通過雲擴展到更多 GPU / TPU 上。如果使用 TPU,就無法使用 TensorFlow,而且,切換到 AWS 平臺並不是一件很容易的事。流暢的雲工作流程的學習成本是非常高的,如果選擇 TPU 或 AWS GPU,應該仔細衡量一下這個成本。

另一個問題是關於何時使用雲服務。如果讀者想學習深度學習或者需要設計原型,那麼使用個人 GPU 可能是最好的選擇,因為雲實例可能成本昂貴。但是,一旦找到了良好的深度網絡配置,並且只想使用與雲實例的數據並行性來訓練模型,使用雲服務是一種可靠的途徑。也就是說,要做原型設計,使用小型 GPU 就夠了,也可以依賴雲計算的強大功能來擴大實驗規模,實現更復雜的計算。

如果你的資金不足,使用雲計算實例也可能是一個很好的解決方案,但問題是,當你只需要一點點原型設計時,還是隻能分時購買大量計算力,造成成本和計算力的浪費。在這種情況下,人們可能希望在 CPU 上進行原型設計,然後在 GPU / TPU 實例上進行快速訓練。這並不是最優的工作流程,因為在 CPU 上進行原型設計可能是非常痛苦的,但它確實是一種經濟高效的解決方案。

結論

在本文中,讀者應該能夠了解哪種 GPU 適合自己。總的來說,我認為在選擇 GPU 是有兩個主要策略:要麼現在就使用 RTX 20 系列 GPU 實現快速升級,或者先使用便宜的 GTX 10 系列 GPU,在 RTX Titan 上市後再進行升級。如果對性能沒那麼看重,或者乾脆不需要高性能,比如 Kaggle 數據競賽、創業公司、原型設計或學習深度學習,那麼相對廉價的 GTX 10 系列 GPU 也是很好的選擇。如果你選擇了 GTX 10 系列 GPU,請注意確保 GPU 顯存大小可以滿足你的要求。

那麼對於深度學習,如何選擇GPU?我的建議如下:

[1] timdettmers.com/2014/09/21/how-to-build-and-use-a-multi-gpu-system-for-deep-learning/

新智元AI WORLD 2018大會倒計時27

門票已開售!

新智元將於9月20日在北京國家會議中心舉辦AI WORLD 2018 大會,邀請機器學習教父、CMU教授 Tom Mitchell,邁克思·泰格馬克,周志華,陶大程,陳怡然等AI領袖一起關注機器智能與人類命運。

大會官網:

http://www.aiworld2018.com/

「深度分析」深度学习选GPU,RTX 20系列值不值得?
  • 活動行購票鏈接:

    http://www.huodongxing.com/event/6449053775000

  • 活動行購票二維碼:

「深度分析」深度学习选GPU,RTX 20系列值不值得?


分享到:


相關文章: