NVIDIA GPU A100 Ampere(安培)架構深度解析
文章目錄
- NVIDIA GPU A100 Ampere(安培)架構深度解析
- 1. NVIDIA A100 Highlights
- 1.1 NVIDIA A100對比Volta有20x性能的性能提升。
- 1.2 NVIDIA A100的5個新特性
- 1.3 AI加速:使用BERT-LARGE進行訓練、推理
- 1.4 A100 HPC 加速
- 1.5 GA100 架構圖
- 1.6 GA100 SM架構
- 1.7. A100芯片特性總結
- 2. Elastic GPU
- 2.1 A100 NVLINK BANDWIDTH
- 2.2 NVLink和NVSwitch實現技術和工作原理
- 2.3 DGX A100
- 2.4 SCALE-OUT: MIG (MULTI-INSTANCE GPU)
- 3. Tensor Core
- 4. 性能優化 key features
- 5.參考資料
1. NVIDIA A100 Highlights
NVIDIA A100 SPECS TABLE
1.1 NVIDIA A100對比Volta有20x性能的性能提升。
1.2 NVIDIA A100的5個新特性
- World’s Largest 7nm chip 54B XTORS, HBM2
- 3rd Gen Tensor Cores Faster, Flexible, Easier to use 20x AI Perf with TF32
- New Sparsity Acceleration Harness Sparsity in AI Models 2x AI Performance
- New Multi-Instance GPU Optimal utilization with right sized GPU 7x Simultaneous Instances per GPU
- 3rd Gen NVLINK and NVSWITCH Efficient Scaling to Enable Super GPU 2X More Bandwidth
1.3 AI加速:使用BERT-LARGE進行訓練、推理
1.4 A100 HPC 加速
與NVIDIA Tesla V100相比,A100 GPU HPC應用程序加速 。
HPC apps detail:
- AMBER based on PME-Cellulose,
- GROMACS with STMV (h-bond),
- LAMMPS with Atomic Fluid LJ-2.5,
- NAMD with v3.0a1 STMV_NVE
- Chroma with szscl21_24_128,
- FUN3D with dpw,
- RTM with Isotropic Radius 4 1024^3,
- SPECFEM3D with Cartesian four material model
- BerkeleyGW based on Chi Sum
1.5 GA100 架構圖
NVIDIA GA100由多個GPU處理羣集(GPC),紋理處理羣集(TPC),流式多處理器(SM)和HBM2內存控制器組成。
A100 GPU的構架名稱爲GA100,一個完整GA100架構實現包括以下單元:
- 8 GPCs, 8 TPCs/GPC, 2 SMs/TPC, 16 SMs/GPC, 128 SMs per full GPU
- 64 FP32 CUDA Cores/SM, 8192 FP32 CUDA Cores per full GPU
- 4 third-generation Tensor Cores/SM, 512 third-generation Tensor Cores per full GPU
- 6 HBM2 stacks, 12 512-bit memory controllers
基於GA100架構的A100 GPU包括以下單元:
- 7 GPCs, 7 or 8 TPCs/GPC, 2 SMs/TPC, up to 16 SMs/GPC, 108 SMs
- 64 FP32 CUDA Cores/SM, 6912 FP32 CUDA Cores per GPU
- 4 third-generation Tensor Cores/SM, 432 third-generation Tensor Cores per GPU
- 5 HBM2 stacks, 10 512-bit memory controllers
A100 GPU具體設計細節如下:
- GA100架構一共擁有6個HBM2的內存,每個HBM2內存對應兩個內存控制器模塊。但A100實際設計的時候內存爲40GB,只有5個HBM2模塊,對應10個內存控制器。
- 與V100相比,A100內部擁有兩個L2 Cache,因此能提供V100 2倍多的L2 Cache帶寬。
- GA100擁有8個GPC,每個GPC中擁有8個TPC(GPC:圖形處理集羣、TPC:紋理處理集羣),每一個TPC包含2個SM,因此一個完整的GA100芯片應該包含 8*8*2=128個SM。但現在發佈的A100 Spec中只包含108個SM,因此目前的A100並不是一個完整的Full GA100構架芯片。
1.6 GA100 SM架構
新的A100 SM大大提高了性能,建立在Volta和Turing SM體系結構中引入的功能的基礎上,並增加了許多新功能和增強功能。
A100 SM架構如下圖所示。Volta和Turing每個SM具有八個Tensor Core,每個Tensor Core每個時鐘執行64個FP16 / FP32混合精度融合乘加(FMA)操作。
A100 SM包括新的第三代Tensor內核,每個Tensor Core每個時鐘執行256個FP16 / FP32 FMA操作。A100每個SM有四個Tensor Core,每個時鐘總共可提供1024個密集的FP16 / FP32 FMA操作,與Volta和Turing相比,每個SM的計算能力提高了2倍。
下圖顯示了新的A100(GA100)SM架構。
1.7. A100芯片特性總結
- 第三代Tensor Cores的特性:
- BF16和TF32的混合精度計算
- Double precision FP64 DFMA
- 結構化稀疏
- 1.555GB/s的HBM2 memory bandwidth, 與Tesla V100相比增加了73%。
- 192 KB的共享內存和L1數據緩存組合,比V100 SM大1.5倍。
- shared memory and L2 cache都進行了增大, 40 MB的L2 Cache比V100大7倍。 藉助新的partitioned crossbar結構(2個L2 Cache),A100 L2緩存提供了V100的L2緩存讀取帶寬的2.3倍。
- 新的異步複製指令將數據直接從全局存儲器加載到共享存儲器中,可以繞過L1高速緩存,並且不需要使用中間寄存器文件(RF)。
- Hardware JPEG decoder
- 多實例GPU (MIG)
- 第三代NVLINK and NVSWITCH
2. Elastic GPU
- Scale-up: 縱向擴展,解決更大的問題。3rd Gen NVLINK, NVSWITCH, DGX A100, DGX POD/SUPERPOD
- Scale-out: 橫向擴展,解決更多的問題。MIG (Multi-instance GPU)
註釋:
Scale Up是指垂直方向上的擴展。一般對單一設備節點而言,Scale Up是當某個計算節點(機器)添加更多的CPU,GPU設備,存儲設備,使用更大的內存時,應用可以很充分的利用這些資源來提升自己的效率從而達到很好的擴展性。
Scale Out是指水平方向上的擴展。一般對分佈式設備節點(數據中心)而言,Scale out指的是當添加更多的機器時,應用仍然可以很好的利用這些機器的資源來提升自己的效率從而達到很好的擴展性。
2.1 A100 NVLINK BANDWIDTH
A100 NVLINK有12個Link口,每個Link有4個signal pairs,每個signal pairs的帶寬爲50Gbit/s,因此每個Link的單路帶寬爲50GBit/s * 4 / 8 = 25GByte/s。Link中有in/out雙路,因此一個Link的總帶寬爲50GB/s。
2.2 NVLink和NVSwitch實現技術和工作原理
下圖展示了CPU和GPU內部數據流和控制流是如何傳輸的。
GPU通過PCIe總線與CPU相連,白色走線表示控制流,CPU通過PCIe I/O口控制data和kernel work執行,然後GPC通過XBAR訪問L2 Cache或者HBM2內存數據,最後輸出的result也是通過XBAR和PCIe傳回CPU。
當一個GPU想要通過PCIe的方式訪問另一個GPU的HBM時,其控制流和數據流如下圖所示。
數據流從GPU1 HBM -> GPU1 XBAR -> GPU1 PCIe -> GPU0 PCIe -> GPU0 XBAR -> GPU0 GPC。通常當數據量很大時,PCIe帶寬會出現堵塞。
使用NVLink做同樣的事,訪問其他GPU HBM數據時,如下圖所示:
數據流從 GPU1 HBM -> GPU1 XBAR -> GPU1 NVLink端口 -> GPU0 NVLink端口 -> GPU0 XBAR -> GPU0 GPC。
不用通過PCIe鏈路,也不會出現擁塞的情況。實際上兩個GPU的NVLink之間由NVSwitch相連,圖中沒有畫出。
從上面可以看出,NVLink和NVSwitch的工作原理就是把兩個GPU的XBAR連接在一起了。因此,NVIDIA經常說的將多個GPU通過NVLink和NVSwitch能組成一個巨大的GPU,這並不是一個比喻,實際上底層的確是這樣實現的。
2.3 DGX A100
DGX A100的拓撲結構如下圖所示:
DGX A100的拓 A100有8個A100 GPU,每個A100 GPU擁有12個NVLink端口,每個GPU拿出2個Link端口與一個NVSwitch連接,一共連接了6個NVSwitch。
-
下層:DGX A100有8個A100 GPU,每個A100 GPU擁有12個NVLink端口,每個GPU拿出2個Link端口與一個NVSwitch連接,一共連接了6個NVSwitch。
-
上層:通過PEX Switch鏈接了200G的NIC和NVMe。
2.4 SCALE-OUT: MIG (MULTI-INSTANCE GPU)
傳統GPU的內部架構:
MIG的目的是使虛擬的每個GPU實例都擁有上面類似的架構。 MIG功能可以將單個GPU劃分爲多個GPU分區,稱爲GPU實例。
創建GPU實例可以認爲是將一個大GPU拆分爲多個較小的GPU,每個GPU實例都具有專用的計算和內存資源。每個GPU實例的行爲就像一個較小的,功能齊全的獨立GPU,其中包括預定義數量的GPC,SM,L2緩存片,內存控制器和Frame buffer。注意:在MIG操作模式下,每個GPU實例中的單個GPC啓用了7個TPC(14個SM),這使所有GPU切片具有相同的一致計算性能。
“Compute Instances ”是一個組,可以配置在GPU實例內創建的不同級別的計算能力,封裝可以在GPU實例中執行的所有計算資源(如:GPC,Copy Engine,NVDEC等)。默認情況下,將在每個GPU實例下創建一個 Compute Instances,從而公開GPU實例中可用的所有GPU計算資源。可以將GPU實例細分爲多個較小的 Compute Instances,以進一步拆分其計算資源。
下面是 pre-A100 GPU和A100 MIG的對比。
pre-A100 GPU每個用戶獨佔SM、Frame Buffer、L2 Cache。
A100 MIG將GPU進行物理切割,每個虛擬GPU instance具有獨立的SM、L2 Cache、DRAM。
下面是MIG 配置多個獨立的GPU Compute workloads。每個GPC分配固定的CE和DEC。A100中有5個decoder。
當1個GPU instance中包含2個Compute instance時,2個Compute instance共享CE、DEC和L2、Frame Buffer。
Compute instance使多個上下文可以在GPU實例上同時運行。
3. Tensor Core
3.1 TF32 & BF6 DETAILS
如今,用於AI訓練的默認數學是FP32,沒有張量核心加速。NVIDIA Ampere架構引入了對TF32的新支持,使AI培訓默認情況下可以使用張量內核,而無需用戶方面的努力。非張量操作繼續使用FP32數據路徑,而TF32張量內核讀取FP32數據並使用與FP32相同的範圍,但內部精度降低,然後生成標準IEEE FP32輸出。TF32包含一個8位指數(與FP32相同),10位尾數(與FP16相同的精度)和1個符號位。
4. 性能優化 key features
4.1 結構稀疏性
藉助A100 GPU,NVIDIA引入了細粒度的結構稀疏性,這是一種新穎的方法,可將深度神經網絡的計算吞吐量提高一倍。
Tensor Core的細粒度結構化稀疏度
- 50%細粒度的稀疏度
- 2:4模式:每個連續的4塊中必須有2個值必須爲0
應對3個挑戰:
-
準確性:保持原始未修剪網絡的準確性
-
中等稀疏級別(50%),細粒度
-
Training:顯示可在任務和網絡上工作的配方
Speedup:
- 專業的Tensor Core支持稀疏數學
- 結構化:有助於有效利用內存
NVIDIA開發了一種簡單而通用的配方,用於使用這種2:4結構化的稀疏模式來稀疏深度神經網絡進行推理 。首先使用密集權重對網絡進行訓練,然後應用細粒度的結構化修剪,最後使用其他訓練步驟對剩餘的非零權重進行微調。基於跨視覺,對象檢測,分割,自然語言建模和翻譯的數十個網絡的評估,該方法幾乎不會導致推理準確性的損失。
A100 Tensor Core GPU包括新的Sparse Tensor Core指令,該指令會跳過具有零值的條目的計算,從而使Tensor Core計算吞吐量翻倍。圖9顯示了Tensor Core如何使用壓縮元數據(非零索引)將壓縮權重與適當選擇的激活進行匹配,以輸入到Tensor Core點積計算中。
結構化稀疏帶來的性能提升如下圖所示:
使用結構化稀疏來訓練神經網絡需要經過三個步驟:
4.2 計算數據壓縮
因爲模型中有ReLU層的存在,模型數據中包含大量的稀疏矩陣或0值。壓縮這些稀疏矩陣可以節省內存空間和帶寬。
通過Allocating compressible memory——用cuMemMap + cuMemCreate(驅動程序API)替換cudaMalloc,並使用CU_MEM_ALLOCATION_COMP_GENERIC。
對於一個memory bound問題,可以考慮使用數據壓縮功能,性能可提升75%。
下面是使用nsight,可以看到是否使用了數據壓縮的功能。
4.3 L2 Cache駐留控制
L2 Cache是介於Global Memory和SMs之間的緩存,如果kernel訪問Global Memory數據都能被L2 Cache命中,那麼程序的整體性能會有很大提升。
L2 Cache擁有40MB大小,拿出L2緩存的一部分作爲持久數據訪問,最大可以分配30MB的持久L2 Cache。持久訪問在L2緩存中的駐留優先級高於其他數據訪問。
可以使用accessPolicyWindow將全局內存區域與L2 Cache的持久區域進行映射。映射的目的是這部分的global memory中的數據可以儘可能的被保存在L2 持久Cache中。因此在流或CUDA圖中啓動的內核在global memory標記的數據區域上具有持久性屬性。
使用完L2 持久Cache後,可以用一下方法釋放掉。
4.4 從global Memory到share memory的異步拷貝
下面是傳統的將數據從global Memory拷貝到share memory的過程。
複製過程如下,其缺點是:
- 浪費寄存器以及佔用寄存器帶寬
- 必須等到數據load才能繼續操作
- 浪費L1/SHM帶寬
現在直接繞過L1或者寄存器,直接走L1或者L2 cache進行拷貝到SHM。
這樣,前後對比的代碼如下:這樣可以直接將數據從global Memory拷貝到share memory 。
下圖是兩種拷貝的性能對比,這種異步拷貝性能遠遠大於同步拷貝。
對於多階段的pipeline拷貝和計算,可以overlap掉memory copy的時間。
其目的是pipeline一邊拷貝着數據,一邊處理着上一波拷貝好的數據。
多階段的異步拷貝pipeline的代碼如下,其核心是一邊拷貝,一邊計算拷貝好的數據,以達到overlap掉拷貝數據時間的目的。
5.參考資料
- https://www.nvidia.com/content/dam/en-zz/Solutions/Data-Center/nvidia-ampere-architecture-whitepaper.pdf
- https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/
- https://apposcmf8kb5033.h5.xiaoeknow.com/content_page/eyJ0eXBlIjoxMiwicmVzb3VyY2VfdHlwZSI6NCwicmVzb3VyY2VfaWQiOiJsXzVlYzNkOTM1OTQwOGJfWExTeWUyYXMiLCJwcm9kdWN0X2lkIjoiIiwiYXBwX2lkIjoiYXBwb1NDTWY4a2I1MDMzIiwiZXh0cmFfZGF0YSI6MH0