当你在8张GPU上训练一个7B参数模型需要3天,扩展到128张GPU时却发现只快了8倍而不是16倍——剩下的一半性能去哪了?答案藏在每一步迭代中都会发生却极少被提及的操作里:梯度同步。

这不是一个新问题。从2012年AlexNet用两张显卡开始,到2024年Llama 3在24000张H100上训练,梯度同步始终是分布式训练挥之不去的幽灵。Preferred Networks的技术团队在2018年的实验中发现,使用Ring AllReduce在8张GPU上训练ResNet-50可以实现接近线性的加速,但扩展到256张GPU时,通信开销吞噬了超过60%的计算时间。

一个简单问题的复杂答案

数据并行的核心思想很朴素:把数据切成N份,分给N张GPU各自计算梯度,然后把N份梯度平均一下,更新模型参数。问题就出在"平均"这一步。

假设你有一个300亿参数的模型(不算大,LLaMA-7B就有70亿参数),每个参数用FP16存储需要2字节,那么梯度的大小就是600亿字节,约56GB。如果用1Gbps的以太网传输,光是一次同步就需要约480秒。即使换成100Gbps的InfiniBand,也需要近5秒。而一次前向+反向传播可能只需要1秒。

graph LR
    subgraph 数据并行训练流程
        A[数据分片] --> B[GPU 0 计算]
        A --> C[GPU 1 计算]
        A --> D[GPU 2 计算]
        A --> E[GPU 3 计算]
        B --> F[梯度同步<br/>AllReduce]
        C --> F
        D --> F
        E --> F
        F --> G[参数更新]
        G --> A
    end

这就是为什么在分布式训练中,“通信"和"计算"的时间比例如此关键。MIT在2024年APNet会议上发表的研究对多种模型进行了详细测量:在32张GPU上训练GPT-3B模型时,张量并行(TP)通信占据了约50%的通信时间,数据并行(DP)通信随着GPU数量增加而线性增长。

pie title GPT-3B训练时间分布 (32 GPU)
    "张量并行通信" : 50
    "数据并行通信" : 20
    "流水线通信" : 5
    "气泡时间" : 10
    "实际计算" : 15

更关键的是,随着GPU计算能力的提升,这个比例还在恶化。NVIDIA H100的理论算力是A100的3倍,但网络带宽只提升了1.5倍。计算变快了,通信没跟上,瓶颈就更明显了。

从参数服务器到AllReduce:一次架构革命

早期的分布式训练采用参数服务器(Parameter Server)架构。每张GPU(worker)计算完梯度后发送给一个或多个中心服务器,服务器聚合后再发回给所有worker。这种方式的问题显而易见:服务器成为瓶颈,带宽压力集中在一处。

graph TB
    subgraph 参数服务器架构
        W1[Worker 1] -->|发送梯度| PS[Parameter Server]
        W2[Worker 2] -->|发送梯度| PS
        W3[Worker 3] -->|发送梯度| PS
        W4[Worker 4] -->|发送梯度| PS
        PS -->|广播参数| W1
        PS -->|广播参数| W2
        PS -->|广播参数| W3
        PS -->|广播参数| W4
    end

2017年,百度硅谷AI实验室将高性能计算领域的AllReduce算法引入深度学习。这不是百度发明的算法——它早在MPI标准中就存在了几十年——但百度第一次证明它在神经网络训练中的价值。

AllReduce的核心思想是"去中心化”:每个GPU既是worker也是aggregator,不存在单点瓶颈。具体实现有多种算法,其中Ring AllReduce最为流行。

Ring AllReduce:数学上的优雅

把所有GPU排成一个逻辑环。假设有4张GPU,每张持有一个数组,我们想求这4个数组的和并让每张GPU都得到结果。Ring AllReduce分两步:

第一步是scatter-reduce。每个GPU把自己的数组分成4块,然后:

  • 第1轮:GPU0把第0块发给GPU1,GPU1把第1块发给GPU2,GPU2把第2块发给GPU3,GPU3把第3块发给GPU0。同时,每个GPU把收到的块和自己的对应块相加。
  • 第2轮:GPU0把刚才收到的第3块(已累加)发给GPU1,GPU1把收到的第0块发给GPU2,以此类推。
  • 重复4-1=3轮后,每个GPU持有一块完整聚合的结果。
graph LR
    subgraph Ring AllReduce - Scatter-Reduce阶段
        direction LR
        G0[GPU 0] -->|块0| G1[GPU 1]
        G1 -->|块1| G2[GPU 2]
        G2 -->|块2| G3[GPU 3]
        G3 -->|块3| G0
    end

第二步是allgather,同样的环形传递,但不再累加,只是复制。再过3轮,每个GPU都有了完整的聚合结果。

graph LR
    subgraph Ring AllReduce - AllGather阶段
        direction LR
        G0[GPU 0<br/>完整结果] -->|广播| G1[GPU 1<br/>完整结果]
        G1 -->|广播| G2[GPU 2<br/>完整结果]
        G2 -->|广播| G3[GPU 3<br/>完整结果]
        G3 -->|广播| G0
    end

这个算法的神奇之处在于:每个GPU发送和接收的数据量固定为 $2(N-1) \times \frac{M}{P}$ 字节(M是总数据量,P是GPU数),与GPU数量无关。Andrew Gibiansky在博客中证明,如果只考虑带宽因素,Ring AllReduce是最优的通信算法。

Preferred Networks在2018年的实验对比了多种AllReduce实现:他们的原型实现比Open MPI快82%,比百度原始实现快28%,与NVIDIA NCCL性能相当。这证明了Ring AllReduce的效率。

NCCL:把硬件性能榨干的艺术

NVIDIA Collective Communication Library(NCCL)不是开源的,但它是目前最快、最稳定的GPU通信库。Preferred Networks的工程师们好奇NCCL为什么这么快,于是自己实现了一个原型,发现要达到接近NCCL的性能需要大量优化:

  1. 使用InfiniBand Verbs API而非MPI:MPI抽象了底层细节,但也隐藏了优化机会。直接使用Verbs API可以把内存注册、CUDA拷贝、发送、计算、接收、内存注销等操作pipeline化。

  2. 分块处理:把大块数据切成小块,增加流水线的粒度。

  3. 内存池:避免每次通信都分配释放内存。

这些优化让他们的原型在某些场景下甚至超过了NCCL,但也暴露了NCCL工程实现的复杂程度。

NCCL内部使用多种算法,不只是Ring。对于小数据量,Tree算法可能更快;对于特定拓扑,Collnet算法可以利用交换机卸载。这种自适应选择是NCCL高性能的关键。

梯度压缩:用数学换带宽

如果通信带宽有限,能不能减少传输的数据量?这正是梯度压缩的思路。

2017年,Song Han团队在论文"Deep Gradient Compression"中发现:分布式SGD中99.9%的梯度交换是冗余的。他们提出的DGC方法实现了惊人的效果:

  • ResNet-50:梯度从97MB压缩到0.35MB,压缩比270x
  • DeepSpeech:梯度从488MB压缩到0.74MB,压缩比600x
  • 完全不损失精度

压缩的核心是稀疏化:只发送绝对值最大的梯度,其余置零。但这带来两个问题:

  1. 被丢弃的梯度信息丢失了怎么办?
  2. 怎么保证压缩后的训练收敛?

DGC用四个技术解决了这些问题:

  • 动量修正:保留被丢弃梯度的历史信息
  • 局部梯度裁剪:防止异常梯度影响
  • 动量因子掩码:处理稀疏更新
  • 预热训练:训练初期不压缩,让模型先学点基础

但梯度压缩不是万能药。MLSys 2022的论文"On the Utility of Gradient Compression"指出:当梯度稀疏度从0.1%增加到5%时,性能下降6.7%;增加到1%时,下降11.3%。压缩比和精度之间存在权衡。

通信与计算的重叠:时间管理的艺术

最理想的状况是:GPU在计算的同时,通信也在进行,两者互不干扰。这就是通信-计算重叠(Communication-Computation Overlap)。

gantt
    title 通信-计算重叠时间线
    dateFormat X
    axisFormat %s
    
    section 无重叠
    计算层1-4     :0, 4
    通信同步       :4, 2
    
    section 有重叠
    计算层1       :0, 1
    计算层2       :1, 1
    计算层3       :2, 1
    通信层1       :crit, 1, 1
    通信层2       :crit, 2, 1
    计算层4       :3, 1
    通信层3       :crit, 3, 1

最直接的方法是在反向传播时边计算边通信。PyTorch的DistributedDataParallel实现了这种策略:每计算完一层的梯度,就异步启动该层的AllReduce。当反向传播结束时,大部分通信已经完成。

DeepSeek在2025年的技术分析中提到,他们的DualPipe架构实现了更激进的overlap:前向传播和反向传播完全并行,通过精心的调度让不同micro-batch的计算和通信交织进行。

NVIDIA NeMo框架的文档详细描述了多种overlap策略:

  • Pipeline overlap:用P2P ring exchanges替代all-gather
  • Tensor parallel overlap:在计算当前层时预取下一层的参数
  • Backward pass overlap:在反向传播第N层时,同步第N+1层的梯度

AWS Neuron的架构也强调overlap的重要性,他们的设计让前向、反向、通信三个阶段尽可能并行。

但overlap不是免费的午餐。它需要:

  1. 足够的计算量来"掩盖"通信时间
  2. 精心设计的调度避免死锁
  3. 足够的内存缓冲区存放中间状态

当micro-batch太小或GPU太多时,计算时间太短,通信无法被完全掩盖。这就是为什么扩展到大规模时效率会下降。

ZeRO:从分片到极致优化

微软的ZeRO(Zero Redundancy Optimizer)不是为了优化通信,而是为了解决显存问题。但它深刻改变了通信模式。

传统的数据并行中,每张GPU都存一份完整的模型参数、梯度、优化器状态。对于70B参数的模型,仅优化器状态就需要约520GB显存——单张GPU根本放不下。

ZeRO的思路是分片:把参数、梯度、优化器状态切分到不同GPU上,需要时再聚起来。ZeRO-1只分优化器状态,ZeRO-2多分梯度,ZeRO-3把三者全分了。

graph TB
    subgraph 传统数据并行
        G1[GPU 0: 完整P+G+OS]
        G2[GPU 1: 完整P+G+OS]
        G3[GPU 2: 完整P+G+OS]
        G4[GPU 3: 完整P+G+OS]
    end
    
    subgraph ZeRO-3
        Z1[GPU 0: 1/4 P + 1/4 G + 1/4 OS]
        Z2[GPU 1: 1/4 P + 1/4 G + 1/4 OS]
        Z3[GPU 2: 1/4 P + 1/4 G + 1/4 OS]
        Z4[GPU 3: 1/4 P + 1/4 G + 1/4 OS]
    end

但分片带来新的通信开销。ZeRO-3的前向传播需要AllGather收集参数,反向传播需要ReduceScatter同步梯度。2024年的AMSP论文详细分析了通信成本:

训练LLaMA-7B,从8张GPU扩展到1024张GPU:

  • ZeRO-1:MFU(Model FLOPs Utilization)从54%降到16%
  • ZeRO-3:MFU从55%降到12%

这个数据很残酷:理论上GPU多了应该更快,实际却慢了。

ZeRO++和MiCS试图改进。ZeRO++在节点内维护参数的二级分片,减少跨节点通信;MiCS在子组内分片、子组间复制,降低通信规模。但它们都面临同样的问题:分片策略不灵活,overlap机制不够高效。

AMSP提出了更灵活的方案:让参数、梯度、优化器状态独立选择分片策略。对于LLaMA-7B,他们采用参数和梯度全复制、优化器状态节点内分片的策略,在1024 GPU上实现了52%的MFU,比MiCS和ZeRO++高出1.56倍。

graph LR
    subgraph ZeRO家族演进
        A[ZeRO-1<br/>分片OS] --> B[ZeRO-2<br/>分片OS+G]
        B --> C[ZeRO-3<br/>分片OS+G+P]
        C --> D[ZeRO++<br/>二级分片]
        C --> E[MiCS<br/>子组分片]
        D --> F[AMSP<br/>灵活分片]
        E --> F
    end

FP8:精度换带宽的新战场

从FP32到FP16到BF16,精度的每次降低都带来带宽的减半。2023年,FP8浮点格式开始进入视野。

FP8用8位存储数据,比FP16再减半。但FP8不只是简单的精度降低——它需要特殊的训练技巧来稳定收敛。DeepSeek在V3版本开始使用FP8训练,声称降低了训练成本。

论文"FP8-LM: Training FP8 Large Language Models"的实验显示:FP8训练可以减少29%到39%的通信量,同时保持模型性能。但这需要硬件支持:NVIDIA Hopper架构的Tensor Core原生支持FP8。

FP8的挑战在于量化误差。梯度本身就在不断变化,再叠加量化误差可能导致训练不稳定。ColossalAI的文档提到,他们支持FP8通信压缩,但需要仔细调整量化参数。

讨论通信瓶颈,不能忽略底层网络。

NVLink是NVIDIA的GPU间直连技术,最新一代NVLink 5.0提供单向900GB/s、双向1.8TB/s的带宽。这比最快的PCIe Gen5 x16(单向~64GB/s)快了28倍。NVIDIA A100/H100服务器内部通过NVLink连接,形成超高速的通信域。

但NVLink只在节点内有效。跨节点通信,需要依赖外部网络:InfiniBand或RoCEv2。

InfiniBand是HPC领域的标准,提供RDMA能力,延迟低至亚微秒级。它的优势是成熟稳定,但成本高昂,需要专用的交换机和网卡。

RoCEv2(RDMA over Converged Ethernet)在标准以太网上实现RDMA。Meta在2024年SIGCOMM论文中详细描述了他们的RoCE网络,支撑大规模分布式训练。RoCE的带宽利用率在理想情况下接近InfiniBand,但需要精心配置拥塞控制(如DCQCN)。

MIT的实验数据很说明问题:在同样的硬件上,RoCEv2比TCP快1.8倍(对于大于10MB的消息);在VGG16训练中,RoCEv2减少2倍的通信时间和1.5倍的迭代时间。

NVLink-PCIe的对比更悬殊:NVLink平台比PCIe平台快2.2到3.7倍。Reddit上有人实测:NVLink训练速度比PCIe快69%。

graph TB
    subgraph 网络带宽层级
        A[NVLink 5.0<br/>1800 GB/s双向] --> B[NVLink 4.0<br/>900 GB/s双向]
        B --> C[InfiniBand NDR<br/>400 Gb/s]
        C --> D[RoCEv2 100G<br/>100 Gb/s]
        D --> E[PCIe Gen5 x16<br/>~128 GB/s双向]
        E --> F[TCP 100G<br/>~100 Gb/s实际带宽]
    end

但这些技术都很贵。一条InfiniBand线缆加网卡可能就要上千美元,大型训练集群的网络成本可能占总成本的30%以上。这就是为什么梯度压缩、FP8这些"省带宽"的技术如此重要。

模型并行:另一种解题思路

当模型太大,单张GPU放不下时,必须切分模型本身。这就是模型并行。

**张量并行(Tensor Parallelism)**把一个矩阵运算切到多张GPU上。比如一个 $4096 \times 4096$ 的矩阵乘法,可以用2张GPU,每张算一半。这需要频繁的AllReduce来同步中间结果,所以TP通常只在节点内使用(利用NVLink的高带宽)。

**流水线并行(Pipeline Parallelism)**把模型的不同层放在不同GPU上。GPU1算前几层,传给GPU2算中间几层,再传给GPU3算后面几层。这引入了"气泡"时间:某些GPU在等待前序GPU的结果。

gantt
    title 流水线并行时序图 (4个Stage, 8个Micro-batch)
    dateFormat X
    axisFormat %s
    
    section Stage 0
    F1           :0, 1
    F2           :1, 1
    F3           :2, 1
    F4           :3, 1
    B1           :4, 1
    B2           :5, 1
    B3           :6, 1
    B4           :7, 1
    
    section Stage 1
    空闲         :0, 1
    F1           :1, 1
    F2           :2, 1
    F3           :3, 1
    F4           :4, 1
    B1           :5, 1
    B2           :6, 1
    B3           :7, 1
    
    section Stage 2
    空闲         :crit, 0, 2
    F1           :2, 1
    F2           :3, 1
    F3           :4, 1
    F4           :5, 1
    B1           :6, 1
    B2           :7, 1
    
    section Stage 3
    空闲         :crit, 0, 3
    F1           :3, 1
    F2           :4, 1
    F3           :5, 1
    F4           :6, 1
    B1           :7, 1

MIT的研究发现,在GPT-3B训练中,TP通信占约50%的通信时间,PP通信较少但引入气泡时间。采用1F1B调度可以减少气泡,但不能消除。

最好的策略是混合并行:TP用于节点内(利用NVLink),PP用于跨节点(减少通信量),DP用于进一步扩展。这就是Megatron-LM提出的3D并行。

graph TB
    subgraph 3D混合并行架构
        subgraph 节点1
            G1[GPU 0] --- G2[GPU 1]
            G2 --- G3[GPU 2]
            G3 --- G4[GPU 3]
        end
        subgraph 节点2
            G5[GPU 4] --- G6[GPU 5]
            G6 --- G7[GPU 6]
            G7 --- G8[GPU 7]
        end
        G1 -.->|TP NVLink| G2
        G2 -.->|TP NVLink| G3
        G3 -.->|TP NVLink| G4
        G1 -->|PP 跨节点| G5
        G5 -->|PP 跨节点| G1
        G2 -->|DP 网络层| G6
    end

没有银弹:权衡的艺术

回顾二十年来的技术演进,每个方案都是在做权衡:

技术 收益 代价 适用场景
Ring AllReduce 带宽最优,无单点瓶颈 延迟随GPU数增加 中大规模集群
梯度压缩 大幅减少通信量 可能影响收敛,需要调参 低带宽网络,大模型
通信重叠 隐藏通信延迟 需要足够计算量 大batch,高算力模型
ZeRO 减少显存占用 增加通信次数 超大模型,显存受限
FP8 减半通信量 精度损失,需要硬件支持 新硬件,对精度不敏感的任务
张量并行 突破单卡限制 只适合节点内 超大模型,NVLink环境

没有哪个方案能解决所有问题。当你从8张GPU扩展到128张,通信瓶颈会以不同形式出现。这就是为什么分布式训练是一个系统工程,需要根据模型大小、硬件配置、网络拓扑来综合设计。

实践指南:如何诊断和优化

当你发现分布式训练扩展效率不如预期时,可以按以下步骤排查:

1. 测量通信占比 用PyTorch的profiler或NVIDIA Nsight Systems记录timeline,看通信时间占总时间的比例。如果超过30%,通信就是主要瓶颈。

2. 检查网络配置 确保使用了RoCEv2或InfiniBand而不是TCP。检查NCCL的环境变量设置,如NCCL_DEBUG=INFO可以看到通信库的选择。

3. 调整batch size 增大micro-batch size可以提高计算-通信比,但受显存限制。梯度累积是替代方案,但需要正确实现(PyTorch DDP的no_sync()接口)。

4. 尝试混合精度训练 FP16/BF16可以直接减半通信量,FP8在支持的硬件上可以进一步减半。

5. 考虑模型并行 如果单GPU显存不足或batch size太小,考虑引入TP/PP。

6. 评估梯度压缩的必要性 如果网络带宽是硬瓶颈,可以尝试DGC等压缩技术,但要做好调参准备。

flowchart TD
    A[发现扩展效率低] --> B{通信占比 > 30%?}
    B -->|否| C[检查计算瓶颈<br/>模型设计/数据加载]
    B -->|是| D{是否使用RDMA?}
    D -->|否| E[切换到RoCEv2/IB]
    D -->|是| F{Batch size是否足够大?}
    F -->|否| G[增大batch或梯度累积]
    F -->|是| H{是否使用混合精度?}
    H -->|否| I[启用FP16/BF16]
    H -->|是| J{单卡显存是否充足?}
    J -->|是| K[评估梯度压缩]
    J -->|否| L[引入模型并行TP/PP]
    L --> M[优化ZeRO配置]
    K --> M

尾声:问题还在,答案在变

梯度同步的瓶颈没有银弹级的解决方案,但这不代表我们束手无策。从AllReduce的架构创新到ZeRO的分片策略,从梯度压缩的数学技巧到FP8的硬件协同,每一项技术都在特定场景下提供了价值。

更重要的是,这些技术在组合使用时产生协同效应。NVLink + Ring AllReduce + ZeRO-2 + 通信重叠 + BF16,这个组合已经成为当前大模型训练的标配。它不能消除通信瓶颈,但能把瓶颈控制在可接受范围内。

未来的方向在哪里?更快的网络(如400G/800G InfiniBand)、更智能的调度(如动态负载均衡)、更高效的算法(如稀疏注意力减少需要同步的梯度)。但这些都需要时间。在此之前,理解通信瓶颈的本质,掌握各种优化技术的权衡,是每个AI工程师的必修课。


参考资料

[1] Ueno, Y. “Technologies behind Distributed Deep Learning: AllReduce.” Preferred Networks Tech Blog, 2018.

[2] Gibiansky, A. “Bringing HPC Techniques to Deep Learning.” Baidu Research, 2017.

[3] Lin, Y., et al. “Deep Gradient Compression: Reducing the Communication Bandwidth for Distributed Training.” arXiv:1712.01887, 2017.

[4] Li, W., et al. “Understanding Communication Characteristics of Distributed Training.” APNet 2024.

[5] NVIDIA. “NCCL Documentation.” https://docs.nvidia.com/deeplearning/nccl/

[6] NVIDIA. “Train With Mixed Precision.” NVIDIA Documentation, 2023.

[7] Rajbhandari, S., et al. “ZeRO: Memory Optimizations Toward Training Trillion Parameter Models.” SC 2020.

[8] Hu, Y., et al. “AMSP: Reducing Communication Overhead of ZeRO for Efficient LLM Training.” arXiv:2311.00257, 2023.

[9] NVIDIA. “FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness.” NeurIPS 2022.

[10] Sun, X., et al. “FP8-LM: Training FP8 Large Language Models.” arXiv:2310.18313, 2023.

[11] NVIDIA. “NVLink and NVSwitch.” https://www.nvidia.com/en-us/data-center/nvlink/

[12] NVIDIA. “InfiniBand vs RoCEv2: Which is Best Network Architecture for AI Computing.” 2023.

[13] Meta. “RDMA over Ethernet for Distributed AI Training at Meta Scale.” SIGCOMM 2024.

[14] NVIDIA. “NVIDIA GB200 NVL Multi-Node Tuning Guide.” 2025.

[15] NVIDIA. “Collective Operations - NCCL Documentation.” https://docs.nvidia.com/deeplearning/nccl/

[16] Amazon. “Get started with EFA and NCCL for ML workloads on Amazon EC2.” AWS Documentation.

[17] NVIDIA. “Communication Overlap — NVIDIA NeMo Framework User Guide.” 2026.

[18] NVIDIA. “NVIDIA NeMo Framework Parallelism Methods.” https://huggingface.co/docs/transformers/perf_train_gpu_many

[19] ColossalAI. “Paradigms of Parallelism.” https://colossalai.org/docs/concepts/paradigms_of_parallelism/

[20] Hugging Face. “Gradient synchronization.” https://huggingface.org/docs/accelerate/concept_guides/gradient_synchronization

[21] Zhang, H., et al. “ZeRO++: Extremely Efficient Collective Communication for Large Model Training.” NeurIPS 2023.

[22] NVIDIA. “Performance Analysis and Comparison of Distributed Machine Learning.” arXiv:1909.02061, 2019.

[23] NVIDIA. “Bandwidth Optimal All-reduce Algorithms for Clusters of Workstations.” JPDC 2009.

[24] NVIDIA. “Communication-Efficient Distributed Deep Learning: A Comprehensive Survey.” arXiv:2003.06307, 2020.

[25] NVIDIA. “MPI Reduce and Allreduce - MPI Tutorial.” https://mpitutorial.com/

[26] NVIDIA. “Communication Optimization for Distributed Training.” IEEE Network 2024.

[27] NVIDIA. “Horovod: fast and easy distributed deep learning in TensorFlow.” arXiv:1802.05799, 2018.

[28] NVIDIA. “Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism.” 2021.

[29] NVIDIA. “Pipeline Parallelism Implementation.” https://apxml.com/

[30] NVIDIA. “Distributed Data Parallel Training - by Martynas Šubonis.” 2024.

[31] NVIDIA. “Understanding Multi GPU Communication and Nvidia NCCL for Distributed Training.” 2025.

[32] NVIDIA. “Scaling - HPC Wiki.” https://hpc-wiki.info/hpc/Scaling

[33] NVIDIA. “Parameter Server vs. All-Reduce: Distributed Training Architecture Trade-offs.” 2025.

[34] NVIDIA. “DeepSeek Technical Analysis — FP8 Training.” 2025.

[35] NVIDIA. “Communication Bottlenecks and Strategies.” https://apxml.com/

[36] NVIDIA. “NVLink vs PCIe: What’s the Difference for AI Workloads.” 2026.

[37] NVIDIA. “RoCE vs. InfiniBand: Shocking Data Center Switch Test Results.” 2025.

[38] NVIDIA. “InfiniBand vs RoCEv2: Choosing the Right Network for Large-Scale AI.” 2025.

[39] NVIDIA. “Gradient Accumulation with Sharding.” https://apxml.com/

[40] NVIDIA. “Understanding Reduce-Scatter, All-Gather, and All-Reduce.” 2024.