1. 现代机器学习 GPU(例如 H100、B200)的抽象架构是怎样的?它与 TPU 有何相似之处和不同之处?
现代机器学习 GPU(例如 H100、B200)在抽象上由大量专门用于矩阵乘法计算的核心(称为 流式多处理器,SM)组成,这些核心连接到高速存储器(称为 高带宽存储器,HBM)。每个 SM 都包含一个专用的矩阵乘法核心(Tensor Core),一个向量算术单元(Warp Scheduler),以及一个快速片上缓存(SMEM)。
与 TPU 相比,GPU 的架构在以下方面既有相似之处也有不同之处:
- 相似性:GPU 的基本布局与 TPU 类似,都包含处理矩阵运算的核心和快速内存。GPU 的 Tensor Core 类似于 TPU 的 MXU(矩阵乘法单元),而 Warp Scheduler 和 CUDA Cores 类似于 TPU 的 VPU(向量处理单元)。SMEM 类似于 TPU 的 VMEM。
- 模块化和独立性:一个现代 GPU 拥有超过 100 个 SM(H100 有 132 个,B200 有 148 个),每个 SM 相对独立,可以同时执行数百个不同的任务。相比之下,TPU 最多只有 2 个独立的“Tensor Core”,每个 Tensor Core 包含 4 个大型 VPU。这种更高的模块化使得 GPU 在通用性方面更具优势,因为它能更灵活地处理各种工作负载,而无需像 TPU 那样高度依赖编译器进行调度。
- 灵活性与性能权衡:GPU 的 CUDA Cores 采用 SIMT(单指令多线程)编程模型,每个线程拥有独立的指令指针,可以独立编程,这提供了更大的灵活性。然而,如果线程(warp)频繁发散,这也会导致性能下降。相比之下,TPU 的 SIMD(单指令多数据)模型虽然更不灵活,但由于其单线程控制和对 VPU 范围指令的支持,编译器能更好地进行流水线操作和内存调度,从而更容易实现接近理论峰值的性能。
- 缓存结构:TPU 通常拥有比 GPU 更大的快速缓存(VMEM),且延迟更低,这对于 LLM 推理等场景中快速加载和使用模型权重非常有利。GPU 的 L2 缓存虽然相对较大,但速度较慢且不受程序员控制,这可能导致一些“幽灵般的远程动作”,需要程序员精心调整内存访问模式以优化 L2 缓存的使用。
2. GPU 的内存层级结构是怎样的?不同世代 GPU 的关键性能参数有何演变?
GPU 拥有一套层次化的内存结构,从最大、最慢到最小、最快的依次是:
- HBM (High Bandwidth Memory):主 GPU 内存,用于存储模型权重、梯度、激活等。其容量和带宽在不同 GPU 世代中显著增加,例如从 Volta V100 的 32GB 增加到 Blackwell B200 的 192GB。HBM 带宽也从 H100 的 3.35TB/s 提升到 B200 的 9TB/s。
- L2 Cache (二级缓存):所有 SM 共享的较大缓存(H100 约为 50MB),用于减少对主内存的访问。它的大小与 TPU 的 VMEM 相似,但速度慢得多(H100 测得约 5.5TB/s,而 TPU VMEM 约为 40TB/s),且不受程序员控制。
- SMEM (Shared Memory / L1 Cache):每个 SM 拥有的 256KB 片上缓存,可由程序员控制作为共享内存,或由硬件用作片上缓存。用于存储激活和 Tensor Core 矩阵乘法的输入。
- Registers (寄存器):每个 SM 子分区拥有 16,384 个 32 位字的寄存器文件(H100/B200 上每个 SM 约 256KB),可供 CUDA Cores 访问,是最快的内存。
- TMEM (Tensor Memory):Blackwell (B200) 引入的新内存空间(每个 SM 256KB),用于喂给日益庞大的 Tensor Cores,因为它们的输入不再能完全放入 SMEM。
关键性能参数演变(bf16/fp16 FLOPs/s/chip):
从 V100 到 B200,我们可以看到 HBM 带宽和 Tensor Core 的浮点运算能力(FLOPs/s)都呈现爆炸式增长,尤其是在低精度(fp8/int8/fp4)计算方面,吞吐量往往是 fp16 的两倍甚至更多。
3. GPU 集群的网络拓扑结构是怎样的?与 TPU 的 2D/3D torus 拓扑相比,GPU 网络有何特点?
GPU 集群采用传统的分层树形交换网络,这与 TPU 的 2D 或 3D torus 拓扑结构有显著区别。
GPU 网络结构特点:
- 节点(Node):最基本的单位,通常由 8 个 GPU 组成(GB200 可以达到 72 个)。这些 GPU 通过高速 NVLink 互连(例如 H100 每个 NVLink 链路有 25GB/s 的全双工带宽),并通过 NVSwitches 实现全互连、低延迟的通信。在一个 H100 节点内,GPU 间的总带宽高达 450GB/s。
- 可伸缩单元(Scalable Unit, SU):由多个节点组成,通常是一个机架或一部分机架。例如,一个 H100 SU 包含 32 个节点(256 个 GPU),通过 InfiniBand (IB) 或以太网网络连接。每个 GPU 连接一个 NIC (Network Interface Card) 到 InfiniBand 网络。
- SuperPod:由多个 SU 组成,是更大的 GPU 集群。SuperPod 通过多层 InfiniBand 交换机连接各个 SU,形成 fat tree 拓扑结构,旨在提供节点间全双工的二分带宽。例如,一个 1024 个 H100 GPU 的 DGX SuperPod 包含 4 个 SU,通过 16 个脊柱 (spine) IB 交换机连接。节点间通信带宽通常为 400GB/s。
- GB200 NVL72:新一代系统大幅增加了节点规模,将 72 个 GPU 组合在一个 NVLink 域内,并将 GPU 到 GPU 的带宽提升到 900GB/s,同时将节点出口带宽提升到 3.6TB/s,显著改变了跨节点通信的性能特征。
与 TPU 网络的比较:
- 互连方式:TPU 采用 2D 或 3D torus 拓扑,每个 TPU 仅与其相邻的 TPU 连接。这意味着消息需要在多个 TPU 之间跳转,但可以扩展到任意大的 TPU “Pod”,且每个 TPU 的连接数是恒定的,带宽不会随规模增加而下降。GPU 则使用分层交换网络,层级越多,延迟和网络设备成本越高。
- 通用性与特定性:GPU 的传统树形网络更具通用性,能适应各种通信模式,但管理和扩展成本较高。TPU 的 torus 拓扑更适合大规模、规则的并行计算模式(如集体通信),能提供更高的点对点带宽,但在非均匀通信模式下可能效率较低。
- 带宽特性:在 GPU 节点内部,NVLink 提供极高的全互连带宽。但跨节点通信时,虽然 fat tree 拓扑保证了节点间的全二分带宽,但相比 TPU 的原生更高点对点带宽,GPU 跨节点通信的有效带宽会下降。例如,H100 节点内部 GPU 间带宽是 450GB/s,而节点间带宽是 400GB/s。TPU v5p 每个链接的出口带宽约为 90GB/s,沿所有轴的出口带宽总和达到 540GB/s,并且可以扩展到更大的规模。
4. 在 GPU 上扩展大型语言模型(LLMs)时,常见的并行策略有哪些?它们各自的通信-计算瓶颈是什么?
扩展 LLM 的主要并行策略包括数据并行、张量并行、流水线并行和专家并行,每种策略都有其特定的通信-计算权衡:
- 数据并行 (Data Parallelism, DP) / FSDP (ZeRO):
- 原理:模型权重复制到每个设备,不同设备处理不同批次的输入数据。反向传播时需要对梯度进行 AllReduce。FSDP (Fully Sharded Data Parallelism) 和 ZeRO 通过分片权重、优化器状态和梯度来减少内存占用,但需要额外的通信。
- 通信-计算瓶颈:主要发生在反向传播时梯度的 AllReduce 或 ReduceScatter + AllGather。
- H100 上的限制:在 H100 上,纯数据并行或 FSDP (不使用网络内归约) 要求每 GPU 的令牌批次大小达到约 2500 才能保持计算绑定。对于 MoE 模型,此要求会乘以 $E/k$ (总专家数 / 激活专家数),导致非常高的批次大小要求。
- 张量并行 (Tensor Parallelism, TP):
- 原理:将模型权重(例如矩阵乘法的维度)在多个设备上分片。在前向传播和反向传播中,不同设备负责计算矩阵的不同部分,之后需要进行 AllGather 和 ReduceScatter 来同步激活值或梯度。
- 通信-计算瓶颈:主要体现在激活值的 AllGather 和 ReduceScatter。
- H100 上的限制:H100 上,张量并行通常只能在节点内部(8 路)或最多跨两个节点(16 路)进行,再多就会受限于带宽而变为通信绑定。
- 专家并行 (Expert Parallelism, EP):
- 原理:主要用于 Mixture of Experts (MoE) 模型。将不同的专家分片到不同的设备上。每个令牌只激活少数专家,需要通过 AllToAll 操作将令牌路由到其对应的专家设备上。
- 通信-计算瓶颈:主要是 AllToAll 操作的成本,尤其是在跨节点进行时。
- H100 上的限制:如果模型隐藏层维度 F 较小,专家并行可能只能跨 1-2 个节点;如果 F 很大,则可以进行大规模的跨节点专家并行。
- 流水线并行 (Pipeline Parallelism, PP):
- 原理:将模型的不同层分发到不同的设备组(阶段)。每个阶段只负责处理其分配到的层。数据以微批次(microbatches)的形式在阶段间传递。
- 通信-计算瓶颈:通信成本通常非常小,因为只需要在阶段之间传递激活值。主要的挑战是“流水线气泡”(设备空闲时间)和实现零气泡调度的复杂性。
- 优点:从通信角度看,流水线并行几乎是“免费”的。它可以显著降低数据并行所需的批次大小,因为它将数据并行所需的 AllReduce/AllGather 操作分摊到更多的设备上。
- 缺点:代码实现复杂,尤其是在零气泡调度下。与 FSDP/ZeRO-3 不兼容,因为后者需要在每个微批次上 AllGather 权重。在反向传播中,数据并行操作无法完全重叠,导致非重叠通信时间。
总体策略: 通常需要结合多种并行策略来最大限度地利用 GPU 资源。例如,将张量并行限制在节点内部以利用高速 NVLink,将流水线并行用于跨节点减少数据并行的成本,并根据模型稀疏性选择专家并行。
5. NVIDIA SHARP 技术如何影响 GPU 上的集体通信,尤其是在 AllReduce 操作中?为什么它在实践中的收益低于理论预期?
NVIDIA SHARP (Scalable Hierarchical Aggregation and Reduction Protocol) 是一种在 Hopper 世代及之后的 NVIDIA 交换机上支持的“网络内归约”技术。
- 工作原理:SHARP 允许网络交换机本身执行归约操作,而不仅仅是简单地转发数据。这意味着在进行 AllReduce 时,GPU 可以将数据发送到顶级交换机,交换机在网络中完成部分或全部归约,然后将结果广播回各个 GPU,从而减少了数据在网络中传输的总量以及数据在 GPU 之间往返的次数。理论上,这应该可以将 AllReduce 的通信成本减半。
- 实践收益与理论预期的差异:尽管理论上 SHARP 可以将 AllReduce 的成本降低近 50%(使带宽翻倍),但在实际测量中,SHARP 带来的性能提升通常只有约 30%。例如,在 H100 节点内,启用 SHARP 后,AllReduce 的有效集体带宽从约 370GB/s 提升到约 480GB/s,远未达到理论上的 740GB/s(2 * 370GB/s)。
- 原因推测:
- 硬件实现限制:可能交换机内部归约的实际延迟和吞吐量并未达到理想状态。
- 软件开销:NCCL 库在利用 SHARP 时可能存在一些协议或调度开销,导致无法完全发挥硬件潜力。
- LLM 工作负载特性:对于 LLM 训练而言,纯粹的 AllReduce 相对较少,更常见的是 ReduceScatter 和 AllGather 组合。SHARP 主要优化 AllReduce,因此在整体训练流程中的影响可能不如预期。
- 通信模式复杂性:实际的通信模式可能比简单的理论模型更复杂,导致 SHARP 无法在所有情况下提供最佳性能。
尽管如此,SHARP 仍然是提升集体通信效率的重要技术,尤其对于那些需要频繁进行大规模 AllReduce 操作的工作负载。然而,由于 LLM 中纯 AllReduce 并不常见,其实用价值有时会受限。
6. GB200/NVL72 系统对 GPU 集群的扩展性和屋脊线(Roofline)模型有何影响?
GB200/NVL72 系统引入了多项重大改进,对 GPU 集群的扩展性和屋脊线模型产生了显著影响:
- 更大的 NVLink 域(节点):B200 GPU 本身仍可用于 8 GPU 节点,但 GB200 系统(结合 B200 GPU 和 Grace CPU)引入了更大的 NVLink 域,例如 NVL72 包含 72 个 GPU。这意味着单个逻辑“节点”内的 GPU 数量大大增加,从而在更广的范围内实现低延迟、全互连的 NVLink 通信。
- 更高的 GPU-GPU 带宽:NVLink 5.0 将单条 NVLink 的带宽翻倍到 50GB/s。这使得 GB200 NVL72 节点内 GPU 到 GPU 的带宽达到 900GB/s,比 H100 节点的 450GB/s 提升了一倍。
- 更高的节点出口带宽:GB200 NVL72 的节点出口带宽大幅增加,例如从 H100 的 400GB/s 提升到 3.6TB/s。这意味着跨节点通信的瓶颈显著缓解。
- 对屋脊线模型的影响:
- 节点内部计算-通信平衡:尽管 GPU 间的带宽翻倍,但 B200 的总 FLOPs/s 也相应增加(比 H100 增加约 2.25 倍),因此在节点内部,计算密集度(Compute Intensity)的临界值变化不大。这意味着在节点内部,Tensor Parallelism 等并行策略的计算-通信瓶颈可能依然存在,但由于带宽更高,通信成为瓶颈的边缘被推迟了,使得大型模型在节点内部的 Tensor Parallelism 更容易实现。
- 跨节点通信-计算平衡:这是最大的变化。由于节点出口带宽大幅提升(9 倍),过去在 H100 上容易成为瓶颈的跨节点通信(如数据并行、跨节点专家并行)现在有了更大的裕度。例如,数据并行所需的每 GPU 令牌批次大小将不再受限于较低的跨节点带宽,而是可能反过来受限于节点内部带宽。这使得在保持计算绑定的前提下,可以进行更大规模的跨节点并行。
- Grace CPU 集成:GH200 和 GB200 系统将 Grace CPU 与 GPU 通过 NVLink C2C 全带宽连接。这提供了极高的 CPU 到 GPU 内存带宽,对于需要将参数卸载到主机 RAM 的工作负载(如深度学习中的一些内存优化策略)非常有利。
总而言之,GB200/NVL72 大幅提升了 GPU 集群的节点内和节点间通信能力,使得更大规模的模型和更复杂的并行策略能够更有效地运行,并改变了在不同并行策略下计算与通信瓶颈的相对重要性。
7. 结合 LLaMA-3 和 DeepSeek V3 的训练案例,分析在实际 LLM 训练中如何选择并行策略以达到高性能和内存效率?
LLaMA-3 和 DeepSeek V3 的训练案例展示了在实际 LLM 训练中,如何根据模型特性和可用硬件资源选择和组合并行策略,以实现高性能和内存效率:
- LLaMA-3 70B (稠密模型):
- 背景:在 16k H100 GPU 上训练,稠密模型。
- 并行策略:
- 8 路张量并行 (TP):在节点内部进行,充分利用 H100 节点内 450GB/s 的高速 NVLink 带宽,将模型权重分片,减少单 GPU 内存占用。由于 8xH100 节点就是 8 路 TP 的理想配置,这使得 TP 成为计算绑定而不是通信绑定。
- 16 路流水线并行 (PP):跨节点进行,将模型层级分片到 16 个阶段。PP 的通信成本极低,且能有效减少数据并行所需的批次大小,因为它可以将数据并行的 AllReduce 操作分散到更多的设备上。这对于内存紧张的场景非常有益。
- 128 路 ZeRO-1 数据并行 (DP):最外层的并行,处理不同批次的输入数据。由于有 16 路 PP 的加持,数据并行的通信成本被显著分摊。选择 ZeRO-1 而非 ZeRO-3 可能是为了避免与流水线并行在内存管理上的冲突(ZeRO-3 要求在每个流水线阶段 AllGather 权重)。
- 结果分析:结合 8 路 TP 和 16 路 PP,模型并行度达到 128 (8x16),这意味着最终的数据并行只需要在 128 个 GPU 上进行。对于 4M tokens 的批次大小和 16k GPU,每 GPU 批次大小约为 250 令牌,这对于纯 DP 来说是非常低的。但由于 PP 显著降低了 AllReduce 的有效通信成本,使之能够保持计算绑定。
- DeepSeek V3 (MoE 模型):
- 背景:在 2048 个 H800 GPU 上训练(H800 的带宽低于 H100,约 300GB/s),稀疏 MoE 模型 (k=8, E=256)。
- 并行策略:
- 64 路专家并行 (EP):跨 8 个节点进行,将稀疏模型中的大量专家分布到不同的 GPU 上。对于 MoE 模型,EP 是核心的内存和计算优化手段。
- 16 路流水线并行 (PP):与 LLaMA-3 类似,用于跨节点分担模型层级,降低通信成本。
- 2 路 ZeRO-1 数据并行 (DP):最外层的数据并行。尽管批次大小很大(每 GPU 30k 令牌),但由于 MoE 模型 $E/k$ 的特性,其等效的计算绑定批次大小要求更高。
- 结果分析:64 路 EP 和 16 路 PP 实现了 1024 路的总模型并行度。2 路 DP 虽然并行度低,但由于跨多节点模型并行,最终的数据并行归约的通信成本被显著降低,使得整体训练能够保持计算绑定。此外,2 路数据并行在通信成本上受益于 $(X-1)/X$ 的因子,使得临界批次大小减半。
总结 LLM 扩展的经验法则:
- 小规模稠密模型:如果批次大小足够大,积极的 FSDP 效果很好,必要时可结合少量流水线并行或张量并行。
- 大规模稠密模型:通常采用 1-2 节点张量并行 (利用节点内高带宽) + 多节点流水线并行 + 纯数据并行的组合。流水线并行能显著降低数据并行的通信成本,但实现复杂。
- MoE 模型:除了上述策略,还可以使用专家并行。如果模型隐藏层维度 $F$ 足够大($F > 8 \cdot C / W_{\text{node}}$),可以进行大量跨节点专家并行;否则,通常限制在 2 节点左右的专家并行。
- 内存优化:在并行策略的选择中,内存效率同样重要。ZeRO-1/3 用于分片优化器状态、梯度和权重以适应有限的 GPU 内存。流水线并行虽然通信成本低,但通常与 ZeRO-3 冲突,而与 ZeRO-1 配合较好。
- 批次大小与计算绑定:GPU 上的数据并行需要每 GPU 约 2500 令牌的较大本地批次才能保持计算绑定。通过多轴模型并行(TP/PP/EP)可以将数据并行分散到更多设备上,有效降低单 GPU 批次大小要求。
- 延迟开销:尽管理论带宽很高,但实际操作中仍需注意集体通信的延迟开销,这使得即使在理论上通信成本很低的情况下,也会倾向于将 TP 或 EP 限制在较小的节点范围内,以最小化实际运行时间。
最终,选择最佳并行策略是一个复杂的优化问题,需要综合考虑模型大小、结构(稠密/稀疏)、可用的 GPU 数量、网络拓扑、批次大小以及对代码复杂度的接受程度。