2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測
Synced Lab 原創
分析師:AnguliaChao, Hecate
策劃:H4O, Mos, 之乎
2018 年 12 月,英偉達在加拿大蒙特利爾 NeurIPS 大會上發布最新款產品 Titan RTX,作為 2017 年 Titan V 的「繼承者」,Titan RTX 價格更低,顯存更大,性能更強,且使用圖靈架構,具備強大的光線追蹤能力。因此,Titan RTX 的發布對 AI 社區而言,是不是做深度學習的一個不錯選擇呢?
在英偉達的支持下,機器之心評估了 TensorFlow、PyTorch 和 MXNet 三種框架在 Titan RTX 上的性能,從而為開發者提供組合機器學習任務、框架和硬體的正確洞見。
1. 引言
毫無疑問,GPU 對於機器學習從業者來說一直扮演著非常重要的角色,尤其是在需要大量並行計算能力的深度學習領域。由於英偉達 CUDA 架構 [1] 的出現,開發者得以利用 GPU 的並行計算能力,不需付出額外的努力就能實現通用計算。自 2007 年初首次推出 CUDA 以來,英偉達一直在改變 GPU 市場的格局以及深度學習等 GPU 驅動的應用。
繼 2018 年秋髮布最新的圖靈架構並推出 GeForce 20 系列以後,英偉達最終於 2018 年末發布了 Titan RTX。表 1.1 展示了 20 系列 GPU 及 10 系列代表性 GPU 1080 Ti 之間的主要差別。除了晶體管體積、CUDA Core、內存容量、內存帶寬上的升級之外,20 系列還增加了 Tensor Core 和光線追蹤(RT)核兩個主要新部件。Tensor Core 使得 Titan RTX 可以實現高速浮點運算以及大型矩陣運算。Tensor Core 用深度學習超級採樣(DLSS)代替抗鋸齒(anti-aliasing)。RT Core 用於生成反射和陰影。
表 1.1:英偉達 Titan RTX 及其他主流英偉達 GPU 之間的參數差別。
強大的 GPU 促進了整個機器學習和深度學習社區的繁榮。由 GPU 支持的流行框架已經發布并迭代更新。TensorFlow、PyTorch 和 MXNet 是具備 GPU 支持的、使用最廣泛的三種框架。雖然這些框架被設計為通用機器學習平台,但是它們的設計、架構和實現的內在差異導致了 GPU 上機器學習性能的潛在差異。例如,在 VGG16 訓練測試中,TensorFlow 的訓練速度比 MXNet 快了 49%,PyTorch 比 MXNet 快了 24%。這種差異對於機器學習從業者來說非常重要,他們在選擇帶有特定類型 GPU 的適當框架時必須考慮時間和金錢成本。
我們的目標是評估 TensorFlow、PyTorch 和 MXNet 在 Titan RTX 上實現的性能。此外,通過運行各種混合精度和單精度標準模型的訓練階段和推理階段,我們不僅收集了訓練/推理的進度數據,還記錄了 GPU 利用率、內存利用率等實時的操作系統(OS)指標。這些操作系統級別的指標進一步幫助區分各個框架利用底層硬體的能力。
安裝了 Titan RTX 測試台上的實驗表明,在 ImageNet 和 COCO2017 這樣相對較大的數據集上,TensorFlow 和 PyTorch 的訓練速度可能比 MXNet 略快。但在相對較小的圖像上,MXNet 有最好的訓練表現。這一轉變相當有趣,可能表明 TensorFlow 和 PyTorch 在數據密集型任務的優化上較有潛力,而 MXNet 在一般的機器學習處理上較好。
另一個有趣的點在於,混合精度在深度學習中表現非常好,在我們選擇的所有實驗中,我們不犧牲準確率就能提高訓練速度。這表明,混合精度有成為深度學習訓練主流的潛質。
2. 背景
2.1. RTX GPU 系列
我們從英偉達拿到的 GPU 是一個圖靈架構的 Titan RTX。與現有的 PC GPU 相比,Titan RTX 是針對 PC 用戶的最快的顯卡。GPU 的高計算效率驅使開發者們在設計分散式機器學習框架時引入 GPU。
谷歌大腦於 2015 年冬發布了其第二代機器學習框架 TensorFlow。Facebook 於 2015 年秋髮布了 PyTorch。由於 PyTorch 的純 Python 式開發風格,其一經面世就受到了 Python 社區的熱烈歡迎。Apache MXNet 已經由最初的學術版 [2] 發展為今天的 Apache 孵化項目。亞馬遜已將 MXNet 選為其 AWS 上的深度學習框架。這三種機器學習框架在業界和學界得到廣泛使用。我們的評估將基於這三個框架來涵蓋大多數機器學習從業者。
GPU 評估領域有著豐富的文獻資料。多數評估報告旨在指出不同 GPU 在標準機器學習模型上的性能差異。TensorFlow 擁有內建的性能測試基準,包含兩塊建立在 Tesla 架構上的 GPU——英偉達 P 100 和英偉達 K80[3]。MLPerf (https://mlperf.org/results/) 系統地評估了一系列平台,包括谷歌 TPU、英特爾 CPU、英偉達 GPU 等。
截至本報告撰寫之前,MLPerf 還未將最近的英偉達 GPU(如 Titan RTX)包含在內。AI 基礎設施公司 Lambda 就 2080 Ti TensorFlow GPU 基準發布過一篇博客(https://lambdalabs.com/blog/best-gpu-tensorflow-2080-ti-vs-v100-vs-titan-v-vs-1080-ti-benchmark/)。
在該博客中,評測人員在英偉達 2080 Ti、V100、1080 Ti 等 GPU 上運行 TensorFlow 模型。與現有評估不同,我們的目標是評估主流的機器學習框架如何利用最新的 Titan RTX 進行機器學習訓練和推理。在 Titan RTX 內部,圖靈架構下 Tensor Core 提供多種訓練和推理精度,從單精度 FP 32 到半精度 FP 16 和混合精度,性能大幅提升。
2.2 混合精度
我們可以通過擴展神經網路體積獲取更好的模型,但訓練模型所需的內存和算力也會隨之增加。因此,混合精度被作為一種方法引入,它可以讓神經網路在訓練過程中利用半精度浮點數而不改變模型準確率或修改超參數。
在訓練中應用混合精度時,權重、梯度儲存在 FP16 中,降低存儲和矩陣運算的內存壓力。主要權重維持在 FP32 中,並用每層前向、後向通過的 FP16 結果更新。
圖 2.2.1:混合精度訓練流程。
我們在 FP32 中進行試驗,即激活函數、權重、梯度及所有的運算都存儲在單精度中。對選定的部分任務進行混合精度比較分析。
3. 評估
這一部分將展示我們的測試平台配置——一台包含現成組件的台式機。此外,我們還將描述基準模型和收集到的指標。我們寫出了儘可能多的細節,以確保該評估過程能夠復現。
3.1 測試平台
我們在一個測試平台計算機(多數主流 PC 的代表)上安裝了 Titan RTX。我們相信這一測試平台足夠有代表性,多數讀者都可以負擔得起。此外,還可以根據我們的測試平台粗略推斷其在使用 SSD 和 DDR4 內存的高端機器上的性能。RTX 最有名的應用在遊戲、娛樂領域。我們的讀者可能只是將 RTX 添加到自己的家庭工作站中,用於工作、學習和遊戲。這份報告的目的之一就是為讀者提供一份這種配置的性能水平參考。
配置參數見表 3.1.1。
表 3.1.1:測試平台配置
為了確保我們的評估保持一致,我們從 NVIDIA GPU Cloud(NGC)中相應地提取了最新的 TensorFlow、PyTorch 及 MXNet 鏡像,同時這還可以幫助我們輕鬆地設置環境。我們安裝的框架版本和驅動如表 3.1.1 所示。我們對所有的框架使用默認 FP32 精度。我們將在以下的評估中嘗試混合精度。
表 3.1.2:框架、驅動版本。
3.2 基準和指標
MLPerf(https://mlperf.org)等第三方平台已經在多個 GPU 中得出了詳細的訓練性能結果數據(參見:https://mlperf.org/results/),但 MLPerf 並沒有涵蓋本報告中提供的性能結果。我們將只在 Titan RTX GPU 上進行一系列實驗。在實驗的第一部分,我們將探索該 GPU 在不同規模、精度、類型的計算機視覺、自然語言處理任務中的推理和訓練速度。對於 ML 從業者來說,本技術報告將直觀地展示常用模型中 Titan RTX 的性能,幫助您更好地比較並決定要選擇的理想設備。
為了給讀者一個關於結果的直觀印象,我們遵循了每個網路的官方設置,如 VGG 的批大小是 128,Faster-RCNN 的項目內部有兩個固有的網路,RPN 網路分支將生成多個建議(我們的設置是 256),這樣批大小看起來就不會小。考慮到不同框架之間的實現細節,批大小為 1 是最穩定的,讀者復現起來也更容易,因此我們選擇這個值。
以 Titan RTX GPU 為中心,我們將評估實驗擴展到了 TensorFlow、PyTorch 和 MXNet 等不同的流行框架上,用到了 COCO2017、CIFAR-10、ImageNet 2012、WMT16 English-German、MovieLens-1M 和 text8 等數據集。
在任務選擇上,我們選擇了不同規模數據集上的兩個分類任務和一個檢測任務:CIFAR-10 上的 ResNet-50 分類任務、ImageNet 2012 上的 VGG 16 分類任務以及 COCO 2017 上的 Faster-RCNN 檢測任務。在 NLP 方面,我們為三個流行的任務選擇了最主要的模型,包括用於機器翻譯的 Google Neural Machine Translation,用於推薦系統的 Neural Collaborative Filtering 以及用於詞嵌入的 Word2Vec。每個實驗都遵循其原始 repo 中的官方設置。
評估指標包括 GPU 的利用率、內存利用率、GPU 內存佔用,CPU 利用率、內存利用率、CPU 內存佔用和訓練/推理速度等。這樣可以讓讀者對每一個任務都有一個綜合的印象。
這些利用率指標是平均值。以 5 秒為間隔記錄數據,實驗後根據記錄數據計算平均利用率。最後,由於 Titan RTX 最近才支持混合精度,我們在混合精度和單精度(FP32)下評估不同的模型。我們還將呈現混合精度和單精度下的訓練、推理差別。
表 3.2.1:評估中用的基準。
4. 在計算機視覺任務上的結果
在這一部分,我們以單精度運行所有的計算機視覺(CV)任務。以下為所有的設置步驟和實驗環境,我們將 CV 任務的結果細節呈現如下:
4.1 實驗 1:在 CIFAR-10 數據集上進行 RESNET-50 推理、訓練
設置:
實驗:ResNet-50 推理
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:64(推理)
表 4.1.1:以單精度進行 ResNet-50 推理的性能和資源利用率
設置:
實驗:ResNet-50 訓練
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:128(訓練)
表 4.1.2:單精度的 ResNet-50 訓練性能和資源利用率
4.2 實驗 2:在 ImageNet 上進行 VGG 16 推理、訓練
設置:
實驗:VGG 16 推理
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:64(推理)
表 4.2.1:VGG16 推理性能和資源利用率
設置:
實驗:VGG-16 訓練
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:128(訓練)
表 4.2.2:單精度 VGG16 訓練性能和資源利用率
4.3 實驗 3:Faster-RCNN、COCO 2017
Faster-RCNN 實驗的 batch 大小設為 1。由於演算法的限制,只將 Faster-RCNN 的 batch 大小設為 1——如果做一些修改,它可以增加到 4,但我們決定保持原來的實現。其他實驗的 batch 大小都為 64 或 128。
設置:
實驗:Faster-RCNN 推理
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:1(推理)
表 4.3.1:Faster-RCNN 推理性能和資源利用率
設置:
實驗:Faster-RCNN 訓練
框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01
Batch 大小:1(訓練)
表 4.3.2:單精度 Faster-RCNN 訓練性能和資源利用率
4.4 結果分析
我們將評估數據可視化,以便在不同的框架和任務之間進行直觀的比較。我們從中發現了幾個有趣的結果,例如,圖 4.4.1 和圖 4.4.2 展示了不同 CV 模型的推理速度和訓練速度。
圖 4.4.1:所有的推理速度
在 ResNet50 的測試中,TensorFlow 獲得了最佳推理速度,MXNet 在 VGG-16 推理測試中速度是最快的,PyTorch 在 Faster-RCNN 的測試上是最快的。
圖 4.4.2:所有的訓練速度
在 ResNet-50 測試中 MXNet 訓練速度最快,TensorFlow 在 VGG-16 上有最快的速度,PyTorch 在 Faster-RCNN 上訓練速度最快。
為了總結 GPU/CPU 使用和內存使用情況,我們根據不同框架與實驗繪製了以下圖表。
圖 4.4.3:推理階段的 GPU 利用率
在 VGG-16 推理上,三個框架都完全使用了 GPU;因為代碼優化問題,PyTorch 在 FRCNN 推理上使用最少的 GPU。平均而言,TensorFlow 在所有推理任務上使用了最多的 GPU。
圖 4.4.4:推理階段的 GPU 內存利用率
在 ResNet-50 推理中,MXNet 佔用最少的 GPU 內存;TensorFlow 在 VGG 16 推理中佔用的內存最少;PyTorch 在 Faster-RCNN 中佔用的內存最少。平均而言,TensorFlow 和 PyTorch 佔用的內存比例類似,MXNet 在推理中佔用的內存最少。
圖 4.4.5:推理階段的 CPU 利用率
平均下來,TensorFlow 使用最少的 CPU,PyTorch 在推理任務中使用的最多。
圖 4.4.6:推理階段的 CPU 內存利用率
在推理任務中,TensorFlow 平均佔用最多的 CPU 內存,PyTorch 和 MXNet 佔用的內存值類似。
圖 4.4.7:訓練階段的 GPU 利用率
在訓練階段,PyTorch 使用了最多的 GPU 資源,TensorFlow 最少。
圖 4.4.8:訓練階段的 GPU 內存利用率
在訓練階段,PyTorch 使用了最多的 GPU 內存資源,TensorFlow 最少。
圖 4.4.9:訓練階段的 CPU 利用率
在訓練任務上,MXNet 使用最少的 CPU 資源,TensorFlow 平均使用最多。
圖 4.4.10:訓練階段的內存利用率
在訓練上,PyTorch 使用的 CPU 內存最多,MXNet 和 TensorFlow 平均使用的內存類似。
注意,所有實驗使用的 repositories 都來自 GitHub 開源代碼,代碼使用者在使用時可能會對代碼進行優化,所以最終結果上可能有所差別。
從上表中,我們觀察到了一些有趣的點。在 ResNet-50 上進行訓練時,MXNet 是最快的框架。執行 VGG-16 任務時,三個框架都充分利用了 GPU,但 TensorFlow 的樣本訓練速度最快,MXNet 速度最慢。在檢測實驗中,PyTorch 版的 Faster-RCNN 性能遠遠超過其他兩個框架(但 PyTorch 版本的代碼需要一些額外的優化工作)。這些發現告訴我們,即使是在同一台計算設備上,不同類型的任務或不同框架都可能導致性能差異,數據集、代碼優化方法也有影響。
5. 在 NLP 任務上的結果
在這一部分,我們以單精度運行所有 NLP 任務。以下為所有的設置步驟和實驗環境,我們把所有的結果陳列如下:
5.1 實驗 4:谷歌神經機器翻譯(NMT)
設置:
實驗:谷歌 NMT 訓練
框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02
Batch 大小:128(訓練)
數據集:WMT16 English-German
表 5.1.1:谷歌 NMT 訓練性能和資源利用率(單精度)。
表 5.1.2:谷歌 NMT 訓練性能和資源利用率(混合精度)。
設置:
實驗:NMT 推理
框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02
Batch 大小:128(推理)
數據集:newstest2014
表 5.1.3:NMT 推理性能和資源利用率。
5.2 實驗 5:推薦系統-神經網路協同過濾 (NCF)
設置:
實驗:神經網路協同過濾訓練
框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02
Batch 大小:256(訓練)
數據集:MovieLens-1M
表 5.2.1:神經網路協同過濾訓練性能和資源利用率(單精度)
表 5.2.2:神經網路協同過濾訓練性能和資源利用率(混合精度)
設置:
實驗:NCF 推理
框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02
Batch 大小:100(推理)
數據集:MovieLens-1M test
表 5.2.3:神經網路協同過濾推理性能和資源利用率。
5.3 實驗 6:詞嵌入-Word2Vec
設置:
實驗:Word2Vec 的 Skip-Gram 模型訓練
框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02
Batch 大小:256(訓練)
數據集:text8
表 5.3.1:Word2Vec 訓練性能和資源利用率(單精度)
5.4 結果分析
圖 5.4.1:不同 NLP 模型在單精度下的訓練速度。
在 GNMT 的測試中,MXNet 訓練速度最快,PyTorch 在神經網路協同過濾訓練中速度是最快的,TensorFlow 在 Word2Vec 訓練中是最快的。
圖 5.4.2:用於神經機器翻譯的不同框架推理速度。
TensorFlow 和 MXNet 的訓練速度在 GNMT 和 NCF 任務中非常接近,而 PyTorch 表現更佳。
為了總結 GPU/CPU 使用和內存使用情況,我們根據不同框架與實驗繪製了以下圖表。
圖 5.4.3:訓練階段的 GPU 利用率。
TensorFlow 在 Word2Vec 訓練中的 GPU 利用率比其他框架高得多。PyTorch 在 GNMT 訓練中的 GPU 使用率最高,而在 NCF 訓練中最低。
圖 5.4.4:推理的 GPU 利用率
對於 GNMT 任務,PyTorch 的 GPU 利用率最高,其推理速度優於其他框架。對於 NCF 任務,儘管所有三個框架之間沒有顯著差異,但 PyTorch 仍然是一個更好的選擇,因為當 GPU 是主要關注點時,它具有更高的推理速度。
圖 5.4.5:GPU 內存利用時訓練。
MXNet 在 GNMT 和 Word2Vec 訓練中擁有最高的 GPU 內存利用時,而在 NCF 訓練中,PyTorch 和 MXNet 的內存利用幾乎可以忽略不計。總的來說,MXNet 在所有任務中使用的 GPU 內存利用時最少。
圖 5.4.6:推理的 GPU 內存利用時。
在讀取或寫入設備內存期間,TensorFlow 在過去的採樣周期中有更高的時間百分比,但是對於 PyTorch 和 MXNet 來說,GPU 不是進行 GNMT 和 NCF 任務推斷的必要條件,特別是對於 NCF 任務來說(當時間百分比低於 0.50% 時,四捨五入到 0.00%)。
圖 5.4.7:訓練階段的 CPU 使用。
平均而言,在訓練階段,所有框架的 CPU 利用率較為平均。
圖 5.4.8:推理的 CPU 利用率。
圖 5.4.9:訓練階段的內存使用。
平均來說,TensorFlow 在所有訓練任務中佔用的內存最少,PyTorch 在 NCF 和 Word2Vec 任務中佔用的內存最高。
圖 5.4.10:推理的內存利用率。
這三個框架沒有太大的不同。
由於廠商採用不同的優化方法,即使在相同的硬體平台上訓練相同的神經網路,每個框架也表現出不同的運行性能。眾所周知,NMT 任務在訓練和翻譯推理方面的計算開銷都很大,對於這些任務,MXNet 實現了最佳性能,GPU 利用率較低,但 CPU 利用率較高。對於推薦任務,各種框架在訓練步驟上沒有明顯的變化,但是在推理步驟上,PyTorch 表現突出。對於 Word2Vec 任務,TensorFlow 的表現優於其他框架,相應地,它的 GPU 利用率更高。
6. 在混合精度和單精度上的結果
在以混合精度和單精度執行訓練和推理時,我們比較了三種框架的性能和效率。我們對 Titan RTX 的評估表明,混合精度下的訓練和推理都優於單精度下的訓練和推理。這一觀察結果表明,我們有必要將混合精度支持加入到 GPU 中以執行 ML 任務。
6.1 ResNet-50
為了評估每個框架在混合精度上的性能以及混合精度和單精度之間的性能差距,我們分別在混合精度和單精度的三個框架上運行 ResNet-50。這三個框架的 ResNet-50 代碼庫由英偉達(https://github.com/NVIDIA/DeepLearningExamples)提供。應該注意的是,在我們的評估中,我們發現 PyTorch 沒有充分利用 GPU,並且在三個框架中實現了最慢的圖像處理速度。英偉達在 PyTorch 中實現的 ResNet-50 可能沒有得到充分優化。此外,當 batch 大小為 256 時,MXNet 在單精度上耗光了內存,然後我們將 batch 大小切換到 208。
圖 6.1.1 和圖 6.1.2 分別顯示了訓練和推理期間每秒處理的圖像。除 PyTorch 外,混合精度的速度幾乎是單精度的兩倍。
圖 6.1.1:ResNet-50 訓練速度。
圖 6.1.2:ResNet-50 推理速度。
如圖 6.1.3 所示,雖然混合精度的訓練速度更快,但它消耗的 GPU 比單精度的低。半精度計算降低了計算複雜度,減輕了存儲壓力。
圖 6.1.3:ResNet-50 訓練時的 GPU 利用率。
圖 6.1.4 顯示了不同框架在訓練 ResNet-50 時使用的 GPU 時間。
圖 6.1.4:ResNet-50 訓練時的 GPU 利用時。
TensorFlow 消耗的 CPU 比其他兩個框架多得多,在圖 6.1.5 中,混合精度的 TensorFlow 利用 CPU 的比例約為 66%。由於大多數工作負載都分配給了 GPU,因此 CPU 利用率很低。
圖 6.1.5:ResNet-50 訓練時的 CPU 利用率。
如圖 6.1.6 所示,三個框架消耗的內存相當。
圖 6.1.6:ResNet-50 訓練時的內存利用率。
與圖 6.1.3 中顯示的訓練時的 GPU 利用率相似,以混合精度進行推理時框架消耗的 GPU 較少(見圖 6.1.7)。
圖 6.1.7:ResNet-50 在推理時的 GPU 利用率。
如圖 6.1.8 所示,以單精度進行推理比混合精度利用的 GPU 內存利用時更多。
圖 6.1.8:推理時的內存利用時。
與圖 6.1.5 中的訓練類似,推理時的 CPU 利用也很低(見圖 6.1.9)。
圖 6.1.9:推理時的 CPU 利用率。
圖 6.1.10 表明,推理消耗的內存少於訓練。儘管我們只有 16GB 內存,但在執行 ResNet-50 的訓練和推理時,它仍然不是 Titan RTX 的瓶頸。
圖 6.1.10:推理時的內存利用率。
6.2. NLP 任務
為了評估每個框架在混合精度上的性能以及混合精度和單精度之間的性能差距,我們分別在 TensorFlow 和 PyTorch 框架上以混合精度和單精度運行了谷歌神經機器翻譯(GNMT)系統。
表 6.2.1:GNMT 任務混合精度訓練與單精度訓練的比較。
圖 6.2.1:GNMT 任務混合精度與 f32 精度之間的訓練速度對比(步/秒)。
混合精度能比單精度獲得更好的性能,特別是在 PyTorch 框架下,從中我們可以看出明顯的區別。
圖 6.2.2:GNMT 任務混合精度和 f32 精度之間的 GPU 利用率對比。
圖 6.2.3:GNMT 任務的混合精度和 f32 精度之間的 GPU 內存利用時對比。
在 TensorFlow 框架下,混合精度的 GPU 利用率和內存利用時較低,但速度更快。對於 PyTorch 來說,雖然 GPU 利用率和內存利用時更高,但相應的性能也顯著提高。
圖 6.2.4:GNMT 任務混合精度和 f32 精度的 CPU 利用率對比。
圖 6.2.5:GNMT 任務混合精度和 f32 精度的內存利用率對比。
TensorFlow 和 PyTorch 在本實驗的 CPU 上具有較小的差異,但混合精度略高。
表 6.2.2:NCF 任務混合精度訓練與單精度訓練的比較。
圖 6.2.6:NCF 任務混合精度與單精度訓練速度比較(步/秒)。
與 GNMT 任務的性能相似,NCF 任務的訓練速度在混合精度下得到提高。
圖 6.2.7:NCF 任務混合精度與單精度訓練速度對比。
圖 6.2.8:NCF 任務混合精度與單精度 GPU 內存使用時對比。
在混合精度下,NCF 訓練消耗的 GPU 利用和內存利用時更高。
圖 6.2.9:NCF 任務混合精度與單精度 GPU 內存利用時對比。
圖 6.2.10:NCF 任務混合精度與單精度 GPU 內存利用時對比。
單精度比混合精度具有更高的 CPU 利用率和內存利用率。
綜上所述,在不損失模型準確率且內存佔用不明顯的情況下,以混合精度訓練模型比以單精度訓練模型速度更快。
6.3 總結
對於 CV 模型來說,Titan RTX 支持的半精度大大加快了訓練和推理中的圖像處理。一般來說,半精度訓練和推理消耗的 GPU 利用較少。此外,對於自然語言處理任務,我們已經證明,深度學習模型在以混合精度進行訓練時可以加快訓練速度,同時不損失準確率。總的來說,我們的實驗表明,在訓練過程中使用半精度存儲作為正則化方法是非常可取的,我們相信混合精度可以成為一種重要的技術,使我們能夠減少算術運算,從而降低對 GPU 的要求。
7. 總結
在此報告中,我們在最新的 Titan RTX GPU 上評估了三個主流的機器學習框架。我們測試台上的評估結果表明,Titan RTX 能為 CV 模型、NLP 模型的訓練與推理帶來極大的增長,特別是有了混合精度的支持。我們還觀察了不同框架利用 GPU 做不同模型時的表現差別。在機器學習開發者決定機器學習任務、框架和硬體的正確組合時,這樣的性能差別就顯得極為重要。
該報告僅僅揭示了軟體與硬體組合的一小部分。還有大量的空間亟待我們去探索和驗證,比如 NVIDIA 的 TensorRT,SAP 機器學習組的工程師在 Tesla V100 GPU 集群式使用 TensorRT 進行推斷,能帶來將近 45 倍的速度提升。未來,我們將進一步推動在更多模型、框架與硬體上的評估。
致謝
非常感謝英偉達在不限制寫作的情況下為我們提供了一塊 Titan RTX GPU。我們在此 GPU 上完成的系列測評完全遵循中立、公平的原則。最後,感謝來自機器之心全球辦公室的同事們以及我們多倫多大學的朋友 Jack Luo 的支持。
附錄:分析師手記
參照以上提及的所有結果,Titan RTX 在各種計算機視覺任務的訓練與推理上都能做的很好,即使在圖像 batch 很大的情況下也不例外。因為 Titan RTX 相比於其他 RTX 20x 系列有更大的 GPU 內存,一般的訓練任務可以完全放到內存內,與多卡訓練相比,這極大的減少了時間成本。此外,全新的圖靈架構使得對 GPU 的可控性更強,在某種程度上可以減少 CPU 佔用。強大的 Tensor Core 加快了一般計算機視覺任務的速度。關於顯式的實驗結果,我們發現 TensorFlow 和 PyTorch 在數據密集型 CV 任務上表現較好,MxNet 在一般的小型數據集訓練任務上表現較好。就資源利用而言,PyTorch 可以更加合理地利用 GPU。對於自然語言處理任務,沒有一個框架能夠超越其他框架,但我們發現,對於某些任務,TensorFlow 的擴展性比其他框架差,例如谷歌神經機器翻譯系統,這可能是由於 TensorFlow 在 CPU 端計算梯度聚合併更新模型。
除了不同框架在 Titan RTX GPU 上的表現,讓我們對比下先前發布過的主流 GPU 的更多硬體特徵。快速瀏覽表 1.1 中的規格,我們能夠發現 Titan RTX 作為一塊為 PC 端深度學習設計的 GPU,相比於其他三款 Geforce 系列 GPU,擁有最多的 CUDA Core、最大的內存帶寬和匯流排帶寬,這為深度學習帶來了最強大的矩陣計算加速。在三個主要參數上,RTX 2080 Ti 的配置相對更接近 Titan RTX,且都部署了最新的圖靈架構。在 GPU 市場中,GTX 1080 Ti 是款非常經典的 GPU,但基於舊版 Pascal 架構的 GTX 1080 Ti 完全被 RTX 2080 Ti 超越。(對比細節見參考文獻鏈接 20、21)。
RTX 2080 作為一款以遊戲為主要戰場的 Geforce 系列 GPU,由於相對有限的顯存大小以及缺乏其他吸引眼球的關鍵特徵,它顯然並不如 Titan RTX 適合進行深度學習任務。在我看來,雖然 RTX 2080 Ti 能夠滿足部分常見計算機視覺任務上的內存容量和加速需求,但對大型 batch 訓練和數據密集型任務而言,我還是會選擇擁有 24GB GDDR6 內存大小的 Titan RTX,這可能會節省我多卡配置的空間,減少多卡通信時間,讓我在深度學習任務上相對輕鬆地訓練一個相對大型的數據集。如果你是要做數據中心級別的大規模深度學習任務,相較於 Titan RTX,Tesla 系列是更合適的選擇。
與單精度相比,混合精度有其明顯的優勢,只是它需要硬體的支持,而且大多數現有模型不提供用於訓練或部署的混合精度選項。我們期待在用官方 API 構建模型時,使得已有機器學習框架將混合精度作為一個內置特性來實現。
參考文獻
[1] http://developer.download.nvidia.com/compute/cuda/docs/CUDA_Architecture_Overview.pdf
[2] MXNet: A Flexible and Efficient Machine Learning Library for Heterogeneous Distributed Systems, https://github.com/dmlc/web-data/raw/master/mxnet/paper/mxnet-learningsys.pdf
[3] TensorFlow Benchmark, https://www.tensorflow.org/guide/performance/benchmarks
[4] TensorFlow Train Res50 (/workspace/models/official/resnet)
Cifar10:https://github.com/tensorflow/models/tree/master/official/resnet
[5] TensorFlow Train VGG16
Imagenet:https://github.com/tensorflow/models/tree/master/research/slim
[6] TensorFlow Inference Res50/VGG16
Imagenet/cifar10:https://github.com/tensorflow/benchmarks/tree/master/scripts/tf_cnn_benchmarks
[7] TensorFlow FasterRCNN COCO:https://github.com/tensorpack/tensorpack(python3 xx.py)
[8] PyTorch Train Res50 Cifar10:https://github.com/kuangliu/pytorch-cifar
[9] PyTorch Train VGG16
https://github.com/pytorch/examples/tree/master/imagenet
Imagenet:https://github.com/pytorch/examples/tree/master/imagenet
https://github.com/ryujaehun/pytorch-gpu-benchmark/blob/master/benchmark_models.py
https://gist.github.com/tdeboissiere/12a5e814e9eff3d2cb2c29ff100a09f0
[10] PyTorch Inference Res50
Cifar10 _https://github.com/kuangliu/pytorch-cifar_
[11] PyTorch Inference VGG16
Imagenet:https://github.com/pytorch/examples/tree/master/imagenet
[12] PyTorch FasterRCNN
https://github.com/ruotianluo/pytorch-faster-rcnn
[13] MXNet Train Res50
https://github.com/tornadomeet/ResNet
Cifar10:https://github.com/apache/incubator-mxnet/tree/master/example/image-classification
https://mxnet.incubator.apache.org/api/python/gluon/model_zoo.html
[14] MXNet Train VGG16
Imagenet:https://mxnet.incubator.apache.org/api/python/gluon/model_zoo.html
[15] MXNext Inference Res50
https://www.leadergpu.com/articles/432-mxnet-benchmark
https://github.com/apache/incubator-mxnet/tree/master/example/image-classification
[16] MXNet Inference VGG16
https://mxnet.apache.org/model_zoo/index.html
[17] MXNet FasterRCNN
https://github.com/ijkguo/mx-rcnn
[18] https://www.tomshardware.com/news/nvidia-titan-rtx-specs-pricing,38184.html
[19] https://www.hardwarezone.com.sg/feature-nvidia-geforce-rtx-2080-and-2080-ti-review-guess-who-has-fastest-cards-again/test-setup-gaming-performance
[20]https://lambdalabs.com/blog/2080-ti-deep-learning-benchmarks/
[21]https://gpu.userbenchmark.com/Compare/Nvidia-RTX-2080-Ti-vs-Nvidia-GTX-1080-Ti/4027
本文為機器之心Synced Lab原創,轉載請聯繫本公眾號獲得授權。
------------------------------------------------
※即插即用新卷積:提升CNN性能、速度翻倍
※網路規模更小、速度更快,這是谷歌提出的MorphNet
TAG:機器之心 |