GTC 2024預習課:深入H100 GPU Hopper架構

文:城主

明天就是萬衆矚目的NVidia GTC AI 2024大會。在AI時代,這成了科技圈一個必須參加的盛會。

顯然,所有人都在眼巴巴等着萬衆矚目的黃教主主旨演講。Nvidia也必然會在GTC2024上推出更加碾壓的AI芯片B100,B200以及更多。

作爲這場大會的預習,本城和大家分享來自GTC2022的內容:深入H100 GPU Hopper架構。讀者們可以對當下最強悍的GPU有一個全面的理解,然後等待Nvidia的另一個大殺器來臨。

以下是這個關於H100 架構官方分享的主要內容,有興趣的同學可以研讀視頻完整版或者後附的書面全文:

NVIDIA在GTC2022大會上推出了全新的Hopper GPU架構和基於該架構的最新GPU NVIDIA H100。NVIDIA的GPU架構師邁克爾·安德斯和格雷格·帕爾默在演講中詳細介紹了Hopper架構的特點和H100的性能表現。

現代加速計算往往需要數百甚至數千個GPU協同工作,而每個GPU內部又包含數百個獨立的處理器。Hopper架構在性能、可擴展性和安全性方面實現了全面提升。它引入了新的Hopper流多處理器、下一代Tensor核心,以及用於加速動態編程的新指令集。

Hopper架構採用了分層計算結構和異步執行的設計理念,從而使GPU能夠高效地處理各種規模的工作負載。Hopper還專爲雲端部署進行了優化,提供了增強的安全性和彈性功能。

H100的目標是大幅加速當前的人工智能和高性能計算應用,併爲下一代工作負載提供支持。相比當時性能最強的A100 GPU,H100的性能提升了2到30倍。H100還引入了新的NVLink互連技術,可以更高效地處理需要跨多個GPU服務器進行模型並行的大規模計算任務。

基於Hopper架構的全新GPU集羣方案DGX H100 SuperPOD也在大會上亮相,它採用了新一代的GPU、CPU和互連設備。此外,NVIDIA還推出了集成了Hopper GPU和Grace CPU的全新SXM模塊NVIDIA Grace Hopper。

H100採用臺積電4nm工藝製造,集成了超過800億個晶體管,是當前業界最先進的單芯片設計。H100 GPU包含132個SM,每個SM的性能是A100的兩倍。H100還採用了全新的HBM3顯存方案和大容量二級緩存,實現了顯著的內存帶寬提升。

Hopper SM架構針對當前快速發展的人工智能和高性能計算應用進行了專門優化。新的Tensor核心實現了更高的速度和能效,並引入了對FP8數據類型的支持。Hopper還集成了創新的Transformer引擎技術,可以利用FP8數據類型加速transformer網絡的訓練和推理。

Hopper的FP8數據格式簡化了低精度量化的流程,與INT8的性能相當,但無需量化和微調等繁瑣步驟。綜合H100在SM數量、Tensor核心性能、FP8支持、時鐘頻率等方面的提升,其峰值計算性能約爲A100的6倍。

Hopper還對CUDA編程模型進行了改進,引入了線程塊集羣的概念,允許用戶更好地控制GPU內部的數據局部性。SM之間新增的通信網絡可以顯著降低線程塊之間通信的延遲。Hopper還引入了異步事務屏障、用於異步內存複製的張量內存加速器等新特性。

DGX H100服務器採用NVLink技術實現了GPU之間的高速互連,其雙向帶寬較A100提高了50%。DGX H100還支持SHARP技術,可以進一步提升集合通信操作的效率。NVLink互連技術還支持多達256個GPU的大規模集羣搭建,可以顯著提升推薦系統等應用的訓練性能。

除了NVLink,Hopper平臺還採用了最新的InfiniBand互連技術,包括NDR標準的ConnectX 7網卡和Quantum 2交換機。它們可以將帶寬提高一倍,並集成了先進的集合通信加速引擎。

在安全方面,Hopper實現了端到端的機密計算,將保護邊界擴展到了GPU。CPU和GPU之間的PCIe傳輸是全面加密的,GPU之間的NVLink通信也進行了加密。Hopper還增強了MIG多實例GPU技術,在提高隔離性的同時,將計算能力和內存帶寬大幅提升。

NVIDIA H100無疑是當前最強大的AI加速芯片,Hopper架構在性能、功能、互連、安全等各個方面都實現了全面升級。H100成爲當下人工智能基礎設施的核心引擎,爲產業智能化變革提供強大的算力支持。

==以下是根據講座原意重寫的書面中文版==

歡迎各位參加本次 GTC 演講。我們是邁克爾·安德斯,格雷格·帕爾默, NVIDIA 的 GPU 架構師。今天,我們有幸向您介紹我們最新的 GPU NVIDIA H100,並詳細解讀其背後的全新 Hopper GPU 架構。

現代加速計算已經不再僅僅是單個 GPU 的問題。相反,當今最苛刻的應用程序需要數百甚至數千個 GPU 來執行。每個 GPU 又可能包含數百個單獨的處理器。因此,設計這些分層系統並使程序員能夠利用其性能,需要我們在構建這些機器和表達程序的方式上進行根本性的轉變。

在今天的演示中,我們想讓您瞭解 Hopper 的設計如何在這個新世界中實現卓越的性能、可擴展性和安全性。首先,我們將瞭解 H100 GPU 的核心,即新的 Hopper 流多處理器。這種新的 SM 包含許多新功能,包括採用稱爲 Transformer Engine 的全新技術的下一代 Tensor 核心以及用於加速動態編程的新指令集。

接下來,我們將向您介紹定義每個級別的 Hopper 架構的兩個基本概念:分層計算結構的概念和異步執行的概念。然後,我們將瞭解 Hopper 架構如何從 GPU 擴展到系統,以及 Hopper 的 SuperPOD 系統如何設計爲有效加速各種規模的工作負載。

最後,Hopper 專爲在雲中部署而設計,幷包含大量安全性和彈性增強功能,使其成爲基於雲的計算的理想平臺。

當然,正如名字所說,如果沒有加速,加速計算就毫無意義。換句話說,沒有表現。藉助 H100,我們的目標是大幅加速所有當前的人工智能和高性能計算應用程序,還可以支持下一代這些工作負載。

爲了實現這一目標,我們知道我們必須實現超越當前最快 GPU NVIDIA A100 的真正性能飛躍。在這張幻燈片中,您可以看到,對於當今的主流 AI 和 HPC 模型(如許多視覺神經網絡或較小的語言模型),當兩者都使用 InfiniBand 互連時,H100 的性能是 A100 的 2 到 30 倍。

此外,H100 還引入了新的 NVLink 網絡互連,針對當今一些最大、最具挑戰性的計算工作負載,這些工作負載需要跨多個 GPU 加速服務器的模型並行性才能適應。正如您在此處所看到的,藉助 NVLink 網絡,這些工作負載獲得了又一代的性能飛躍,在某些情況下,性能比採用 InfiniBand 的 H100 再次提高了三倍。

爲了實現這些加速,我們不僅必須在 GPU 內部進行創新,還必須在整個加速數據中心進行創新。通過 Hopper,我們推出了下一代 GPU 集羣:DGX H100 SuperPOD。這款新的 SuperPOD 更新了下一代 GPU、CPU 和互連。現在,單個 256 GPU SuperPOD 可擴展單元可提供超過 1 exflop 的 AI 計算吞吐量。進一步來說,多個可擴展單元可以組裝成擁有數千個GPU的更大型機器。

今天,我們非常榮幸地向您介紹NVIDIA Grace Hopper,這是一款新型的SXM模塊,它結合了Hopper GPU和Grace CPU。

Grace Hopper推出了一種新的硬件一致性CPU-GPU互連,能夠提供每秒900GB的總帶寬。這是Hopper中全新且已經快速的PCIe Gen 5互連的七倍多。有了如此大的帶寬,GPU可以有效地訪問CPU的大內存,作爲其自身內存的擴展,從而大大增加GPU加速應用程序可用的總內存容量。我們還有很多關於Grace Hopper的信息要與您分享,我們將在未來繼續這樣做。

當然,如果沒有新的H100 Tensor Core GPU,新的SuperPOD和Grace Hopper都是無法實現的,它們具有前所未有的性能以及自CUDA本身推出以來GPU計算的一些最大變化。首先,H100採用臺積電定製的四納米工藝構建,包含超過800億個晶體管,這使其成爲世界上最先進的單片芯片。H100 GPU包含132個SM,每個SM的每個時鐘週期性能是A100 SM的兩倍,並引入了多項新功能。

H100還包括一個新的內存系統,該系統採用世界上第一個HBM3實現以及大型二級緩存,實現內存帶寬真正的代際飛躍。最後,爲了支持我們已經提到的SuperPOD和雲設計,H100引入了多種新的系統架構功能。例如,它包括第四代NVLink以及新的NVLink網絡功能。我們的第二代多實例GPU技術以及新的加速機密計算支持安全加速計算。

Hopper中的HBM3實施確實具有開創性。它在一個完整的芯片中具有六個站點,H100中有5個站點,總容量爲80GB。這種新的內存系統的設計不僅可以最大化峰值帶寬,而且提供了帶寬。爲了實現這一目標,它對內存本身以及GPU的內存控制器進行了改進,這些控制器經過優化,可在大幅提高的DRM頻率下運行,並經過重新設計,每個HBM站點包含兩倍數量的獨立內存通道,以保持相同的高效率,儘管頻率大幅增加。由於這些變化,H100達到每秒超過3TB,自將HBM引入GPU以來,它在內存帶寬方面實現了最大的代際飛躍。

那麼,讓我們從Hopper SM架構開始詳細介紹Hopper。現代人工智能和高性能計算工作負載的蓬勃發展絕對依賴於計算能力。新款Hopper SM正是爲了實現這一目標而設計的。

這首先是一個新的Gen Tensor Core生成張量核心,它的速度提高了一倍,效率更高,我將在一分鐘內更詳細地描述它。除了張量之外,Hopper還具有2X時鐘,用於提高時鐘和傳統IEEE FP32和FP64吞吐量。除此之外,Hopper SM還引入了一個新的動態編程專用指令集,我們稱之爲DPX。DPX爲許多動態編程算法(例如基因組學應用)的內循環提供了高級操作融合。然而,要實現數學吞吐量的全面增長2倍並非易事。首先,要達到這樣的速度,數學單元必須以極高的帶寬輸入數據。其次,如果您希望以接近峰值的效率執行,那麼就必須儘可能減少執行其他非數學指令所花費的時鐘週期。

爲了解決這個問題,Hopper SM引入了自CUDA誕生以來GPU計算的最大轉變,即我們稱之爲線程塊簇的新層次結構,這是線程塊和網格的CUDA概念之間的新層次結構。集羣可以顯著提高協作SM組之間的數據移動和同步效率。除了集羣之外,Hopper SM還添加了新的張量內存移動加速器,用於多維張量數據的移動。Greg將在我們的下一部分演示中更詳細地介紹集羣和異步數據移動。

如果數據處理速度更快,您還需要能夠緩衝更多內容。因此,我們將SM的L1緩存和共享內存大小增加到每個SM 256 KB,比A100增加了33%。

新SM的核心是全新的第四代張量核心。這款新的張量核心的每個時鐘週期吞吐量是上一代設計的兩倍,同時繼續支持從64位浮點一直到8位整數的各種數據格式。操作數越小,吞吐量越高。此外,Hopper張量核心還支持全新的八位浮點格式,其吞吐量是FP16和bfloat16的兩倍,我將在一分鐘內詳細介紹。

隨着吞吐量的增加,減少每次操作消耗的能源以控制GPU的總功率至關重要。Hopper的張量核心極大地提高了輸入數據管理的效率,導致操作數傳送邏輯的功耗降低30%以上。最後,Hopper的張量核心也繼承了A100的能力,當輸入數據足夠稀疏時,吞吐量再提高2倍。

接下來,我們來仔細看看新的八位浮點支持。在這張幻燈片的左側,我向您展示了這種新數字格式的組成。浮點數由一個有符號位組成,確定可表示數字範圍的幾個指數位,以及我們稱爲尾數的所有剩餘位,它們確定所表示的數字的精度。正如您在這裡所看到的,Hopper FP8不僅是一種格式,而且實際上是兩種格式,區別在於分配給任一附加精度的一位或擴展範圍。

在右側,您可以看到GPU如何使用張量核心處理FP8數據。給定兩個FP8輸入矩陣,這些都可以是我剛纔提到的兩種FP8格式中的任何一種,張量核心將兩個矩陣相乘,然後將輸出累加爲可由程序控制的FP16或FP32數字。一旦乘法累加完成,可以對數據執行各種常見的神經網絡操作,例如添加偏差或應用激活函數。最後,在將結果存儲到內存之前,會進行從累加器格式到任何其他所需輸出格式的硬件加速轉換。

這種新的FP8格式可用於人工智能訓練和推理,但如何做到這一點呢?爲此,Hopper的張量核心配備了一種稱爲Transformer引擎的新技術,它管理使用FP8來加速世界上計算最密集的模型Transformer。這個新引擎在深度學習框架堆棧下透明地運行,並且可以通過簡單的切換來啓用或禁用。在底層,Transformer模型只是計算密集型神經網絡層的圖。在每一層,Transformer引擎都會對張量核心產生的輸出值進行統計分析。然後,根據這些統計數據,推斷出表示張量中所有值所需的範圍。這些信息和知識關於接下來哪種類型的神經網絡層以及它需要什麼精度,使得Transformer引擎能夠決定在將張量存儲到內存之前將其轉換爲哪種目標格式。

特別是對於FP8,一個挑戰是可表示的數字範圍僅限於很少的位。因此,爲了最佳地利用可用範圍,Transformer引擎還能夠使用同樣根據張量統計數據計算的縮放因子將張量數據動態縮放到該範圍。這樣,Transformer模型中的每一層都能按照其所需的精度運行,並且也以最佳方式加速。

接下來,我將向您展示FP8的訓練和推理在實踐中是如何進行的。在這張幻燈片的左側,我展示了適用於各種GPT-3語言模型的訓練困惑度,從具有1.26億個參數的小型模型到具有220億個參數的大型模型。如果您不熟悉的話,困惑度只是衡量語言模型在遇到語言中的單詞時的困惑程度。因此,低困惑度表明神經網絡已經很好地學習了該語言。

對於每個模型,圖表中都有兩條線,一條實心線用於16位訓練,以及使用Transformer引擎進行FP8訓練的虛線。從圖表中可以看出,在整個訓練過程中使用FP8和FP16進行訓練。一旦模型經過充分訓練,我們還會測試下游任務(例如問答或翻譯)的性能,並發現這兩種精度之間也匹配。

Transformer模型一直是我們的重點,因爲它們是當今計算最密集的網絡之一。然而,事實證明,Transformer引擎訓練方法也恰好適用於其他一些模型,例如,對於像ResNet這樣的許多視覺網絡。然而,我們也發現一些網絡使用這種方法會損失一些準確性,例如,一些高參數效率的視覺模型,如MobileNets。這些模型可能需要額外的訓練算法創新,我們邀請社區與我們一起探索。

最後,在FP8中進行訓練後,模型可以非常輕鬆地部署用於FP8推理。這將提供與INT8推理相當的性能,但它要簡單得多,因爲與INT8不同,FP8不需要量化或微調步驟。

現在,讓我總結一下H100中的計算改進。首先,SM有132個,比A100增加了22%。然後,由於新的第四代張量核心,每個SM的速度都提高了一倍。在每個張量核心內,添加新的FP8格式和Transformer引擎可提供另外2倍的性能。最後,H100時鐘頻率的改進帶來了1.3倍的性能提升。總而言之,這使H100的峰值計算吞吐量約爲A100的六倍,對於世界上最需要計算的工作負載來說,這是一個重大飛躍。

我們已經討論了計算。現在讓我們看看Hopper如何保持這些令人難以置信的數學吞吐量水平以高效率運行。

現在我們來談談一些CUDA編程模型的變化,這些變化將幫助用戶在單個GPU上實現峰值性能。實現高性能有兩個關鍵與並行程序。

首先是數據局部性。通過將程序數據移動到儘可能靠近執行單元的位置,程序員可以利用較低延遲帶來的性能以及對本地數據的更高帶寬訪問。性能的第二個關鍵是異步執行。這意味着我們需要找到那些可以與內存傳輸和其他處理任務並行進行的獨立任務。我們的目標是充分利用圖形處理器(GPU)中的所有單元。

首先,我們來討論數據局部性和GPU的層次結構。CUDA具有分層編程模型,這有助於我們利用數據局部性。在CUDA中,內核的抽象是由線程塊組成的網格。如圖所示,網格始終在單個GPU上運行,而網格的每個線程塊則被放置在單個流多處理器(SM)上。SM爲線程塊中的線程提供協作執行的資源,線程同時運行並使用SM的本地內存進行通信和同步。線程塊是CUDA對數據局部性的主要抽象。

回顧歷史,當15年前創建CUDA編程模型時,每個GPU只有16個SM,因此,SM佔據了GPU的相當大的一部分。然而,如圖所示,在H100上,SM現在只佔GPU的一小部分,不到1%。因此,我們需要擴展CUDA編程模型,以便更好地控制GPU大部分區域上的數據局部性。

在硬件層次結構中,自然的位置是GPC或GPU處理集羣。GPC包含共享一些固定功能硬件的SM,但從CUDA的角度來看,一個GPC僅僅代表一組SM,它們在物理上總是靠得很近。因此,在Hopper上,我們在CUDA編程模型中引入了一個新的層次結構,稱爲線程塊集羣。集羣是線程塊組,始終被調度到同一GPC內的SM上。

現在,我們有四個可用的層次,每個層次都嵌套在下一個層次內。在Hopper上,我們有一個網格,它是3D簇陣列,簇是線程塊的3D數組,線程塊是線程的3D數組。您可以將集羣視爲線程塊編程模型的擴展,它覆蓋了芯片的較大部分。線程塊中的線程一起啓動,並被調度到稱爲SM的芯片區域。同樣,集羣中的線程被調度到GPC內的一組SM。線程塊中的線程協同執行,使用SM的本地共享內存。同樣,集羣中的線程使用所有共享內存協同執行,這些內存來自集羣中的所有塊。

接下來,我將在幾張幻燈片中介紹所有的集羣功能,這些功能在右側列出。我將運行一個動畫,這樣您就可以看到有集羣和沒有集羣的網格之間的區別。左邊四個紫色盒子是普通網格中的線程塊,而右邊的四個紅框是集羣內的線程塊。正如您所看到的,紫色線程塊可以被調度到任何GPC上的SM,而且可能並不都是共存的。例如,塊三甚至可能不與塊零、塊一和塊二同時運行。這是傳統CUDA編程模型的一個例子,它允許網格包含數千個線程塊,遠遠超過GPU可以同時容納的數量。

對於集羣,其所有四個紅色線程塊一起啓動並調度到同一個GPC上。默認情況下,它們被安排到單獨的SM上,以最大化總互連帶寬,供集羣使用。如果沒有足夠的免費資源來啓動所有四個,在任何塊啓動之前,必須等待同一GPC(圖形處理集羣)上的四個SM(流多處理器)中的空間釋放。然後,整個集羣將一起啓動。集羣中的線程塊具有協同調度保證。由於集羣中的所有塊必須共存於GPC上,因此集羣的大小是有限的。在H100上,最多可以有16個線程塊。

在每個GPC中,我們還添加了一個新的SM到SM網絡,用於集羣內所有線程之間的直接通信。在接下來的幾張幻燈片中,我們將瞭解如何使用該網絡。

通過集羣,所有線程都可以直接讀寫集羣中所有線程塊的共享內存。我們稱之爲分佈式共享內存,或DSMEM,因爲共享內存的虛擬地址空間在邏輯上分佈在集羣中的所有塊上。

左邊顯示的是A100,線程塊之間共享內存的唯一方法是使用全局內存。然而,如右圖所示的Hopper H100,由於我們知道集羣中的線程塊是共存的,我們可以直接進行塊與塊之間的通信,通過本地共享內存。新的SM到SM網絡可以降低延遲,而不是通過L2引用全局內存。分佈式共享內存的主要優點是允許更大的問題在集羣中協作執行。由於一個集羣是由N個線程塊組成的,這意味着線程數量最多爲N倍,和N倍的共享內存可以用來合作解決問題。

集羣的另一個功能允許塊到塊通信具有隱式同步。這速度快了七倍,比通過全局內存進行類似的通信具有顯式同步。如果你看到左邊,你可以看到我們進行數據交換的傳統方式。生產者寫入共享數據,然後進行刷新以證明數據已到達內存,然後在內存中寫入一個標誌變量。消費者必須輪詢共享數據,然後讀取共享數據。所有這些都需要三到四次來回記憶。然而,如右圖所示的Hopper,使用集羣中的共享內存可以進行單方面的數據交換。在這裡,生產者執行一個命令,自動寫入數據並更新屏障,它們都位於消費者的本地共享內存中。消費者只需在屏障上等待,然後可以直接從本地內存讀取共享數據。所有這一切都建立在所謂的異步事務屏障之上,我們將在更多幻燈片中討論這一點。

現在我們已經探索了針對數據局部性和利用GPU層次結構的CUDA編程模型更改,讓我們跳轉到與異步執行相關的改進。正如我之前提到的,並行編程性能的關鍵之一是異步執行,這基本上意味着允許內存副本重疊進行計算和其他獨立工作。Hopper H100在這方面添加了多項新功能。首先,一個新的異步事務屏障,隨着所有異步屏障的性能改進,以及一個用於執行異步內存複製的新單元,稱爲TMA。我將在接下來的幾張幻燈片中描述所有這些改進。

讓我們從異步屏障的回顧開始,這在A100上可用。考慮一個示例,其中一組線程正在生成數據,這些數據將在屏障後全部消耗。如左圖所示,異步屏障將同步過程分爲兩個步驟。首先,線程信號到達當他們完成自己的共享數據部分時。此到達是無阻塞的,因此線程可以自由地執行其他獨立的工作。最終,線程需要所有其他線程生成的數據,此時,他們等待,這會阻塞它們,直到每個線程都發出信號到達爲止。現在,異步屏障的優點他們是否允許線程在等待之前執行獨立的工作?這種重疊是額外性能的來源。H100的新功能是等待線程休眠的能力,直到所有其他線程到達。在以前的芯片上,等待線程將在共享內存中的屏障對象上旋轉。雖然異步屏障仍然是編程模型的一部分,Hopper正在添加一種新形式的屏障,稱爲異步事務屏障。

異步事務屏障也是一個分割屏障,但不僅僅計算到達的線程,它還對交易進行計數。有一個用於寫入共享內存的新命令,傳遞要寫入的數據和交易計數。將此事務計數視爲字節計數。事務屏障將在等待命令處阻塞線程,直到所有生產者線程都完成到達,以及所有交易計數的總和達到預期值。這個屏障是一個非常強大的新原語,它非常適合異步內存複製和數據交換。

之前,我描述了集羣如何進行塊對塊通信存在單方面數據交換的障礙。該集羣功能構建在這些異步事務障礙之上。我有另一個交易障礙的例子,如左側所示。在此示例中,集羣中有四個線程塊正在跨數組進行計算。每個線程塊都被分配了一組要處理的元素,在算法的每次迭代結束時,每個區塊必須交換其 Halo 數據,以黃色突出顯示,與其他三個塊。

在右側,我僅顯示了塊一、塊二和塊三更新塊零所需的存儲命令。這在塊零的共享內存中使用單個事務屏障。三個生產者發送他們需要的任意數量的字節,並且交易屏障保持塊零直到所有字節到達。事務屏障只需知道預期的字節總數。它不關心哪個生產者發送這些字節,並且不需要它們都發送相同數量的字節。這是非常強大的。它允許與多個生產者進行單方面的數據交換與單個消費者進行通信。

在 Hopper H100 上,執行異步內存複製的另一種方法是通過使用 SM 內的新單元稱爲張量內存加速器(TMA)。如上圖所示,TMA 可以複製張量的任何部分,最多五個維度。將張量視爲基本上的多維數組。TMA 提供了更簡單的編程模型,因爲它接管了地址生成的任務,通過計算步幅、偏移和邊界條件複製張量的片段時。它可以處理任何尺寸的副本,最大爲 SM 上共享內存的完整大小。它還可以在全局內存和共享內存之間以任一方向進行異步複製,而A100只能進行異步複製進入共享內存。對於集羣,它還可以從一個塊的共享內存中進行復制到另一個塊的共享內存。

現在,TMA 的一個關鍵優勢是它可以釋放線程來執行其他獨立工作。在A100上,如果你看左下圖,在 A100 上,內存副本是使用特殊的 load-global-store-shared 指令執行的,所以線程本身負責生成所有地址並循環遍歷整個複製區域。在 H100 上,如右圖所示,TMA 負責處理一切。單個線程在啓動 TMA 之前創建一個副本描述符,從那時起,地址生成和數據移動完全由硬件處理。總體而言,TMA 是一個非常強大的 DMA 引擎,用於與共享內存之間進行異步內存複製。

所以總結一下,異步執行的目標是讓GPU上的所有單元都得到充分利用,通過允許計算和數據移動更多的重疊。A100引入異步操作以及編程模型的異步障礙。然而,在A100上,必須使用許多線程來生成複製地址。在循環中啓動特殊加載指令。

Hopper H100引入了異步事務障礙,這對於具有同步的原子數據移動來說是一種改進,它提高了等待障礙的效率。Hopper還推出了一種新的內存副本片上加速器,名爲TMA,這使得通用線程無需進行內存操作和地址計算,讓他們能夠專注於獨立的處理任務。因此,儘管A100在編程模型中引入了異步,但Hopper H100是一款完全異步的GPU。

同樣,Hopper引入了新的層次結構,在CUDA編程模型中被稱爲線程塊簇。這些集羣的行爲就像一個超大的線程塊,它們保證所有線程塊同時調度到SM上,並且可以訪問所有的分佈式共享內存,在集羣中的任何塊上。集羣使用事務屏障實現單向通信,以獲得最小的潛在記憶。集羣還允許高頻數據交換。在右側,您可以看到一些性能數據,其中集羣提供了2-3倍的性能優勢,超過非簇。集羣提高了許多應用程序的性能,允許程序員直接控制GPU的更大部分,而不僅僅是一個SM。集羣允許協作執行,有更多的線程可以訪問更大的共享內存池,這比在一個SM上僅使用一個線程塊是可能的。

現在我們已經介紹了Hopper GPU內部的創新,讓我們來看看Hopper架構如何將多個GPU擴展到整個系統,以及這些系統如何加速最苛刻的應用程序。

現在,當將應用程序擴展到單個GPU之外時,每個GPU不再單獨運行。相反,GPU必須在彼此之間同步和交換數據。正在執行哪種算法以及該算法如何映射到機器上將決定GPU之間發生哪些通信模式。

在這張幻燈片上,我將向您展示兩種關鍵模式的示例,這兩種模式恰好是許多現代AI和HPC工作負載的核心。首先,在左側,我們有一種模式,其中每個GPU同時向所有其他GPU發送唯一的數據。我們稱之爲全方位交換。在平衡網絡中,整體性能由我們稱爲網絡二分帶寬的屬性決定,這正是當網絡中一半GPU向另一半發送數據時網絡可以維持的最小帶寬。

在幻燈片的右側,我們在數據並行深度神經網絡訓練中有一種常見的模式,稱爲all-reduce。當每個GPU在某種分佈式計算中產生部分結果時,就會使用All-reduce。現在的目標是將所有這些部分結果相加,然後將總和廣播到所有參與的GPU。因此,從簡化的角度來看,all-reduce性能由每個rank中的IO帶寬決定。然而,因爲這些值不僅通過鏈路發送,而且還需要減少,性能不僅取決於鏈路帶寬,還取決於執行縮減計算的速度。

因此,讓我們開始將H100 GPU組裝到越來越大的系統中,並在每個級別上看看這兩種關鍵模式是如何加速的。首先,除了H100之外,我們還推出了一款名爲DGX-H100的新服務器。正如您在此圖中看到的,這個新的DGX包含八個GPU,每個GPU通過PCIe Gen 5連接到CPU,以及NVIDIA ConnectX 7 InfiniBand網絡接口控制器。在GPU之間,第四代NVLink的每個鏈接帶寬與A100相同,但每個GPU的鏈接數量從12個增加到了18個。這使得每個GPU的總帶寬達到每秒900GB,比A100高出50%。GPU之間的NVLink連接是通過四個新的NVSwitch芯片建立的,每個芯片提供每秒高達1.7TB的二分帶寬,這足以維持所有GPU對之間的每個GPU NVLink帶寬。這個新的NVSwitch還增加了對SHARP技術的支持,這項技術以前僅在基於InfiniBand的網絡中可用。SHARP技術將還原操作的速度加快了兩倍,稍後我將解釋它是如何工作的。

下面的表格總結了DGX-H100相對於DGX-A100的改進。在一、二等分帶寬軌道中,原始NVLink帶寬得到了改進,因此爲1。速度是上一代的5倍。減少帶寬原則上遵循相同的1.5倍改進,但SHARP的存在將其翻倍至3倍。接下來,我將向您展示這是如何工作的。

首先,我們來看看A100。在我在這裡展示的算法中,有兩個步驟,減少和廣播步驟。請記住,一開始,每個GPU都保存一些計算的部分結果,我們的目標是將所有部分結果減少爲最終結果,然後將該結果分配回到所有GPU。在圖中,我只會從一個GPU(頂部的GPU)的角度顯示流量,以減少視覺混亂,但實際上,請記住所有GPU都並行執行所有這些步驟。

因此,在第一步中,每個GPU從所有其他GPU讀取其負責的數據塊的部分結果,並在其SM中減少它們。這意味着它正在從NGPU讀取數據,它正在向NGPU發送數據,因爲所有其他GPU都在同時執行此操作。在第二步中,每個GPU現在將爲其數據塊計算的最終縮減結果廣播給所有其他GPU。因此,和以前一樣,它必須發送數據N次,一次發送給其他GPU,它將接收數據N次,一次來自其他GPU。總而言之,這意味着價值4N的數據已通過該GPU的NVLink傳輸。

現在讓我們看看在SHARP H100上的情況有何變化。首先,SHARP增加了網絡內計算。所以現在交換機本身可以執行減少操作。這意味着在第一步中,GPU現在只需向交換機詢問一條數據的最終縮減結果,然後交換機獨立地從所有其他GPU讀取它需要的部分結果,計算歸約結果,並將其提供給請求的GPU。因此,雖然GPU仍然需要向交換機發送N次數據,一次是爲對方請求GPU發送的,它只會接收一次數據。作爲獎勵,它也不必再計算任何東西,因爲交換機已經完成了它,這使得SM可以騰出時間來做其他工作。在第二步也是最後一步中,SHARP還增加了對通過NVLink寫入多播的支持。這使得圖形處理器(GPU)只能發送一次數據,然後由交換機將其分發給所有其他的 GPU。同樣,這與第一步是對稱的,儘管我們仍然收到來自其他 GPU 的 N 次寫入,但我們只需發送一次數據。因此,總的來說,這意味着通過 GPU NVLink 傳輸的數據量已經從 4N 減少到 2N 加 2,有效地降低了帶寬,提高了大約兩倍的效率。因此,結合我們已經看到的原始鏈路帶寬增加 50%,這爲我們帶來了我們所看到的 3 倍的提升。

現在,儘管 3X 是帶寬的巨大飛躍,但自從我們在 Pascal 中重新引入了 NVLink,它始終僅限於相當少量的 GPU。因此,只有小到足以適合或在八個 GPU 上運行的計算問題才能從中受益。今天,我們將取消這個限制。

Hopper 的全新 NVLink 網絡架構可以用於在 H100 中組裝效率顯著提高的大型系統。這種新的 NVLink 網絡互連由新的外部 NVLink 開關啓用,該開關基於與 DGX 內部 NV 開關相同的芯片。有了這個新的外部開關,現在可以通過 NVLink 連接多達 256 個 GPU。

因此,相比上一代,這種規模的系統必須求助於 HDR InfiniBand,這無疑已經是一種快速互連,並且還需要多級開關,NVLink 網絡提供了一個數量級的二分帶寬增加,正如您在底部的表格中看到的,只有單層交換機。理解帶寬增加一個數量級的含義可能有些困難。舉個例子,讓我們看一下在二分帶寬、推薦系統上蓬勃發展的深度學習模型。

推薦器正在推動我們今天在互聯網上看到的大部分內容,從產品推薦到搜索結果。在左圖中,您可以看到推薦器由兩部分組成。首先,在底部,一組所謂的嵌入表,用於轉換分類輸入信息,例如該用戶購買了該商品,轉化爲密集的數字表示。其次,一組線性層對這些表示進行操作以提出建議,如頂部所示。

這些推薦模型的挑戰性和獨特性在於其龐大的規模。例如,這些嵌入表之一可能對網上商店中出售的每件商品都有一個條目。因此,它可以輕鬆擁有數百萬甚至數十億個條目,每個條目都是數字向量。這意味着推薦器中的嵌入通常不適合單個 GPU,甚至單個服務器的內存。因此我們需要使用模型並行性將它們分佈在許多 GPU 上。例如,一次爲每個 GPU 提供一張表。

與嵌入不同,網絡頂部的線性層很小,並且通常在所有 GPU 之間複製,並通過數據並行性進行有效訓練。因此,當數據流經神經網絡時,無論是推理還是訓練,它必須在底部模型並行部分和頂部數據並行部分的邊界處的 GPU 之間重新分配。這種重新分配實際上是一種全方位的交換。正如我們已經展示的,NVLink 網絡可以顯著提高網絡平分橫幅的所有規模和平分帶寬。

在右側,我向您展示了示例推薦模型的訓練性能,嵌入 14 TB,甚至比單個 DGX 服務器內的平均 GPU 內存容量還要大得多。你可以看到首先從A100移動到H100,兩者都使用InfiniBand,性能提高了大約兩倍半。但有了 NVLink 網絡,性能已經再次提升,達到了A100的四倍以上,這一切都得益於更高的綜合性能。

接下來,我們將深入探討NVLink網絡的底層結構,以理解它如何幫助我們構建更大的系統。在這張幻燈片中,我展示了兩個通過NVLink網絡交換機連接的GPU。當左側的GPU(即源GPU)中的SM需要寫入右側目標GPU中的內存時,它將使用源GPU的虛擬地址空間發送內存請求。然後,GPU的內存管理單元將其轉換爲新的NVLink網絡地址空間。接着,請求在到達目標GPU之前,通過該網絡地址在網絡中進行路由。

新的硬件(包括新的鏈接TLB)確保請求合法,並且僅針對實際允許訪問的內存。然後將其轉換爲GPU HBM中的物理內存地址。正如這個例子所示,與傳統的NVLink不同,NVLink網絡建立了地址空間隔離,即所有端點虛擬地址空間和新網絡地址空間之間的隔離。與傳統NVLink不同的是,NVLink網絡連接並非由系統在啓動時自動建立,而是必須在運行時由應用程序軟件通過一組新的CUDA API函數請求。當然,最簡單的方法是使用NVIDIA的通信庫,如Nickel或NVShmem,它們在後臺自動執行此連接設置。

這些可擴展性和安全性的改進使我們能夠通過NVLink連接更多的GPU,從而使我們所看到的二分帶寬實現數量級的增加。當然,我們這個時代最大、最具挑戰性的問題可能需要超過256個GPU才能運行。因此,可以通過連接多個256 GPU SuperPOD來實現可擴展的單元。

爲此,我們推出了下一代InfiniBand互連技術、新的ConnectX 7 InfiniBand NIC和名爲Quantum2的新InfiniBand交換機。兩者都支持下一代NDR InfiniBand標準,該標準提供的帶寬是上一代HDR的兩倍,每個鏈路總共100GB。在DGX系統中,有8個這樣的NIC,系統總帶寬爲每秒800GB。CX7還包括一個硬件加速器,用於小數據量的全面操作,因爲這些操作通常發生在許多高度分佈式的工作負載中。因此,CX7相對於CX6在全對全方面的優勢可以超過2倍的原始帶寬增益並增長至四倍。

在交換機方面,Quantum2比Quantum1具有更高的開關基數。它還包括第三代InfiniBand Sharp。我們已經討論過Sharp如何通過NVLink加速縮減,這裡的原理是完全相同的。然而,在大型系統中,例如通常使用InfiniBand的系統,例如在全尺寸數據中心中,大多數時候,所有GPU上不僅僅運行一種工作負載。當處理非常具有挑戰性的工作負載時,可能會發生這種情況。但在其他時候,多個獨立的工作負載將在機器的不同部分同時執行。因此,對於這種情況,Sharp Generation 3包括新的硬件多租戶支持,最多可減少32個併發。在下一張幻燈片中,我將向您展示更多相關細節。

首先,我們來看左邊的上一代Sharp的A100。在這個系統中,每個Quantum1交換機都配備了一個我們稱爲“聚合節點”的Sharp硬件資源。因此,一旦GPU在Sharp樹中被連接起來以加速它們之間的數據減少,其他工作就無法在同一組交換機上使用Sharp。這意味着,儘管系統上運行着許多作業,但Sharp的優勢只能在所有活動工作負載的一小部分中得到體現。

在右側,我們看到的是H100上的Sharp V3。在這個新系統中,每臺交換機的Sharp資源增加了32倍。因此,即使系統上存在異構工作負載組合,這些工作負載也可以從加速數據減少中受益。

接下來,我將向您展示如何將所有這些元素結合起來,構建一臺完整的Hopper AI超級計算機。在左邊,您可以看到它的A100版本。128臺DGX A100服務器通過葉脊核心架構中的三層HDR InfiniBand交換機連接,形成了一個包含1000個GPU的集羣。我這裡以1000個GPU爲例,但實際上,只需添加更多的系統和交換機,就可以擴展到任意更多數量的GPU。

在右側,您可以看到DGX H100等效系統。對於1000個GPU,我們將有四個通過Quantum 2和CX7的NDR InfiniBand相互連接的NVLink網絡子集羣。因此,在全面的情況下,這個新的H100系統的計算失敗次數是原來的六倍,二等分帶寬的兩倍,以及全對全性能的四倍。在存在多個租戶的情況下,最多可以減少A100系統帶寬的四倍。當然,還有一些應用程序可以本地化到機器的較小部分,正如我們之前討論的,進入NVLink網絡可以看到更高的速度。總的來說,計算和通信性能都有了巨大的提高。

現在我們已經瞭解了Hopper如何擴展到數據中心的數千個GPU,我想花幾分鐘時間談談NVIDIA的雲計算技術。

首先,我想向您介紹一些有關機密計算的背景知識。今天,許多客戶的應用程序都處理着高度敏感的信息,例如個人或財務數據、健康信息,或者是專有的人工智能模型和權重。在雲中運行這些應用程序的關鍵在於數據安全,尤其是在許多客戶共享基礎設施的地方。具體來說,客戶希望防止在使用數據時,其數據被未經授權訪問。客戶數據通常在靜態時進行加密,比如在磁盤上,以及在傳輸過程中,比如通過網絡。但在使用它執行計算時,它必須在服務器上未加密。

機密計算是一種保護客戶數據在服務器上使用時的技術。它必須保護數據免受惡意行爲者的侵害,例如雲中的其他用戶和應用程序。它必須保護數據免受內部人員的侵害,例如雲的系統管理員,他們可以物理訪問服務器。它必須保護數據免受控制雲基礎設施本身的軟件的影響,例如主機操作系統或虛擬機管理程序。客戶真的不想相信任何人會擁有他們的數據,甚至雲系統管理員或雲基礎設施本身也不是。爲了防範各種威脅,機密計算必須提供兩個關鍵要素:保密性和完整性。保密性是指保護所有客戶的代碼和數據,防止被攻擊者讀取。完整性則是指攻擊者無法在不被發現的情況下破壞客戶的代碼或數據,同時系統本身能夠證明其組件是安全的。

目前,機密計算解決方案主要基於CPU,這意味着它們的性能不足以應對AI和HPC等計算密集型工作負載。通過Hopper H100,我們在硬件層面擴展了機密計算的安全邊界,包括CPU和GPU。這個邊界被稱爲可信執行環境,如你在圖中所見,現在它包括了CPU上的機密虛擬機和GPU上的對應虛擬機。

H100具有將GPU與外界隔離的硬件,這樣只有來自機密虛擬機內部的交易才能被驗證和執行。所有通過PCIe的交易都在CPU和GPU之間進行加密,而密鑰只能由在可信執行環境中運行的軟件訪問。這些密鑰對主機操作系統、虛擬機管理程序或任何惡意行爲者都是不可見的,從而確保了數據的機密性和完整性。

H100在啓動和配置系統時還提供了硬件信任根,使得機密虛擬機能夠確保在GPU上運行的固件是真實且未被篡改的,它允許GPU安全地證明啓用了機密計算,這再次提供了完整性。

如圖所示,H100允許單個租戶在安全直通模式下設置具有單個GPU的機密虛擬機,單個租戶也可以分配給多個GPU。我在這裡展示了兩個。在此配置中,GPU之間NVLink上的流量也已加密。

最重要的是,所有針對安全性和機密性的更改,例如加密,都被GPU上的虛擬化硬件隱藏,以及在CPU上運行的NVIDIA驅動程序。這意味着無需更改CUDA應用程序代碼就可以使用NVIDIA的機密計算技術。因此,Hopper H100現在是世界上第一個具有本機機密計算支持的GPU。

現在,讓我們換個話題,談談雲計算和配置。數據中心通常包含數百個GPU,雲服務提供商必須在客戶之間配置這些GPU。每個客戶租用一組GPU,可以是一個,也可以是多個,具體取決於問題的大小和所需的解決時間。AI訓練、HPC模擬等許多問題需要客戶能夠負擔得起的儘可能多的GPU。但對於某些問題來說,單個H100的威力太大了。AI推理和CUDA代碼開發可能就是這樣的例子。因此,雲服務提供商希望爲工作負載更簡單的客戶提供部分GPU,基本上那些需要比完整的H100更少的馬力。

在A100上,NVIDIA引入了一項名爲MIG的技術,這使得雲服務提供商能夠進行此類部分配置。MIG或多實例GPU允許GPU細分,最多可分爲七個GPU實例。正如您在右側看到的,每個GPU實例都有專用的處理資源,例如SM,每個資源都有專用的內存分區,具有到L2和DRAM的隔離數據路徑。這種物理隔離還提供性能隔離並保證服務質量。

在Hopper H100上,我們對MIG技術進行了多項改進。首先,H100爲每個MIG提供的計算能力是A100的大約三倍。每個MIG的內存帶寬大約是A100的兩倍。

此外,我們爲每個GPU實例增加了專門的圖像和視頻解碼器引擎。這對於經常處理大量圖像或視頻的人工智能推理客戶來說至關重要。第三,我們在H100上,結合了MIG技術,將GPU劃分爲多個實例,並使用我們的機密計算技術進行安全執行。在這裡,可信執行環境封裝了一個運行在CPU上的機密VM,同時在GPU上運行MIG實例。我們利用了MIG已經提供的單元物理隔離。

另外,我們添加了硬件防火牆來防止任何未經授權的內存訪問,這些訪問可能來自其可信執行環境之外,包括來自其他MIG實例。在PCIe接口上,SROV用於爲每個GPU實例創建一個虛擬功能。SROV虛擬化控制和編程每個GPU實例所需的所有寄存器。當然,PCI上的所有傳輸仍然是加密的。每個GPU實例都有自己的密鑰,因此,虛擬機之間或GPU實例之間沒有數據共享。

因此,通過結合MIG和機密計算,Hopper H100現在是世界上第一個使用單個GPU的本機機密計算平臺,也是第一個多租戶平臺。

看來我們的時間已經用完了,希望您喜歡我們對Hopper H100內部所有技術的快速瞭解。我們相信H100將成爲驅動世界人工智能基礎設施的新引擎。