天天看點

圖形處理單元(GPU)的演進

CPU 和 GPU

好久沒有更新了,最近在閱讀 CUDA 相關的一些論文,因為都是碎片化閱讀,容易導緻讀過後,可能過一段時間又忘記掉,是以決定抽時間翻譯翻譯閱讀的論文,一方面增強自己記憶,一方面與大家共享。期待大家給我推薦好的論文。今天開篇就從 GPU 的演進曆史開始,當然 GPU 的演進曆史,主要角色當然是 NVIDIA,是以本文也是以 NVIDIA 為主進行介紹的。話不多說,直接上正文,有翻譯不當的位置,望各位不吝賜教。文章原文在文末。

圖形處理單元 GPU 的演進

早期 GPU 是一種圖形處理裝置,但是如今它已經作為一種通用裝置服務于多個領域,在超算領域,它賦能當今最快的超級計算機,在人工智能領域它作為深度學習的主要平台,為自動駕駛、機器人以及智能攝像頭等諸多裝置提供智能。與此同時,它依然能夠以實時的幀率生成令人信服的逼真的高品質圖檔。GPU 的演進主要是通過增加新特性支援新的應用場景。NVIDIA 的 GeForce 256 是一款用于實時圖形處理的專用處理器。圖形實時處理應用需要高記憶體帶寬和大量的浮點計算能力用于頂點(vertex)和片元(fragment)的着色計算(shading computations)。随着實時圖形處理技術的進步,GPU 擁有了可程式設計性。可程式設計性與浮點計算能力的結合,使得 GPU 對于科學計算擁有了巨大的吸引力。早期,科學家通過把科學計算映射為頂點和片元着色器(shader)來使用 GPU 的計算能力。這一階段,GPU 通過不斷的降低硬體程式設計的複雜度,同時提供雙精度浮點計算等通用能力來滿足科學計算領域的需求。

GPU 的高性能浮點計算能力和易用的可程式設計特性使之成為了 AI 研究者訓練視覺、語音識别、自然語言處理以及推薦系統等領域深度神經網絡的理想平台,直接推動了目前深度學習技術的革命。GPU 通過添加深度學習相關的資料類型支援以及相關指令來進一步滿足深度學習應用的需求。如今 GPU 已經成為深度學習訓練和推理的主要平台。

01

   早期的 3D 圖形處理硬體

圖形渲染對于計算能力有很強的需求,是以需要使用專用硬體來完成生成圖像所需的計算。1986 年 Evans and Sutherland Computer Corporation 成立,緻力于研發專用的 3D 圖形處理硬體。他們使用當時的一種小規模內建技術(small-scale inegration technology),這種昂貴的 multirack 系統 (multirack systems)主要用于飛行模拟器這樣的應用場景。

易于程式設計的高性能浮點計算 GPU 的出現,使目前深度學習革命成為可能。

按照摩爾定律(Moore's law)發展的大規模內建電路技術大幅度降低了建構圖形系統的成本,并使其向兩個方向發展。一種是昂貴的複雜的 3D 圖形技術,一種則是低成本的 2D 圖形技術。20 世紀 80 年代末,Silicon Graphics 公司建立了新一代 3D 圖形系統和高端專業工作站。與此同時,低成本的 2D 圖形技術在大量的市場産品中得到應用,例如 PC 以及視訊遊戲終端等。早期的終端是 sprite-base 的,将虛拟矩形複制到螢幕上顯示背景、場景及角色。最早的 PC 顯示卡(graphics cards)是簡單的 2D 加速器和顯示控制器。它們主要負責将像素值從 PC 系統記憶體拷貝到幀緩沖區,最終複制到 CRT 螢幕上,同時産生位址和同步信号并進行 D/A 轉換。2D 圖形加速器逐漸發展成能夠支援文本和視窗加速的硬體,支援圖像 (texture) 的拷貝、伸縮、融合等功能。

3D 遊戲終端如 3DO、Sega Saturn 以及 Sony Playstation 的出現引領了 3D 遊戲的大衆市場。在 PC 上支援 3D 圖形用于遊戲的願景激發了整個 2.5D 和 3D 圖形加速器領域的發展,這樣一個極其誘人的機會,導緻先後有 60 多家公司成立以參與這一市場。1993 年由 Jensen Huang、Chris Malachowsky 和 Curtis Priem成立的 NVIDIA 公司緻力于将先進的 3D 圖形技術應用于 PC 平台,同時參與遊戲終端的競争。3D PC 圖形技術的靈感來源于專業的 3D 工作站中的複雜而昂貴的圖形管線 (graphics pipelines), 類似 Silicon graphics 公司研發的那些。NVIDIA 的創辦者認為,随着摩爾定律的發展,大面積的高複雜度的晶片會逐漸變的內建度更高,更便宜,進而使基于 PC 的 3D 遊戲成為可能。第一代 3D PC 顯示卡能夠執行光栅化(rasterization)的片元(或者像素)計算、顔色插值、紋理映射、 z-buffering (hidden surface removal)以及着色等功能。給定二維螢幕中三角形頂點的坐标和參數,顯示卡将生成三角形中每個像素的深度和顔色,并将這些像素合成到幀緩沖區中(frame buffer)。頂點的計算包括将頂點從世界空間轉換到螢幕空間,在視窗中修正三角形以及計算每個頂點的光照并儲存到CPU中。NVIDIA 的第一個成功的這種類型的産品叫做 RIVA-128(NV3), 是在 1997 年釋出的。3D 加速器的發展包括在更複雜的光照和陰影場景下同時混合多種紋理的能力。NVIDIA 的 RIVA-TNT 和 TNT2(NV4 和 NV5) 具備這些功能,同時具有并行處理 pipeline 上的多個位置的多個像素的能力,包括光栅化、着色等。

02

    GeForce 256: 第一款 GPU

1999 年推出的 GeForce 256 是第一款将頂點變換和光照以及片元計算內建到一塊晶片上的晶片。這一完全內建的圖形引擎被稱作 "graphics processing unit" or GPU。它承擔了原來由 CPU 執行的頂點計算,這樣可以在遊戲中使用更複雜的幾何運算,但是代價是需要更高的浮點計算能力。例如透視變換(perspective transformation)需要一個4x4 的矩陣向量乘和一個透視除法操作(perspective division operation)。在 GeForce 256 中,頂點和像素的計算被組織在硬體管線(hardwired pipeline)中的可配置的固定的硬體單元(fixed-function hardware)上執行。

随着 PC 遊戲越來越複雜,為了實作更加複雜的遊戲效果,對修改頂點和像素的計算需求也與日俱增。從 20 世紀 80 年代開始,可程式設計的“着色器(shaders)”已經被應用在離線圖形軟體中。GeForce 3(NV20) GPU 在 2001 年釋出了一種可程式設計的頂點着色器(vertes shader)特性,2002 年在 GeForce FX 上釋出了可程式設計的片元着色器(fragment shaders)特性。

03

    GPU 計算

由于強大的浮點計算能力和可程式設計特性促使具備可程式設計 shader 特性的 GPU 對于科學計算有着極強的吸引力, 至此,通用 GPU(general-purpose GPU, GPGPU) 程式設計領域出現了。GeForce 6 的單精度浮點峰值計算能力是 108 GFLOPS,同時代的 CPU 僅有 8 GFLOPS。然而,在這樣的 GPU 上程式設計是非常複雜的。資料的輸入和輸出受到嚴格的限制。片元着色器僅僅接受插值頂點屬性的輸入 (interpolated vertex attributes) 和紋理(texture)上得輸入,僅能夠輸出資料到幀緩沖區中。程式員必須把他們的程式轉換成渲染紋理映射(rendering texture mapped)或者混合三角形(blended triangles)來利用 GPU 的 FLOPS。早期的 GPGPU 代碼包含很多難以了解的着色器代碼,這些代碼迫使科學算法以這種形式出現。

為了利用日益增長的 GPU 能力,GPUs 最終采用流處理器程式設計模型(stream processing programming models),這種方式隐藏了着色器程式設計的大部分複雜性。流式程式設計系統強調并行性和生産者-消費者的局部性,最初是為諸如 Imagine 和 Merrimac 等專用流處理器開發的。然而這種程式設計系統卻非常适合 GPU 程式設計。Brook 程式設計語言最初是為 Merrimac 開發的,之後适配到 GPU 上, 叫做 Brook-GPU。Brook 後來被 AMD 作為開發語言适配到自家的 unified shader GPU 上。

流處理器程式設計模型影響了用于計算的 GPU 的設計。從 2003 年開始,在斯坦福上司流處理器項目的 Bill Dally 就開始與在 NVIDIA 工作的 John Nickolls 和 Erik Lindholm 探讨将流處理的思想應用到 GeForce 8 (NV50) GPU。在 2004 年,Brook 的主要開發者 lan Buck 加入 NVIDA 與很多合作者一起開發 CUDA 程式設計語言。

GeForce 8 GPU 或者 G80 引入了流處理器簇(streaming multiprocessors, SMs), 頂點和片元着色器都使用 SMs 來執行。SMs 能夠獨立于圖形管線(graphics pipeline),以線程組的形式執行計算着色器(compute shaders)。SMs 使用 share memory 來促進線程組内的線程之間的資料共享。G80 ”Tesla“ GPU 和 CUDA都是在 2006 年釋出的,他們大大降低了使用 GPU 開發科學應用以及其他通用目的應用的障礙。圖 1 展示了 G80 GPU 的照片,它由 6.81 億個半導體組成,能夠提供 346 GFLOPS 的 FP32 計算吞吐和 86 GB/s 的 DRAM 帶寬。

圖形處理單元(GPU)的演進

然而革命性的硬體和新的程式設計語言并不能依靠自身進行革命。其主要原因在于大量遺留的高性能計算(high-performance computing, HPC)應用,是基于 FORTRAN 語言和單線程式列化程式設計的,而 G80 是一種大規模線程并行處理器,CUDA 語言 是一種線程和資料并行的類 C 程式設計語言。為此,NVIDIA 首席科學家 David Kirk 和 伊利諾伊大學厄巴納-香槟分校 (UIUC) 的電氣與計算機工程教授 Wen-mei HWu 一起為 UIUC 的研究所學生課程設計原型以培養下一代的并行程式設計程式員。這一課程的課堂筆記逐漸演進成為流行的并行程式設計語言教材--Programming Massively Parallel Processors,這本書已經被翻譯成很多種語言并出版,很快講發行它的第四版。

與此同時,NVIDIA 建立基金會以支援在各個高校建立優秀的 CUDA 研究中心,以此來促進 CUDA 教學、推廣 GPU 技術和并行程式設計。Kirk 和 Hwu 也支援了許多“教師教育訓練”活動,包括在西班牙巴塞羅那的 UPC/BSC 舉辦的年度 PUMPS 暑期學校。

來自龐大的且不斷增長的 GPU 計算社群的回報,促使在 2010 年的 Fermi 系列 GPU 中增加了高性能科學計算的特性。這一特性包括支援雙精度浮點計算,相對于 G80 的 0 GFLOPS,Fermi 支援 750 GFLOPS 的雙精度浮點計算吞吐,除此之外還包含,可靠性、可用性和可服務性 (RAS) 等特性,以及主存儲器上的 ECC 和片上存儲器的奇偶校驗保護。

憑借 HPC 特性,高性能和高效率,GPU 很快成為了大型計算機的首選技術。GPU 計算的重要裡程碑是橡樹嶺國家實驗室(Oak Ridge National Labs,ORNL)使用 18688 塊 NVIDIA kepler (K20) 組成 Titan 系統,在 2012 年 11 月在 Linpack 測試中以 17.6 PFLOPS 的性能獲得 Top 500 的第一名。2018 年 6 月 ORNL 延續了這一傳統,使用 27648 塊 NVIDIA 的 Volta(V100) GPU,在 Linpack 測試中以 122.3 PFLOPS 的浮點性能獲得第一。在 2021 年 6 月的 Top 500 中,前 10 名的機器中有 6 個是使用 NVIDIA 的 GPU。

GPU 推動了目前的深度學習革命,而未來深度學習的發展很大程度上取決于 GPU 性能

GPU 要在 HPC 領域取得成功,需要開發一個龐大而多樣性的軟體生态系統,該系統的成熟經曆了 10 年。基于 CUDA 的程式設計系統,GPU 的程式設計生态系統現在包括了其他的程式設計方法,例如 CUDA Fortran 和 OpenACC 等。下一級别的支援,是一組數學計算庫,包括 CuBLAS,CuSparse 和 CuFFT 等對大量數學程式的關鍵函數進行過高度優化的計算庫。通過從程式設計語言到計算庫等軟體生态的完善,使用者可以通過使用這些庫來友善的使用 GPU 的各種能力。到目前為止,有超過 600 種 HPC 的應用是使用 GPU 進行加速的,其中包括 GROMACS、NAMD, AMBER, 以及 LAMMPS 等分子動力學代碼;氣象學代碼,如 WRF;流體動力學代碼,如 ANSYS 和 OpenFOAM;化學代碼,如 Gaussian, VASP, Quantum Espresso, 和 GAMESS; 以及結構分析代碼,如 LS-DYNA 和 ANSYS。

04

    深度學習硬體

GPU 促使了當今深度學習領域的的革命,而未來深度學習的進展也很大程度上取決于 GPU 的性能。深度學習的成功需要 3 個必要條件:算法、資料、算力。深度學習領域核心的算法:深度神經網絡、卷積網絡、反向傳播訓練、随機梯度下降以及其他算法,都是在上世紀 80 年代或者更早被發明的。大規模資料集例如 PASCAL VOC 和 ImageNet 到 2005 年已經達到可用的程度。唯一缺少的因素就是足夠快的硬體能夠以可接受的時間在大規模資料集上訓練一個健壯的神經網絡。

這一因素是在擁有高性能浮點計算能力且易于程式設計的 GPU 出現後才被滿足的。以計算機視覺領域為例,它是在 2012 年 AlexNet 被開發出來後才開始發生變化的,AlexNet 是一個使用兩塊 GeForce 580 (Fremi) GPU 訓練兩周得到的卷積神經網絡。AlexNet 在 2012 年赢得了 ImageNet 競賽,其準确度大幅度提升,以至于計算機視覺社群在很大程度上放棄了手工設計的特征檢測器,而使用神經網絡。相同的改變也發生在其他領域,例如語音識别領域、自然語言處理領域以及推薦系統領域。

GPU 使深度學習大衆化,任何人隻要擁有一台帶有 GPU 的個人電腦就可以使用這一技術。在 2010 年,Google Brain 的研究員建構了一個深度神經網絡來識别網際網路上得貓,使用了 16000 塊 CPU。這一實驗在 2012 年被複現,僅使用 48 塊 GPU,使用的軟體為 cuDNN, 一個為深度學習開發的 CUDA 庫。就像 CUDA 簡化了科學應用在GPU上的程式設計任務,cuDNN 簡化了在 GPU 上實作深度學習任務,其友善快捷的特性被深度學習研究員和相關從業者廣泛使用。

如圖 2 所示,深度學習模型的複雜性随着時間的推移而急劇增加。自然語言處理模型的複雜度僅僅兩年就增加了 1000 倍,從 2018 年的 BERT 到 2020 年的 GPT-3。這些模型在精度方面顯著增加,但是想要成功訓練更複雜的模型,則取決于硬體性能的提升。

圖形處理單元(GPU)的演進

GPU 通過兩種方式來滿足深度學習訓練快速增長的性能需求,其一是縱向擴充(scale-up),其二是在橫向擴充(scale-out)。為了促進橫向擴充,2015 年在 Pascal GPU 上釋出了 NVLink,一種高速的 GPU-GPU 交流通道。然後,在 2017 年 Volta GPU 釋出了 NVSwitch 技術,能夠支援高性能的 GPU 網絡互聯。NVSwitch 連結的 GPU 節點可以共享記憶體,能夠通過 Infiniband 網絡與其他節點互聯。AlexNet 最早是通過兩塊 GPU 訓練的,現代語言模型是在擁有幾千塊 GPU 的叢集上訓練的。例如,Selene,在 2021 年 6 月的 Top 500 中排名第六,是一個由 Infiniband 互聯的 560 個 DGX-A100 機箱組成的深度學習(Deep Learning, DL)訓練叢集。每個 DGX-A100 機箱包含 8 塊由 NVSwitch 互聯的 A100 GPU,總共有 4480 塊 GPU。

圖形處理單元(GPU)的演進

圖 3 展示了如何在單塊 GPU 上縱向擴充以滿足深度學習的需求。GPU 的推理性能已經提升了 317 倍,從 2012 年的 Kepler 到 2020 年的 Ampere,每年有超過 2 倍的性能提升,遠遠超過了摩爾定律所預測的增長系數。這一增長速度被稱為黃氏定律(Huang's Law),其高速增長很大程度上依賴于增加深度學習專用的資料類型和指令。推理計算的性能在 Kepler 時代,可用的是 4 TFLOPS 的 FP32 處理能力。這種資料表示超出了 DL (尤其是推理)所需的精度。除此之外,在 Kepler 架構上,可利用的最複雜的指令是融合乘加指令(fused multiply–add, FMA),Kepler 隻能夠将指令的提取、解碼以及操作數的提取分攤到,每個通道(lane)的兩個數學運算上。(注,通過乘加操作的計算耗時來隐藏指令延遲和操作數讀寫延遲)。2016 年,Pascal 架構增加 FP32 的性能到 10.6 TFLOPS,同時增加了 21.3 TFLOPS 的 FP16 能力。Pascal 不僅僅是擁有更高的 DL 性能,同時也具有很好的能效,主要原因是:1)對于 DL 應用,FP16 的精度和動态範圍都是足夠的;2)Pascal 的點積(dot-product)指令,像 FDP4,能夠通過增加數學操作的數量來分攤指令的開銷。

在 2017 年釋出的Volta 上重磅推出 Tensor Core 架構,在 DL 的性能方面取得重大進步。Volta Tensor Core 實作了一條支援 FP16 精度的 4x4 矩陣乘加指令,HMMA,這是大多數 DL 算法的内循環形式。單一指令支援 128 個浮點操作(64 FP16 乘,64 次 FP16 加,注:兩個 4x4 的矩陣相乘,需要做 64 次乘法,64 次加法),大量的計算很好的隐藏了指令開銷,緻使其可以忽律不計。是以,GPU Tensor Core 是一種擁有靈活的可程式設計架構的高效 DL 專用晶片。Volta 的 FP16 Tensor Core 總共提供了 125 TFLOPS 的 FP16 性能。在 2018 年,在 Tuning 架構上釋出了 INT8 Tensor Core,能夠提供 260 TOPS 的 INT8 算力。它引入了 IMMA 指令,能夠單指令計算一個 INT8 的 8x8 矩陣乘加。在 Tuning 架構上支援 INT8 Tensor Core 是最理想的,因為此時對于大多數的推理任務 INT8 的精度和動态範圍已經足夠。

在 2020 年,Ampere 架構上釋出的 Tensor Core 支援稀疏化資料的計算。稀疏化 MMA 指令對于權重矩陣每 4 個元素中有 2 個是 0 的情況,會有兩倍的性能提升,這種稀疏化叫做結構化稀疏(structured sparsity)。稀疏化指令使得 Ampere 架構的總推理性能達到 1248 TOPS(INT8)。下一節講對 Ampere 架構進行較長的描述。

與在 HPC 領域相同,在深度學習領域 GPU 取得成功的關鍵因素依然是軟體。從 2012 年釋出 cuDNN 開始,一個為深度學習應用建立龐大軟體生态的計劃已經被作為重要目标。NVIDIA 的 Tensor RT (TRT) 是最優化的推理代碼庫,它的 Triton 推理伺服器能夠管理多個模型的排程。第三方架構,如 TensorFlow,Pytorch 和 Caffe2 都支援 NVIDIA 的這些庫。NVIDIA 的 DALI 軟體庫管理部分深度學習訓練的預處理流水線(pipeline),例如分階段的資料預處理和資料解壓等操作。NVIDIA 推出的模闆庫 CUTLASS 大大簡化了程式員為每一代 GPU 開發高性能矩陣乘 kernel 的負擔。也提供支援醫學成像和視訊分析等應用程式的庫。軟體棧的發展對于深度學習的性能也是至關重要的。在 MLPerf Training V1.0 的送出中,相同的硬體上,僅僅由于軟體的增強,性能便提升 2.1 倍。

由于高性能和豐富的軟體生态,如今 GPU 成為深度學習應用的首要平台。最新的 MLPerf 結果顯示 NVIDIA 的 GPU 系統是用于資料中心推理和訓練的最快的商用平台。

05

    A100: 當今的 GPU

Ampere 的 A100,在 2020 年釋出,如圖 4 所示,是目前最新的 NVIDIA GPU。Ampere 采用 7 nm 技術,在有限的晶片面積上內建了 540 億個半導體。表 1 對比了 Ampere A100 與它上一代資料中心處理器 Volta V100 (2017)的關鍵屬性。Ampere 在每一個關鍵硬體特性上都有驚人的增長,其中包括 5 倍的 FP16 吞吐,2.2 倍的 DRAM 帶寬以及 6.7 倍的片上 L2 cache。除了大量的并行計算吞吐和記憶體帶寬,Ampere 架構還在包括用于機器學習和 HPC 的硬體支援,以及用于大型資料中心和超級計算機的可擴充性功能。

圖形處理單元(GPU)的演進
圖形處理單元(GPU)的演進

先進的支援。例如,Ampere 通過在複雜的任務圖中自動發射計算任務來加速 CUDA 的任務圖執行效率。Ampere 同樣為 arrive/wait barriers 提供硬體支援,有利于 GPU 更好的執行異步任務。最後,Ampere 架構在硬體上增加了對 Cooperative Groups 的支援,例如通過 warp-wide 的 reduction 操作加速 group-wide 的 collective 操作(Finally, Ampere provides additional hardware support for CUDA’s Cooperative Groups, such as a warp-wide reduction operation that accelerates group-wide collective operations.)。

圖形處理單元(GPU)的演進

機器學習特性

每個 Ampere 的 Tensor Core 使用 256 個 FP16 浮點計算單元在一個周期内完成 8x4x8 的混合精度矩陣乘法。Tensor Core 架構也支援不同數字表示的的高吞吐計算,例如 INT1,INT4,INT8,FP16, BFloat16(8 bit 指數位,7 bit 尾數位,E8:M7)。A100 也釋出了一種新的資料格式,TF32(TensorFloat-32, E8:M10), 它能夠提供與 FP32 相同的指數動态範圍,但是把尾數的精度降低到 10 bit。A100 在硬體上提供對這種 19 bit 資料的支援,其性能達到 FP32 吞吐的 8 倍,同時能夠提供充足的精度,以達到 DNN 網絡使用 FP32 訓練所達到的精度。

之前提到,A100 的 Tensor Core 在硬體上支援結構化稀疏,這一特性可以有效降低 DNN 權重資料的存儲,同時通過減少不必要的計算,增加吞吐。結構化稀疏要求每個子向量的4個分量中有 2 個分量是 0,這樣可以用于壓縮權重矩陣(類似于 Tensor Core 中 C = A x B 矩陣乘中得 A 矩陣)。這一特性把計算轉換為一個更小的矩陣計算,它僅需要原先一半的計算密度,是以能夠産生 2 倍的性能提升。雖然結構化稀疏要求神經網絡在訓練的過程中要有額外的訓練細節,但是它不會在包括視覺、目标檢測、分割、自然語言處理以及語言翻譯等廣泛的神經網絡上産生精度損失。

在存儲系統上,A100 也提供了一系列的特性來更好的控制資料的搬運和放置。為了提高能效,A100 支援資料直接從全局記憶體傳輸到共享記憶體,不需要經過寄存器轉運。A100 也提供了一系列新的控制 L2 cache 的操作,允許程式員影響 cache 的替換政策,以及高效的決定哪些資料能夠駐留在 cache 中,哪些可以直接從 DRAM 中擷取而不污染 cache。最後,L2 cache 包含硬體支援的資料壓縮技術,這一技術保證在 DRAM 和 L2 cache 中的資料都是壓縮的,在 SM 讀取資料的時候進行解壓縮,寫資料的時候進行壓縮,這樣可以很好的節省帶寬。

圖形處理單元(GPU)的演進

高性能計算特性

傳統的 HPC 任務依然需要更高的雙精度浮點計算能力,以及記憶體帶寬和互聯帶寬。在 GEMM 加速方面,A100 在體系結構上增加了 Tensor Core 對 FP64 的支援,增強 GPU 的雙精度浮點算力到 19.5 TFLOPS。此外 A100 部署了第三代 NVLink 互聯技術,通過每通道 50 Gb/s 的引腳資料速率(pin data rate)和 12 通道的 NVLink 組合獲得了 600 GB/s 的片外帶寬。高速互聯可以使任意兩個系統緊密的聯系在一起,例如 DGX A100 就是使用 8 塊 A100 兩兩相連,任意兩塊 A100 之間都能夠實作 600 GB/s 的資料傳輸速率,同時,整個系統能夠提供 150 TFLOPS 的 FP64 算力。使用 Infiniband 擴充,Selene 的 560 DGX-A100 能夠在 2.6 MW 的功率下,達到 64 PFLOPS 的算力;在 2021 年 6 月的 Green 500 清單中,最節能的 10 台超級計算機中有 9 台使用 A100 GPUs。

圖形處理單元(GPU)的演進

圖形特性

除了傳統的光栅圖形外,Ampere 架構還包括了對光線追蹤的硬體支援。從圖靈 GPU 開始,NVIDIA 把 RT Core 與 SM 內建,用以加速層次包圍體(bounding-volume hierarchy,BVH)資料結構周遊以及 ray-triangle 相交測試。運作在 SM 上的并行着色器代碼模拟數百萬光線,通過它們傳遞給 RT core,RT core 預測光線是否擊中三角形。Ampere 的 RT core 的吞吐是圖靈的兩倍,相對于 GPU 上的軟體光追,可以實作 2-3 倍的渲染幀率。圖形和計算的重要特性逐漸趨同,例如 Turing 和 Ampere 支援圖形應用使用基于機器學習的圖形算法,例如深度學習超采樣(Deep learning supersampling, DLSS), 使用 Tensor Core 去加速光追流水線。

06

    未來的方向

GPU 已經演進為極具計算能力的平台,硬體上支援圖形計算、HPC 和深度學習的加速。未來幾年,GPU 将在性能、應用領域、可擴充性和可程式設計性方面繼續發展。

圖形處理單元(GPU)的演進

正如我們在十年前的文章中大體預測的那樣,GPU FP64 性能從 2010 年的 Fermi 到 2020 年的 Ampere,十年間增長了 20 倍,年增長率為 35%(見圖 5)。我們預計這一趨勢将會在未來的 GPU 疊代中持續,但是會放緩。雖然 2005 年 Dennard 微縮技術的終結停止了傳統的電壓微縮技術,但半導體特征尺寸仍在變得更小。随着 GPU 的技術曲線從 Ampere 的 7 nm,到 5 nm,3 nm 以及更高的工藝,我們将會在晶片上內建更多的器件和電容,是以一個特定功能所需的能量将會減少,機關面積或者機關功耗将産生更高的性能。深度學習推理的性能已經以很高的速率(見圖3)在增加,每年增速超過 100%。我們預計這一趨勢将會持續幾代,但是随着架構的成熟,主要增長來自技術的驅動,最終将會趨于每年 35% 。

GPU 性能持續提升的主要挑戰來自于記憶體帶寬。雖然像 Linpack 這樣的基準測試可以很好的使用 cache 以保證 A100 的計算單元可以被填滿,但是大多數 HPC 和光追圖形應用依然受到帶寬限制。一個經典的 HPC 應用,每個 FP64 算術操作需要從記憶體擷取 1-4 bytes 的資料。例如,HPCG 基準測試是使用共轭梯度求解器代碼的代表,它的訪存計算比 (Byte/Flop) 達到 4 : 1。記憶體帶寬是從 Pascal 一代開始出現重大飛躍,從此開始向高帶寬記憶體(high-bandwidth memory, HBM)發展。Ampere 的 FP64 Tensor Core 和 HBM2E 的 DRAM 使得訪存計算比達到 0.1。為了繼續擴充記憶體帶寬和HPC應用程式性能,我們預計還需要在封裝和記憶體架構方面進行更多的創新。

GPU 是融入新的專用需求的理想硬體加速平台。它提供了可程式設計平台和高速的片上帶寬,以及片外存儲系統和高速的片外互聯技術。專用需求的硬體可以以新的指令添加到 SM 中(就像為深度學習添加的 Tensor Core 指令),或者作為獨立的記憶體事務,從 SM 啟動相關操作(例如 RT cores)。我們預測,在未來幾年,新的指令和基于記憶體的加速器将被內建到 GPU 中,以支援資料庫、稀疏線性代數和生物資訊學等應用領域。

另外,除了縱向擴充單個 GPU 的性能,我們預測 GPU 将被橫向擴充到更大的叢集,以賦能深度學習訓練和 HPC 應用。如今,通過 NVLink 連接配接的 Ampere 系統能夠實作每組超過 8 個 GPU之間以 600 GB/s 的帶寬共享彼此的記憶體,就像一塊 GPU 一樣。在未來幾代中,我們預計晶片外通信帶寬将繼續擴大,NVLink連接配接節點和 Infiniband 連接配接叢集的規模将繼續增長。我們也期望GPU、CPU 和 DPUs(智能網卡)之間更緊密的內建,以更少的開銷實作更高帶寬的通信和 I/O。

CUDA和相關庫的使用已經簡化了gpu程式設計,超過600個HPC應用程式都是gpu加速的。由于有更好的工具和對程式設計的抽象,我們預計未來的 GPU 程式設計将更加簡單。例如,Legate 程式設計系統允許 Numpy 程式在任意數量的 GPU 上運作,從單個 GPU 到4,480 個 GPU 叢集(如Selene)。Legate 是建立在 Legion 之上的一個運作時系統,它能夠管理多 GPU 應用的任務圖及其資料模型。Legion 負責任務的排程和管理資料通信、複制和遷移,大大簡化了多gpu系統的程式設計任務。

未來 GPU 程式設計的一個挑戰是,從不同的 SMs 通路不同的記憶體位置時非統一記憶體通路(Nonuniform memory access,NUMA)所帶來的固有開銷。曾經 GPU 提供過一個統一記憶體通路(Uniform memory access,UMA)模型,從任意 SM 通路記憶體的任意位置開銷都是均等的。随着 GPU 尺寸和多 GPU 系統規模的逐漸增大,要求所有的記憶體出現在同樣距離的位置上變得不可能,也就導緻 UMA 模型變得不可維護。我們預計向非統一記憶體通路模型的轉變能夠促使 SMs 接近記憶體的某些部分,以便它們能夠利用局部性來提高性能和效率。這一轉變,将要求 GPU 程式具有更好的局部性表達,以便 GPU threads 能夠和他們所操作的資料具有更好的一緻局部性。雖然程式員已經在多 GPU 系統中采用了這樣的政策,但是我們希望 NUMA 模型在單 GPU 中也能夠更有效。

自 GeForce 256 面世的 20 多年裡, GPU 已經取得了長足的發展。它們在性能方面增加了 390 倍,同時變得高度可程式設計,并增加了專用領域的硬體來支援 HPC、深度學習和光線追蹤。我們期待在未來20年裡,在性能和功能上也會有類似的進步。

07

    緻謝

在NVIDIA硬體和軟體工程師的共同努力下,GPU 在過去的20年裡得到了快速的發展。我們都期待着共同建設未來。

08

繼續閱讀