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将成为驱动世界人工智能基础设施的新引擎。