• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 人工智能/深度學習

    NVIDIA A100 GPU 上的加速 TensorFlow

    ?
    TensorFlow logo

    基于 NVIDIA Ampere GPU 架構 NVIDIA A100 提供了一系列令人興奮的新功能:第三代張量核心、多實例 GPU ( MIG )和第三代 NVLink 。

    安培張量核心引入了一種新的用于人工智能訓練的數學模式:張量浮點 -32 ( TF32 )。 TF32 旨在加速 FP32 數據類型的處理, FP32 數據類型通常用于 DL 工作負載。在 NVIDIA A100 張量核心上,以 TF32 格式運行的數學運算的吞吐量比上一代 Volta V100 GPU 上運行的 FP32 高出 10 倍,從而使 DL 工作負載的性能提高了 5 . 7 倍。

    每個月, NVIDIA 都會在 NVIDIA NGC 上發布 DL 框架的容器,這些容器都針對 NVIDIA GPUs : TensorFlow 1 、 TensorFlow 2 、 PyTorch 和“ NVIDIA 優化的深度學習框架,由 Apache MXNet 提供支持”。從 20 . 06 版開始,我們在所有深度學習框架容器中增加了對新的 NVIDIA A100 特性、新的 CUDA 11 和 cuDNN 8 庫的支持。

    在這篇文章中,我們將重點介紹基于 TensorFlow 1 . 15 的容器和支持 TensorFlow GPUs 的 pip 輪子,包括 A100 。我們繼續每月發布 NVIDIA TensorFlow 1 . 15 ,以支持仍在使用 NVIDIA 1 . x 的大量 NVIDIA 客戶。

    20 . 06 版本中的 NVIDIA TensorFlow 1 . 15 . 2 基于上游 TensorFlow 版本 1 . 15 . 2 。通過這個版本,我們在 NVIDIA Ampere 架構 GPUs 上提供了對 TF32 的現成支持,同時也增強了對上一代 GPUs 的支持,例如 Volta 和 Turing 。此版本允許您在 NVIDIA Ampere architecture GPUs 上實現 TF32 的速度優勢,而不會對 DL 工作負載進行代碼更改。此版本還包括對自動混合精度( AMP )、 XLA 和 TensorFlow – TensorRT 集成的重要更新。

    NVIDIA A100 支持的數值精度

    深度神經網絡( DNNs )通常可以采用混合精度策略進行訓練,主要采用 FP16 ,但必要時也可以采用 FP32 精度。這種策略可以顯著減少計算、內存和內存帶寬需求,同時通常收斂到類似的最終精度。有關更多信息,請參閱 NVIDIA Research 的 混合精度訓練 白皮書。

    NVIDIA 張量核是 NVIDIA Volta 和新一代 GPUs 上的專用算術單元。它們可以在一個時鐘周期內執行一個完整的矩陣乘法和累加運算( MMA )。在 Volta 和 Turing 上,輸入是兩個尺寸為 4 × 4 的 FP16 格式矩陣,而累加器為 FP32 。

    Ampere 上的第三代張量核支持一種新的數學模式: TF32 。 TF32 是一種混合格式,用于以更高的效率處理 FP32 的工作。具體來說,由于使用了 8 位指數, TF32 使用了與 FP16 相同的 10 位尾數,以確保精度,同時與 FP32 具有相同的范圍。

    當使用 TF32 時,更廣泛的可表示范圍匹配 FP32 消除了損耗縮放操作的需要,從而簡化了混合精度訓練工作流程。圖 1 顯示了各種數字格式之間的比較。

    Numerical formats supported by Ampere GPUs include FP32, TF32, FP16, and BF16.
    圖 1 。 Ampere GPUs 支持的數字格式。

    在安培張量核心上, TF32 是 DL 工作負載的默認數學模式,與 Volta / Turing GPUs 上的 FP32 相反。在內部,當在 TF32 模式下工作時,安培張量核心接受兩個 FP32 矩陣作為輸入,但在內部以 TF32 格式執行矩陣乘法。結果累加在 FP32 矩陣中。

    在 FP16 / BF16 模式下工作時,安培張量核接受 FP16 / BF16 矩陣,并累加到 FP32 矩陣中。與 TF32 相比, FP16 / BF16 安培模式提供了 2 倍的吞吐量。圖 2 顯示了這些操作模式。

    FP16/BF16 mode on Ampere provides 2x the throughput compared to TF32.
    圖 2 。安培張量磁芯的兩種工作模式: TF32 和 FP16 .

    TF32 旨在將 NVIDIA 張量核心技術的處理能力帶到所有 DL 工作負載中,而無需任何必需的代碼更改。對于希望獲得最高吞吐量的更精明的開發人員來說,使用 FP16 進行 AMP 培訓仍然是最具性能的選項,而且可以輕松啟用,而無需更改代碼(使用 NVIDIA NGC TensorFlow 容器時)或只需一行額外的代碼。

    我們在廣泛的網絡體系結構上進行的大量實驗表明,任何能夠成功地訓練成與 FP16 / BF16 上的 AMP 融合的網絡也可以訓練成與 TF32 融合。在這種情況下,最終 TF32 訓練的模型精度與使用 FP32 訓練的模型精度相當。

    TensorFlow 1 . 15 . 2 的增強功能

    TensorFlow 1 . 15 . 2 提供了以下增強:

    • TF32 支持
    • AMP
    • XLA
    • TensorFlow – TensorRT 集成

    TF32 支持

    NVIDIA TensorFlow 20 . 06 版本的 1 . 15 . 2 使用現成的安培 TF32 功能來加速所有 DL 訓練工作負載。這是默認選項,不需要開發人員更改代碼。在 pre-Ampere GPU 架構中, FP32 仍然是默認精度。

    您還可以通過設置環境變量將默認數學模式更改為安培 GPUs 上的 FP32 :

    export NVIDIA_TF32_OVERRIDE=0

    不建議使用此選項。主要用于調試目的。

    自動混合精度訓練

    帶 FP16 的 AMP 培訓仍然是 DL 培訓中最具性能的選項。對于 TensorFlow , AMP 培訓是在 TensorFlow 1 . 14 之后集成的,允許從業者輕松地進行混合精度訓練,無論是編程還是通過設置環境變量。

    使用單個 API 調用包裝優化器:

    opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)

    這個改變將自動損耗比例應用到您的模型中,并使自動鑄造達到半精度,如 CNN 混合精度訓練 示例所示。

    使用以下命令啟用 NVIDIA NGC TensorFlow 1 個集裝箱 中的環境變量:

    export TF_ENABLE_AUTO_MIXED_PRECISION=1

    這會自動對所有 TensorFlow 工作負載應用混合精度訓練。有關執行手動混合精度訓練的詳細信息,請參閱 張量核心數學

    XLA

    XLA 是 TensorFlow 的 DL 圖形編譯器。在 native TensorFlow 中,網絡的每一層都是獨立處理的。相比之下, XLA 可以將網絡的一部分聚類成可以優化和編譯的“子圖”。這會以一些編譯開銷為代價提供性能優勢。圖 3 顯示了 XLA 的工作流。

    The TensorFlow graph is clustered, then compiled and optimized with XLA.
    圖 3 。 XLA 工作流。

    在 GPU 上執行時, XLA 會執行如下優化:

    • 核聚變: 具有消費者/生產者關系的帶寬受限內核被垂直和水平地融合到單個 CUDA 內核中。這通過減少對全局內存的訪問來提高性能,并提供了觀察到的大部分性能好處。
    • 對優化庫內核的調用: XLA- GPU 針對經過高度優化和性能優化的 cuDNN / cuBLAS 內核,并將多個運算符組合到一個優化的 cuDNN / cuBLAS 內核中。

    有關 XLA : GPU 的更多信息,請參閱深度學習框架文檔中的 XLA 最佳實踐

    TensorFlow – TensorRT 集成

    NVIDIA TensorRT 是一個用于高性能 DL 推理的 SDK 。它包括 DL 推理優化器和運行時,為 DL 推理應用程序提供低延遲和高吞吐量。

    TensorRT 與 TensorFlow 1 緊密結合。我們稱之為 TensorFlow – TensorRT 集成( TF-TRT ) 。在 TF 版本 1 . 15 中,它是 TensorFlow 的一部分。 python .編譯器包裹。通過一個簡單的 API 調用,一個經過訓練的神經網絡可以很容易地轉換為 TF-TRT 模型,如下面的代碼塊所示。

    from tensorflow.python.compiler.tensorrt import trt_convert as trt
    converter = trt.TrtGraphConverter(
    input_saved_model_dir=input_saved_model_dir,
    precision_mode=trt.TrtPrecisionMode.
    )
    converter.convert()
    converter.save(output_saved_model_dir)

    TF-TRT 可以將模型轉換為不同的精度: FP32 、 FP16 和 INT8 。在 INT8 的情況下,一個小的校準數據集需要通過網絡來確定最佳量化參數。當您將一個模型從 FP32 轉換為 INT8 時, TF-TRT 在圖靈生成 T4 GPU 上提供了高達 11 倍的推理加速。有關 TF-TRT 的更多信息,請參見 GTC 2020 : TensorRT 用 TensorFlow 2 . 0 推斷

    當您將模型轉換為安培上的 FP32 時, TF-TRT 采用的內部數學模式是 TF32 ,不需要任何代碼干預。

    TensorFlow 1 . 15 . 2 入門

    NVIDIA TensorFlow 1.15.2 從 20.06 版開始提供,可以作為 NGC Docker 映像或通過 pip wheel 包提供

    拉出 NGC Docker 映像

    NVIDIA TensorFlow 版本可以通過拖動 NGC Docker 容器映像輕松訪問。使用以下命令:

    docker pull nvcr.io/nvidia/tensorflow:20.06-tf1-py3

    此 Docker 容器映像包含所有必需的 TensorFlow – GPU 依賴項,例如 CUDA 、 cuDNN 和 TensorRT 。它還包括用于多節點訓練的 NCCLHorovod 庫,以及用于加速數據預處理和加載的 NVIDIA DALI

    安裝 pip 車輪組件

    NVIDIA TensorFlow 1 . 15 . 2 從 20 . 06 版本開始也可以通過一個車輪組件安裝。當你使用這種安裝方法時, NVIDIA TensorFlow 只需要 Ubuntu 的裸機環境,比如 Ubuntu18 . 04 ,或者一個最小的 Docker 容器,比如 ubuntu : 18 . 04 。此外, NVIDIA 圖形驅動程序也必須可用,您應該能夠調用 nvidia-smi 來檢查 GPU 的狀態。 20 . 06 版本中 NVIDIA TensorFlow 1 . 15 . 2 所需的所有其他依賴項都由車輪組件安裝。

    要安裝的基本軟件

    無論您是在裸金屬上還是在容器中,您可能需要執行以下操作:

    apt update
    apt install -y python3-dev python3-pip git
    pip3 install --upgrade pip setuptools requests

    虛擬環境

    有些人使用虛擬環境來隔離 pip 包與沖突,概念上,它類似于 Docker 映像,但本質上是一個帶有目標搜索路徑的獨立安裝目錄。

    要設置虛擬環境:

    pip install -U virtualenv
    virtualenv --system-site-packages -p python3 /venv

    要啟動虛擬環境:

    source /venv/bin/activate

    安裝 TensorFlow 車輪的索引

    需要安裝此索引,以便 pip 知道可以訪問 NVIDIA 網站獲取車輪。否則, pip 默認為 PyPI . org 網站. 使用以下命令:

    pip install nvidia-pyindex

    安裝 TensorFlow 車輪

    使用本軟件即表示您同意遵守軟件附帶的許可協議的條款。如果您不同意許可協議的條款,請不要使用本軟件。

    使用以下命令:

    pip install nvidia-tensorflow[horovod]

    驗證是否安裝了軟件包:

    pip list | grep nvidia

    輸出如下:

    nvidia-cublas 11.1.0.213
    nvidia-cuda-cupti 11.0.167
    nvidia-cuda-nvcc 11.0.167
    nvidia-cuda-nvrtc 11.0.167
    nvidia-cuda-runtime 11.0.167
    nvidia-cudnn 8.0.1.13
    nvidia-cufft 10.1.3.191
    nvidia-curand 10.2.0.191
    nvidia-cusolver 10.4.0.191
    nvidia-cusparse 11.0.0.191
    nvidia-dali 0.22.0
    nvidia-dali-tf-plugin 0.22.0
    nvidia-horovod 0.19.1
    nvidia-nccl 2.7.5
    nvidia-pyindex 1.0.0
    nvidia-tensorflow 1.15.2+nv20.6
    nvidia-tensorrt 7.1.2.8

    驗證 TensorFlow 加載:

    python -c 'import tensorflow as tf; print(tf.__version__)'

    輸出應為:

    1.15.2

    驗證 TensorFlow 是否看到 GPU :

    python -c "import tensorflow as tf; print('Num GPUs Available: ', len(tf.config.experimental.list_physical_devices('GPU')))"

    輸出應如下所示:

    2020-05-16 22:03:35.428277: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1639] Found device 0 with properties:
    name: Tesla V100-SXM2-16GB major: 7 minor: 0 memoryClockRate(GHz): 1.53

    績效基準

    在這一節中,我們將討論 TF32 在 NVIDIA A100 上的準確性和性能,并與 FP32 和 AMP 混合精度訓練進行比較,在 NVIDIA TensorFlow 1 . 15 . 2 NGC 容器中運行。

    TF32 精度

    對于使用 FP16 或 BF16 混合精度成功訓練的任何網絡, TF32 匹配 FP32 結果。我們已經嘗試了大量的網絡體系結構,但是還沒有看到例外。

    圖 4-6 顯示了使用 TF32 、 FP32 和 AMP 進行訓練時 ResNet50 、 SSD 和 Transformer XL 的訓練損耗曲線。 TF32 在穩定性和最終精度方面產生了可比的訓練曲線。這些結果可以使用 NVIDIA 深度學習示例 上的模型腳本重現。

    TF32 achieves a similar loss curve compared to FP32 and AMP training.
    圖 4 。使用 TF32 、 FP32 和 AMP 的 ResNet50 訓練損失曲線。
    TF32 achieves a similar loss curve compared to FP32 and AMP training.
    圖 5 。帶 TF32 、 FP32 和 AMP 的 SSD 訓練損耗曲線。
    TF32 achieves a similar loss curve compared to FP32 and AMP training.
    圖 6 。變壓器 XL 培訓損耗曲線 TF32 , FP32 ,和安培。

    性能: TF32 on NVIDIA A100

    圖 7 顯示了在 A100 上使用 TF32 進行培訓時觀察到的加速情況,而 V100 上的 FP32 則是在各種網絡架構上進行的。我們觀察到,典型的吞吐量加速高達 6X ,同時收斂到相同的最終精度。

    Chart
    圖 7 。 TF32 在 NVIDIA 8xA100 上的性能與 FP32 在 8xV100 GPU 上的性能比較。條形圖表示 TF32 相對于 FP32 的加速系數。越高越好。

    性能: FP16 on NVIDIA A100

    帶 FP16 的 AMP 仍然是 A100 上 DL 培訓的最具性能的選項。圖 8 顯示,對于各種型號, A100 上的 AMP 提供了比 V100 上的 AMP 高 4 . 5 倍的吞吐量加速,同時收斂到相同的最終精度。

    圖 8 。 NVIDIA 8X100 與 8xV100 GPU 上混合精度培訓的性能。條形圖表示 V100 以上 A100 的加速系數。越高越好。

    行動號召

    NVIDIA A100 GPU 具有先進的功能,為所有 DL 培訓工作負載提供了健康的加速。

    您可以嘗試使用 NVIDIA 深度學習示例 從 20 . 06 開始的 NVIDIA TensorFlow 1 . 15 . 2 ,體驗一下 TF32 、 XLA 和 TensorFlow – TensorRT 集成在安培發生器 NVIDIA A100 GPU 上的好處。 NVIDIA TensorFlow 可從 T ensorFlow NGC 容器 版本 20 . 06 獲得,并在 https://github.com/NVIDIA/tensorflow 上作為開放源代碼發布。

    ?

    0

    標簽

    人人超碰97caoporen国产