2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測

機器之心發表於2019-04-18

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 用於生成反射和陰影。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 2.2.1:混合精度訓練流程。 

我們在 FP32 中進行試驗,即啟用函式、權重、梯度及所有的運算都儲存在單精度中。對選定的部分任務進行混合精度比較分析。

3. 評估

這一部分將展示我們的測試平臺配置——一臺包含現成元件的桌上型電腦。此外,我們還將描述 基準模型和收集到的指標。我們寫出了儘可能多的細節,以確保該評估過程能夠復現。

3.1 測試平臺

我們在一個測試平臺計算機(多數主流 PC 的代表)上安裝了 Titan RTX。我們相信這一測試平臺足夠有代表性,多數讀者都可以負擔得起。此外,還可以根據我們的測試平臺粗略推斷其在使用 SSD 和 DDR4 記憶體的高階機器上的效能。RTX 最有名的應用在遊戲、娛樂領域。我們的讀者可能只是將 RTX 新增到自己的家庭工作站中,用於工作、學習和遊戲。這份報告的目的之一就是為讀者提供一份這種配置的效能水平參考。

配置 引數見表 3.1.1。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 3.1.1:測試平臺配置 

為了確保我們的評估保持一致,我們從 NVIDIA GPU Cloud(NGC)中相應地提取了最新的 TensorFlow、PyTorch 及 MXNet 映象,同時這還可以幫助我們輕鬆地設定環境。我們安裝的框架版本和驅動如表 3.1.1 所示。我們對所有的框架使用預設 FP32 精度。我們將在以下的評估中嘗試混合精度。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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)下評估不同的模型。我們還將呈現混合精度和單精度下的訓練、推理差別。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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(推理)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 4.1.1:以單精度進行 ResNet-50 推理的效能和資源利用率


設定:

  • 實驗:ResNet-50 訓練

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:128(訓練)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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(推理)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 4.2.1:VGG16 推理效能和資源利用率


設定:

  • 實驗: VGG-16 訓練

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:128(訓練)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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(推理)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 4.3.1:Faster-RCNN 推理效能和資源利用率


設定:

  • 實驗:Faster-RCNN 訓練

  • 框架:NGC TensorFlow 18.12/NGC PyTorch 19.01/NGC MXNet 19.01

  • Batch 大小:1(訓練)

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 4.3.2:單精度 Faster-RCNN 訓練效能和資源利用率


4.4 結果分析

我們將評估資料視覺化,以便在不同的框架和任務之間進行直觀的比較。我們從中發現了幾個有趣的結果,例如,圖 4.4.1 和圖 4.4.2 展示了不同 CV 模型的推理速度和訓練速度。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.1:所有的推理速度

在 ResNet50 的測試中, TensorFlow 獲得了最佳推理速度, MXNetVGG-16 推理測試中速度是最快的,PyTorch 在 Faster-RCNN 的測試上是最快的。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.2:所有的訓練速度

在 ResNet-50 測試中 MXNet 訓練速度最快, TensorFlowVGG-16 上有最快的速度,PyTorch 在 Faster-RCNN 上訓練速度最快。

為了總結 GPU/CPU 使用和記憶體使用情況,我們根據不同框架與實驗繪製了以下圖表。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.3:推理階段的 GPU 利用率

VGG-16 推理上,三個框架都完全使用了 GPU;因為程式碼優化問題,PyTorch 在 FRCNN 推理上使用最少的 GPU。平均而言, TensorFlow 在所有推理任務上使用了最多的 GPU。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.4:推理階段的 GPU 記憶體利用率

在 ResNet-50 推理中, MXNet 佔用最少的 GPU 記憶體; TensorFlowVGG 16 推理中佔用的記憶體最少;PyTorch 在 Faster-RCNN 中佔用的記憶體最少。平均而言, TensorFlow 和 PyTorch 佔用的記憶體比例類似, MXNet 在推理中佔用的記憶體最少。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.5:推理階段的 CPU 利用率


平均下來, TensorFlow 使用最少的 CPU,PyTorch 在推理任務中使用的最多。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.6:推理階段的 CPU 記憶體利用率


在推理任務中, TensorFlow 平均佔用最多的 CPU 記憶體,PyTorch 和 MXNet 佔用的記憶體值類似。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.7:訓練階段的 GPU 利用率


在訓練階段,PyTorch 使用了最多的 GPU 資源, TensorFlow 最少。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.8:訓練階段的 GPU 記憶體利用率


在訓練階段,PyTorch 使用了最多的 GPU 記憶體資源, TensorFlow 最少。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.9:訓練階段的 CPU 利用率


在訓練任務上, MXNet 使用最少的 CPU 資源, TensorFlow 平均使用最多。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 4.4.10:訓練階段的記憶體利用率


在訓練上,PyTorch 使用的 CPU 記憶體最多, MXNetTensorFlow 平均使用的記憶體類似。

注意,所有實驗使用的 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

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.1.1:谷歌 NMT 訓練效能和資源利用率(單精度)


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.1.2:谷歌 NMT 訓練效能和資源利用率(混合精度)。


設定:

  • 實驗:NMT 推理

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:128(推理)

  • 資料集:newstest2014

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.1.3:NMT 推理效能和資源利用率。


5.2 實驗 5:推薦系統-神經網路協同過濾 (NCF)

設定:

  • 實驗:神經網路協同過濾訓練

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:256(訓練)

  • 資料集:MovieLens-1M

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.2.1:神經網路協同過濾訓練效能和資源利用率(單精度)


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.2.2:神經網路協同過濾訓練效能和資源利用率(混合精度)


設定:

  • 實驗:NCF 推理

  • 框架:NGC TensorFlow 19.02/NGC PyTorch 19.02/NGC MXNet 19.02

  • Batch 大小:100(推理)

  • 資料集:MovieLens-1M test

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 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

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 5.3.1:Word2Vec 訓練效能和資源利用率(單精度)


5.4 結果分析

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.1:不同 NLP 模型在單精度下的訓練速度。


在 GNMT 的測試中, MXNet 訓練速度最快,PyTorch 在神經網路協同過濾訓練中速度是最快的, TensorFlow 在 Word2Vec 訓練中是最快的。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.2:用於神經機器翻譯的不同框架推理速度。


TensorFlowMXNet 的訓練速度在 GNMT 和 NCF 任務中非常接近,而 PyTorch 表現更佳。

為了總結 GPU/CPU 使用和記憶體使用情況,我們根據不同框架與實驗繪製了以下圖表。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.3: 訓練階段的 GPU 利用率。


TensorFlow 在 Word2Vec 訓練中的 GPU 利用率比其他框架高得多。PyTorch 在 GNMT 訓練中的 GPU 使用率最高,而在 NCF 訓練中最低。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.4:推理的 GPU 利用率


對於 GNMT 任務,PyTorch 的 GPU 利用率最高,其推理速度優於其他框架。對於 NCF 任務,儘管所有三個框架之間沒有顯著差異,但 PyTorch 仍然是一個更好的選擇,因為當 GPU 是主要關注點時,它具有更高的推理速度。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.5:GPU 記憶體利用時訓練。


MXNet 在 GNMT 和 Word2Vec 訓練中擁有最高的 GPU 記憶體利用時,而在 NCF 訓練中,PyTorch 和 MXNet 的記憶體利用幾乎可以忽略不計。總的來說, MXNet 在所有任務中使用的 GPU 記憶體利用時最少。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.6:推理的 GPU 記憶體利用時。


在讀取或寫入裝置記憶體期間, TensorFlow 在過去的取樣週期中有更高的時間百分比,但是對於 PyTorch 和 MXNet 來說,GPU 不是進行 GNMT 和 NCF 任務推斷的必要條件,特別是對於 NCF 任務來說(當時間百分比低於 0.50% 時,四捨五入到 0.00%)。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.7:訓練階段的 CPU 使用。


平均而言,在訓練階段,所有框架的 CPU 利用率較為平均。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.8:推理的 CPU 利用率。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 5.4.9:訓練階段的記憶體使用。


平均來說, TensorFlow 在所有訓練任務中佔用的記憶體最少,PyTorch 在 NCF 和 Word2Vec 任務中佔用的記憶體最高。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 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 外,混合精度的速度幾乎是單精度的兩倍。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.1:ResNet-50 訓練速度。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.2:ResNet-50 推理速度。


如圖 6.1.3 所示,雖然混合精度的訓練速度更快,但它消耗的 GPU 比單精度的低。半精度計算降低了計算複雜度,減輕了儲存壓力。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.3:ResNet-50 訓練時的 GPU 利用率。


圖 6.1.4 顯示了不同框架在訓練 ResNet-50 時使用的 GPU 時間。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.4:ResNet-50 訓練時的 GPU 利用時。


TensorFlow 消耗的 CPU 比其他兩個框架多得多,在圖 6.1.5 中,混合精度的 TensorFlow 利用 CPU 的比例約為 66%。由於大多數工作負載都分配給了 GPU,因此 CPU 利用率很低。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.5:ResNet-50 訓練時的 CPU 利用率。


如圖 6.1.6 所示,三個框架消耗的記憶體相當。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.6:ResNet-50 訓練時的記憶體利用率。


與圖 6.1.3 中顯示的訓練時的 GPU 利用率相似,以混合精度進行推理時框架消耗的 GPU 較少(見圖 6.1.7)。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.7:ResNet-50 在推理時的 GPU 利用率。


如圖 6.1.8 所示,以單精度進行推理比混合精度利用的 GPU 記憶體利用時更多。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.8:推理時的記憶體利用時。


與圖 6.1.5 中的訓練類似,推理時的 CPU 利用也很低(見圖 6.1.9)。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.9:推理時的 CPU 利用率。


圖 6.1.10 表明,推理消耗的記憶體少於訓練。儘管我們只有 16GB 記憶體,但在執行 ResNet-50 的訓練和推理時,它仍然不是 Titan RTX 的瓶頸。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.1.10:推理時的記憶體利用率。


6.2. NLP 任務

為了評估每個框架在混合精度上的效能以及混合精度和單精度之間的效能差距,我們分別在 TensorFlow 和 PyTorch 框架上以混合精度和單精度執行了谷歌神經機器翻譯(GNMT)系統。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 6.2.1:GNMT 任務混合精度訓練與單精度訓練的比較。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.1:GNMT 任務混合精度與 f32 精度之間的訓練速度對比(步/秒)。


混合精度能比單精度獲得更好的效能,特別是在 PyTorch 框架下,從中我們可以看出明顯的區別。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.2:GNMT 任務混合精度和 f32 精度之間的 GPU 利用率對比。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.3:GNMT 任務的混合精度和 f32 精度之間的 GPU 記憶體利用時對比。


TensorFlow 框架下,混合精度的 GPU 利用率和記憶體利用時較低,但速度更快。對於 PyTorch 來說,雖然 GPU 利用率和記憶體利用時更高,但相應的效能也顯著提高。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.4:GNMT 任務混合精度和 f32 精度的 CPU 利用率對比。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.5:GNMT 任務混合精度和 f32 精度的記憶體利用率對比。


TensorFlow 和 PyTorch 在本實驗的 CPU 上具有較小的差異,但混合精度略高。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測表 6.2.2:NCF 任務混合精度訓練與單精度訓練的比較。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.6:NCF 任務混合精度與單精度訓練速度比較(步/秒)。


與 GNMT 任務的效能相似,NCF 任務的訓練速度在混合精度下得到提高。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.7:NCF 任務混合精度與單精度訓練速度對比。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.8:NCF 任務混合精度與單精度 GPU 記憶體使用時對比。


在混合精度下,NCF 訓練消耗的 GPU 利用和記憶體利用時更高。

2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 6.2.9:NCF 任務混合精度與單精度 GPU 記憶體利用時對比。


2萬元「煤氣灶」Titan RTX做深度學習?機器之心為讀者們做了個評測圖 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

相關文章