编者注:NVIDIA 在 3 月 23 日公布基于全新 Hopper 架构的 GPU H100,其多种精度下的 AI 性能达到上一代 A100 的 3~6 倍。NVIDIA 如何做到如此大幅的性能升级?Hopper 架构有何玄机?千芯科技董事长陈巍博士对此加以解读。 在 2022 年 3 月 NVIDIA GTC 大会上,NVIDIA 创始人兼 CEO 黄仁勋介绍了一款基于全新 Hopper 架构的 H100 GPU,这是英伟达迄今用于加速人工智能(AI)、高性能计算(HPC)和数据分析等任务的最强 GPU 芯片。 ▲ Hopper 架构 H100 GPU 的主要升级 Hopper 架构以计算科学的先驱 Grace Hopper 的姓氏命名。黄教主称:"Hopper H100 是有史以来最大的代际飞跃。H100 具有 800 亿个晶体管,在性能上堪称 NVIDIA 的"新核弹"。 那么,"新核弹"的核心是什么样的?本文将深入解读和分析 Hopper 架构。 ▲ Hopper 架构的 H100 与前几代 GPU 性能对比 注:Grace Hopper 博士是哈佛 Mark 1 的首批程序员,被誉为编译语言之母。据称她发现了计算机程序中的第一个 Bug,同时也创造了计算机世界最大的 Bug—— 千年虫。01. Hopper 的整体结构拆解 NVIDIA Hopper 架构 H100 芯片采用台积电 4nm 工艺(N4 是台积电 N5 工艺的优化版),芯片面积为 814 平方毫米(比 A100 小 14 平方毫米)。 ▲ H100 Tensor Core GPU 的性能规格 Hopper 架构可以视为由两组对称结构拼接而成。(是不是有点类似我们之前介绍的苹果 UltraFusion 架构的拼接思路?不过这里的 GPU 还是单片的。回顾苹果 UltraFusion 架构可参见《苹果芯片"拼装"的秘方,在专利里找到了》文章。) 在顶层拓扑上,Hopper 似乎与她的前辈 Ampere 架构差别不大。图中的 Hopper 架构 GPU 由 8 个图形处理集群(Graphics Processing Cluster,GPC)"拼接"组成。 ▲ Hopper 架构基本结构 外周与多组 HBM3 封装在一起(Chiplet 技术),形成整个芯片模组 —— 从模组上看又是个"拼装货"。片上的每个 GPC 又由 9 个纹理处理集群 (Texture Processor Cluster,TPC)"拼接"组成。 由 PCIe5 或 SMX 接口进入的计算任务,通过带有多实例 GPU(Multi-Instance GPU,MIG)控制的 GigaThread 引擎分配给各个 GPC。GPC 之间通过 L2 缓存共享中间数据,GPC 计算的中间数据通过 NVLink 与其他 GPU 连接 / 交换。每个 TPC 由 2 个流式多处理器(Streaming Multiprocessor,SM)组成。 Hopper 架构的性能提升和主要变化体现在新型线程块集群技术和新一代的流式多处理器(具有第 4 代张量核心)。 ▲ 线程块集群和带有集群的网格 Hopper 架构中引入了一种新的线程块集群机制,该机制可以跨 SM 单元进行协同计算。H100 中的线程块集群可在同一 GPC 内的大量 SM 并发运行,这样对较大的模型具有更好的加速能力。02. 新一代流式多处理器 SM 与 FP8 支持 Hopper 架构的新一代流式多处理器引入了 FP8 张量核心(Tensor Core)来加速 AI 训练和推理。FP8 张量核心支持 FP32 和 FP16 累加器,以及两种 FP8 输入类型(E4M3 和 E5M2)。 ▲ 流式多处理器 SM 与 FP16 或 BF16 相比,FP8 将数据存储要求减半,吞吐量翻倍。我们在 Transformer 引擎的分析中还会看到使用 FP8 可自适应地提升 Transformer 的计算速度。 每个 SM 包括 128 个 FP32 CUDA 核心、4 个第 4 代张量核心(Tensor Core)。 进入 SM 单元的指令首先存入 L1 指令缓存(L1 Instruction Cache),然后再分发到 L0 指令缓存(L1 Instruction Cache)。与 L0 缓存配套的线程束排序器(Wrap Scheduler)和调度单元(Dispatch Unit)来为 CUDA 核心和张量核心分配计算任务。(注:GPU 中最小的硬件计算执行单位是线程束,简称 Warp。) ▲ FP8 具有 FP16 或 BF162 2 倍吞吐量 每个 SM 通过使用 4 个特殊函数单元(Special Function Unit,SFU)单元进行超越函数和插值函数计算。03. Hopper 的张量核心与 Transformer 引擎 在 GPU 中,张量核心是用于矩阵乘法和矩阵累加 (Matrix Multiply-Accumulate,MMA) 数学运算的专用高性能计算核心,可为 AI 和 HPC 应用程序提供突破性的性能加速。 张量核心是 GPU 中做 AI 加速的关键模块,也是 Ampere 及之后 GPU 架构与早期 GPU 的显著区别所在。 Hopper 的张量核心支持 FP8、FP16、BF16、TF32、FP64 和 INT8 MMA 数据类型。这一代张量核心的关键点是引入了 Transformer 引擎。 ▲ H100 FP16 Tensor Core 的吞吐量是 A100 FP16 Tensor Core 的 3 倍 Transformer 算子是主流的 BERT 到 GPT-3 等 NLP 模型的基础,且越来越多地应用于计算机视觉、蛋白质结构预测等不同领域。 与上一代 A100 相比,新的 Transformer 引擎与 Hopper FP8 张量核心相结合,在大型 NLP 模型上提供高达 9 倍的 AI 训练速度和 30 倍的 AI 推理速度。 ▲ 新的 Transformer 引擎动态调整数据格式以充分运用算力 为了提升 Transformer 的计算效率,在这一新的 Transformer 引擎中使用了混合精度,在计算过程中智能地管理计算精度,在 Transformer 计算的每一层,根据下一层神经网络层及所需的精度,在 FP8 和其他浮点格式中进行动态格式转换,充分运用张量核心的算力。04. 张量存储加速器与异步执行 Hopper 架构中新增加了张量存储加速器 (Tensor Memory Accelerator,TMA) ,以提高张量核心与全局存储和共享存储的数据交换效率。 在这一新的 TMA 操作中,使用张量维度和块坐标指定数据传输,而不是简单的按数据地址直接寻址。TMA 通过支持不同的张量布局(1D-5D 张量)、不同的存储访问模式、显著降低了寻址开销并提高了效率。 也就是说,原来是一个一个的捡豆子(数据),现在的方法就是一碗一碗的舀豆子。这样的设计,是不是越来越接近 DSA 的寻址方式? ▲ TMA 的块坐标寻址方式 当然,TMA 操作是异步的,多个线程可以共享数据通道,排序完成数据传输。 TMA 的一个关键优势是它可以在进行数据复制的时候,释放线程的算力来执行其他工作。 例如,在 A100 上,由线程本身负责生成所有地址执行所有数据复制操作。但在 Hopper 中,TMA 来负责生成地址序列(这个思路类似 DMA 控制器),接管数据复制任务,让线程去做其他事。 ▲ Hopper 架构的 H100 的基于 TMA 的存储复制效率更高05. 结语:GPU 走向领域专用化 总体而言,基于 Hopper 架构的 H100 计算性能比 Ampere 架构的 A100 提高了大约 6 倍。 性能大幅提升的核心原因在于引入 FP8 后的张量核心和针对 NLP 任务的 Transformer 引擎,特别是 TMA 技术减少了 SM 单元在数据复制时的无用功。 从设计哲学上看,针对数据中心的 Hopper 架构中 DSA(Domain Specific Architecture,特定领域架构)的想法越来越多,且流多处理器间的协作变多。大概老黄也觉得,GPU 应朝着领域专用化的方向去发展。 今年发布 Hopper 架构相对 Ampere 架构有较多的微观进步,希望老黄下次能给我们带来更多的技术惊喜。 参考文献:《NVIDIA H100 Tensor Core GPU Architecture》白皮书,英伟达;《GPGPU 芯片设计:原理与实践》,陈巍、耿云川