GPU 架构学习
第十四课:多 GPU 如何协同工作
这一课进入多 GPU 系统,先讲 PCIe、NVLink、NVSwitch,再讲数据并行、张量并行、流水线并行和 AllReduce,最后用 GB200 NVL72 串起来。
目录
一、为什么多块 GPU 不会自动获得线性加速二、多 GPU 系统中的互连层次三、PCIe 的作用四、经过 CPU 内存中转为什么较慢五、NVLink 是什么六、NVLink 不等于显存自动合并七、直接访问远端显存八、NVSwitch 是什么九、Scale-Up 和 Scale-OutScale-UpScale-Out十、NCCL 是什么十一、第一种并行方式:数据并行十二、数据并行的训练过程十三、All-Reduce 是什么十四、最简单的 All-Reduce 为什么低效十五、Ring All-Reduce十六、Reduce-Scatter十七、All-Gather十八、数据并行的优点十九、数据并行的通信量来自哪里二十、第二种并行方式:张量并行二十一、按输出列切分权重二十二、按输入行切分权重二十三、张量并行为什么通信频繁二十四、Transformer 中的张量并行二十五、第三种并行方式:流水线并行二十六、最朴素流水线为什么利用率低二十七、Micro-Batch 如何填充流水线二十八、Pipeline Bubble二十九、流水线并行传输什么三十、并行方式的比较三十一、为什么不同并行组应匹配不同网络层次三十二、计算与通信重叠三十三、梯度 Bucket三十四、通信延迟模型三十五、强扩展与弱扩展Strong Scaling:强扩展Weak Scaling:弱扩展三十六、扩展效率三十七、GPUDirect RDMA三十八、为什么网卡位置也重要三十九、All-to-All 为什么对 MoE 很重要四十、MoE 为什么可能负载不均衡四十一、GB200 Grace Blackwell Superchip四十二、GB200 NVL72 的组成四十三、NVL72 是否真的是“一块 GPU”四十四、为什么 NVL72 对大模型重要四十五、多 GPU 推理与训练的区别训练推理四十六、什么时候不应该使用更多 GPU四十七、分析多 GPU 性能的基本步骤本课核心结论第十五课:GPU 如何渲染一幅三维图像导语:这一课进入多 GPU 系统,先讲 PCIe、NVLink、NVSwitch,再讲数据并行、张量并行、流水线并行和 All-Reduce,最后用 GB200 NVL72 串起来。
单块 GPU 的资源始终有限,主要包括:
- Tensor Core 和 CUDA Core 数量有限;
- HBM/GDDR 容量有限;
- 单卡显存带宽有限;
- 单卡能够承载的模型规模有限。
当模型、数据或计算量超过单卡能力时,就需要把任务拆到多块 GPU 上。
多 GPU 系统的核心问题不只是“增加更多算力”,而是:
如何拆分计算、放置数据,并尽量减少 GPU 之间的通信。
一、为什么多块 GPU 不会自动获得线性加速
假设一块 GPU 完成任务需要 100 秒。
理论上,4 块 GPU 可以把计算时间降到:
但实际还需要进行:
- 输入数据分发;
- 梯度同步;
- 中间激活传输;
- 参数交换;
- GPU 之间等待;
- 任务调度和负载均衡。
实际时间可能是:
例如:
单 GPU:
计算 100 秒
4 GPU:
计算 25 秒
通信 10 秒
等待 5 秒
总计 40 秒
实际加速比为:
而不是理想的 4 倍。
因此,多 GPU 系统的主要矛盾是:
计算能力随 GPU 数量增加
与
通信和同步开销同时增加
二、多 GPU 系统中的互连层次
多 GPU 通信可能经过不同的互连:

图示:二、多 GPU 系统中的互连层次
它们解决的范围不同。
三、PCIe 的作用
PCIe 是 CPU、GPU、网卡和存储设备之间常见的通用高速互连。
典型结构为:

图示:三、PCIe 的作用
GPU 之间的数据可能:
- 直接通过 PCIe Peer-to-Peer 传输;
- 经过 PCIe Switch;
- 在不支持直接访问时经过主机内存中转。
CUDA 可以在支持 P2P 的设备间执行直接设备到设备传输,并在存在 NVLink 时利用相应硬件路径。
四、经过 CPU 内存中转为什么较慢
一种低效路径是:
GPU 0 显存
↓
CPU 主存
↓
GPU 1 显存
数据需要经过两次传输:
以及:
同时还会占用:
- PCIe 带宽;
- CPU 内存带宽;
- 主机缓冲区;
- 额外的软件调度。
直接 P2P 路径则是:
GPU 0 显存
↓
PCIe / NVLink
↓
GPU 1 显存
减少主机内存参与。
五、NVLink 是什么
NVLink 是 NVIDIA 面向 GPU、CPU 和加速系统设计的高速互连。
它主要用于 Scale-Up,即在一个服务器或一个机架级高速域内,把多块 GPU 紧密连接起来。
可以把 PCIe 和 NVLink 粗略区分为:
PCIe:
通用设备互连
NVLink:
针对高带宽 GPU 协作优化的互连
在支持的系统中,第五代 NVLink 可为单块 Blackwell GPU 提供最高约 1.8 TB/s 的双向 GPU 互连带宽。
这里的带宽是 GPU 间互连带宽,不是 HBM 显存带宽,两者不能混淆。
六、NVLink 不等于显存自动合并
假设两块 GPU:
GPU 0:192 GB HBM
GPU 1:192 GB HBM
通过 NVLink 连接后,并不意味着普通程序自动得到一个完全透明的 384 GB 单一显存。
逻辑上仍然通常是:
GPU 0
├── 自己的 SM
└── 自己的显存
GPU 1
├── 自己的 SM
└── 自己的显存
程序仍需要决定:
- 参数放在哪个 GPU;
- 激活放在哪个 GPU;
- 什么时候传输;
- 谁读取远程数据;
- 如何同步。
NVLink 提高的是 GPU 间访问和传输能力,不会替程序员或框架自动完成模型划分。
七、直接访问远端显存
在支持 Peer Access 的系统中,GPU 0 可以访问 GPU 1 的内存。
概念上:
// GPU 0 上的 Kernel
value = gpu1_memory[index];
数据路径可能是:
GPU 0 的 SM
↓
NVLink / PCIe
↓
GPU 1 的显存
但远端访问通常仍比访问本地 HBM 更昂贵。
所以设计多 GPU 算法时,通常希望:
大量数据在本地计算
+
较少且连续的跨 GPU 通信
而不是让每条计算指令都随机访问其他 GPU 的显存。
八、NVSwitch 是什么
如果只有两块 GPU,可以直接用 NVLink 连接。
当 GPU 数量增加时,完全点对点连接会变得困难:
理论上的两两连接数为:
GPU 数量越多,线缆、端口和路由复杂度迅速增加。
NVSwitch 类似于面向 NVLink 的交换结构:
GPU 0 ─┐
GPU 1 ─┤
GPU 2 ─┼── NVSwitch Fabric
GPU 3 ─┤
GPU 4 ─┘
它可以在多块 GPU 之间提供高带宽路径,使 GPU 不必全部直接两两布线。
九、Scale-Up 和 Scale-Out
多 GPU 扩展通常分成两个层次。
Scale-Up
在单机或机架级高速互连域内增加 GPU:
GPU
↕
NVLink / NVSwitch
↕
GPU
特点:
- 带宽较高;
- 延迟较低;
- 适合细粒度模型并行;
- GPU 之间通信较频繁。
Scale-Out
跨服务器、跨机架扩展:
服务器 0
│
InfiniBand / Ethernet
│
服务器 1
特点:
- 可以扩展到更多 GPU;
- 网络距离更长;
- 通信带宽通常更稀缺;
- 更需要减少通信频率和通信量。
GB200 NVL72 的 NVLink 域属于机架级 Scale-Up;更大规模集群则继续通过 InfiniBand 或以太网进行 Scale-Out。
十、NCCL 是什么
NCCL 是 NVIDIA 的多 GPU 集合通信库。
它提供的主要操作包括:
- All-Reduce;
- Reduce;
- Broadcast;
- All-Gather;
- Reduce-Scatter;
- All-to-All;
- 点对点 Send/Receive。
NCCL 会根据 GPU 拓扑和互连条件组织通信,并被深度学习框架广泛用于多 GPU 训练。
可以把 NCCL 类比成:
CUDA:
负责 GPU 上的计算
NCCL:
负责 GPU 之间的数据交换
十一、第一种并行方式:数据并行
数据并行是最容易理解、最常用的训练并行方式。
假设有4块 GPU。
每块 GPU 保存一份完整模型:
GPU 0:完整模型 + Batch 0
GPU 1:完整模型 + Batch 1
GPU 2:完整模型 + Batch 2
GPU 3:完整模型 + Batch 3
假设全局 Batch Size 为256,则可以拆成:
每块 GPU 处理64个样本。
数据并行是沿 Batch 维拆分计算。
十二、数据并行的训练过程
每块 GPU 独立完成:
前向传播
↓
计算本地 Loss
↓
反向传播
↓
得到本地梯度
此时,各 GPU 的梯度不同:
GPU 0:g₀
GPU 1:g₁
GPU 2:g₂
GPU 3:g₃
需要计算平均梯度:
然后所有 GPU 使用同一个 更新参数。
因此需要 All-Reduce。
十三、All-Reduce 是什么
All-Reduce 包含两个逻辑动作:
- Reduce:将各 GPU 的数据求和、求最大值或执行其他归约;
- Broadcast:把归约结果发回所有 GPU。
对于求和:
初始:
GPU 0:g₀
GPU 1:g₁
GPU 2:g₂
GPU 3:g₃
执行 All-Reduce 后:
GPU 0:g₀+g₁+g₂+g₃
GPU 1:g₀+g₁+g₂+g₃
GPU 2:g₀+g₁+g₂+g₃
GPU 3:g₀+g₁+g₂+g₃
NCCL 对 All-Reduce 的定义正是:每个参与 Rank 最终获得所有 Rank 输入的归约结果。
十四、最简单的 All-Reduce 为什么低效
一种朴素方案是选择 GPU 0 作为中心:
GPU 1 ─┐
GPU 2 ─┼→ GPU 0 求和
GPU 3 ─┘
↓
再发给所有 GPU
问题是 GPU 0 会成为热点:
- 接收所有数据;
- 完成归约;
- 再发送所有数据;
- 它的链路最拥塞。
当 GPU 数量增加时,中心节点压力越来越大。
因此实际系统通常采用 Ring、Tree 或更复杂的分层算法。
十五、Ring All-Reduce
假设4块 GPU 组成环:

图示:十五、Ring All-Reduce
大张量被切分成多个 Chunk。
Ring All-Reduce 通常可理解为两个阶段:
第一阶段:Reduce-Scatter
第二阶段:All-Gather
十六、Reduce-Scatter
假设梯度张量被分成4块:
A B C D
各 GPU 都有自己的版本:
GPU 0:A₀ B₀ C₀ D₀
GPU 1:A₁ B₁ C₁ D₁
GPU 2:A₂ B₂ C₂ D₂
GPU 3:A₃ B₃ C₃ D₃
通过环形传输和局部相加,最终:
GPU 0:得到某一块的完整归约结果
GPU 1:得到另一块的完整归约结果
GPU 2:得到另一块的完整归约结果
GPU 3:得到另一块的完整归约结果
例如:
保存在某一块 GPU 上。
此时每块 GPU 只有完整结果的一部分。
十七、All-Gather
接着,各 GPU 把自己持有的归约块沿环传递。
最终每块 GPU 都重新获得:
A B C D
即完整的归约结果。
Ring 方法的优势是:
- 没有单一中心节点;
- 每条链路可以持续传输;
- 对大数据量通信能较好利用带宽。
Tree 算法则通常具有更少的通信轮次,可能更适合对延迟敏感的较小消息。NCCL 支持 Ring、Tree、NVLS 等多种算法,并根据环境进行选择。
十八、数据并行的优点
数据并行的优点是:
- 概念简单;
- 每块 GPU 执行同样的计算;
- 容易扩展 Batch;
- 单 GPU Kernel 基本不需要重写;
- 适合模型能够放进单块 GPU 的情况。
缺点是:
每块 GPU 都必须保存完整模型以及相应的模型状态。
如果模型太大,单卡无法容纳,就不能只使用普通数据并行。
十九、数据并行的通信量来自哪里
反向传播结束后,每个参数都有一个梯度。
假设模型有:
个参数,梯度使用 BF16,每个参数2字节。
一次梯度集合通信的数据规模约与:
同阶。
例如参数量非常大时,即使每块 GPU 的计算很快,梯度同步也可能成为瓶颈。
所以数据并行适合:
每次本地计算量足够大
+
梯度通信能够被隐藏或摊薄
二十、第二种并行方式:张量并行
当一层模型本身太大,或者希望多 GPU 共同完成一层计算时,可以使用 Tensor Parallelism。
张量并行会把某一层的参数张量拆到多块 GPU 上。
例如全连接层:
其中:
可以沿不同维度切分 。
二十一、按输出列切分权重
把权重按列切分:
分别放到两块 GPU:
GPU 0:W₀
GPU 1:W₁
两块 GPU 都需要输入 :
最终:
即把输出在特征维度上拼接。
示意:

图示:二十一、按输出列切分权重
这种切分常被称为列并行线性层。
二十二、按输入行切分权重
也可以沿输入维度切分:
输入也相应切分:
各 GPU 计算:
最终输出:
因此需要对不同 GPU 的部分结果执行求和通信。
示意:
GPU 0:X₀W₀ = Z₀
GPU 1:X₁W₁ = Z₁
↓
All-Reduce
↓
Y=Z₀+Z₁
这类方式常被称为行并行线性层。
二十三、张量并行为什么通信频繁
数据并行通常在一次反向传播期间集中同步梯度。
张量并行则可能在每个 Transformer 层内部都需要通信:
矩阵乘法
↓
All-Reduce / All-Gather
↓
下一层计算
↓
再次通信
因此张量并行具有:
- 计算拆分细;
- 通信频率高;
- 每层都可能存在同步;
- 对互连带宽和延迟非常敏感。
所以张量并行通常优先放在 NVLink/NVSwitch 高速域内部,而不是随意跨越低速网络。
二十四、Transformer 中的张量并行
一个 Transformer Block 通常包括:
Attention
↓
输出投影
↓
MLP
其中包含多个大矩阵乘法。
可以把:
- Attention Head;
- Q、K、V 投影;
- MLP 隐藏维度;
- 输出维度;
拆分到多块 GPU。
例如多头注意力中,可以让不同 GPU 负责不同 Head:
GPU 0:Head 0~7
GPU 1:Head 8~15
GPU 2:Head 16~23
GPU 3:Head 24~31
但层与层之间仍需要交换或归约结果。
二十五、第三种并行方式:流水线并行
Pipeline Parallelism 沿网络层划分模型。
假设一个模型有12层,使用4块 GPU:
GPU 0:Layer 0~2
GPU 1:Layer 3~5
GPU 2:Layer 6~8
GPU 3:Layer 9~11
执行过程:
输入
↓
GPU 0
↓ 激活
GPU 1
↓ 激活
GPU 2
↓ 激活
GPU 3
↓
输出
流水线并行属于层间模型并行。
二十六、最朴素流水线为什么利用率低
如果一次只处理一个 Batch:
时间 1:GPU 0 执行
时间 2:GPU 1 执行,GPU 0 空闲
时间 3:GPU 2 执行,其他部分空闲
时间 4:GPU 3 执行
大部分 GPU 在等待。
示意:

图示:二十六、最朴素流水线为什么利用率低
利用率很低。
二十七、Micro-Batch 如何填充流水线
可以把一个大 Batch 切成多个 Micro-Batch:

图示:二十七、Micro-Batch 如何填充流水线
然后像工厂流水线一样执行:

图示:二十七、Micro-Batch 如何填充流水线
流水线填满以后,多块 GPU 可以同时处理不同 Micro-Batch。
二十八、Pipeline Bubble
流水线开始时需要逐级填充,结束时需要逐级排空。
这段资源未完全利用的区域叫 Bubble:
开始:
只有 GPU 0 工作
中间:
所有阶段都工作
结束:
前面的 GPU 已经无任务
如果流水线级数为 ,Micro-Batch 数量为 ,简化的气泡比例大致随:
变化。
Micro-Batch 越多,气泡占比通常越小。
但 Micro-Batch 太多也会增加:
- 调度开销;
- 激活管理复杂度;
- 通信次数;
- 内存占用策略复杂度。
二十九、流水线并行传输什么
流水线相邻阶段通常传输激活张量:
GPU 0 输出激活
↓
GPU 1 输入激活
反向传播时还要反方向传输激活梯度:
GPU 1 的输入梯度
↓
GPU 0
因此流水线并行通信通常发生在相邻阶段,而不像张量并行那样在每层内部进行全组归约。
但如果阶段边界的激活非常大,通信量仍然可能显著。
三十、并行方式的比较
| 并行方式 | 拆分对象 | 主要通信 | 适用情况 |
|---|---|---|---|
| 数据并行 | Batch | 梯度 All-Reduce | 模型能放进单卡 |
| 张量并行 | 单层参数 | 层内 All-Reduce/All-Gather | 单层很大 |
| 流水线并行 | 网络层 | 相邻阶段激活 | 模型层数多、整体很大 |
它们通常不是互斥的。
大模型训练经常使用混合并行:
例如:
数据并行 DP = 8
张量并行 TP = 4
流水线并行 PP = 8
则:
Megatron 等框架可以同时组织数据并行、张量并行和流水线并行。
三十一、为什么不同并行组应匹配不同网络层次
假设系统中:
机架内:
NVLink / NVSwitch
机架之间:
InfiniBand / Ethernet
张量并行通信最频繁、同步最细,因此通常应优先放在带宽最高、延迟最低的 NVLink 域内。
数据并行的梯度同步虽然数据量大,但频率通常比层内张量通信粗,可以进一步跨节点扩展。
一种常见映射思想是:
NVLink 域内部:
Tensor Parallel
同机架或邻近节点:
Pipeline Parallel
更大集群范围:
Data Parallel
这不是固定规则,但体现了:
越频繁、越细粒度的通信,应放在越快的互连上。
三十二、计算与通信重叠
假设反向传播按层进行:
计算 Layer 12 梯度
计算 Layer 11 梯度
计算 Layer 10 梯度
...
当 Layer 12 的梯度生成后,可以立即开始同步它,同时继续计算 Layer 11:
时间 →
计算:Layer 12 | Layer 11 | Layer 10
通信: Grad 12 | Grad 11
如果通信时间能够被后续计算覆盖,通信对总时间的影响就会降低。
三十三、梯度 Bucket
实际框架通常不会为每个很小的参数张量单独启动一次 All-Reduce。
因为小消息的启动和同步开销占比很高。
可以把多个梯度聚合为一个 Bucket:

图示:三十三、梯度 Bucket
Bucket 太小:
- 通信调用过多;
- 带宽利用率低。
Bucket 太大:
- 必须等待更多梯度生成;
- 通信开始较晚;
- 与计算重叠变差。
所以 Bucket 大小也是一个性能权衡。
三十四、通信延迟模型
一次通信时间可以粗略表示为:
其中:
- :固定启动延迟;
- :传输数据量;
- :有效带宽。
对于小消息:
固定延迟 占主导。
对于大消息:
占主导。
所以:
- 小消息更关注低延迟;
- 大消息更关注带宽;
- 合并小消息有助于减少启动次数。
三十五、强扩展与弱扩展
Strong Scaling:强扩展
问题总规模不变,增加 GPU 数量。
例如固定处理一个模型和一个 Batch:
1 GPU → 100 秒
2 GPU → 55 秒
4 GPU → 35 秒
8 GPU → 30 秒
GPU 越多,每块 GPU 分到的计算越少,但通信占比越来越大。
因此强扩展最终会遇到收益递减。
Weak Scaling:弱扩展
每块 GPU 的工作量保持大致不变,随着 GPU 数增加而增加总问题规模。
例如:
1 GPU:Batch 64
2 GPU:Batch 128
4 GPU:Batch 256
弱扩展通常更容易维持高利用率,但全局 Batch 过大也可能影响模型训练规律。
三十六、扩展效率
使用 块 GPU 时,加速比为:
并行效率为:
假设:
单 GPU:100 秒
4 GPU:30 秒
则:
并行效率:
GPU 数量继续增加时,如果通信和等待增长,并行效率通常会下降。
三十七、GPUDirect RDMA
不同服务器中的 GPU 通信通常需要经过网卡。
传统路径可能是:
GPU 显存
↓
CPU 主存
↓
网络接口
↓
网络
GPUDirect RDMA 允许支持的第三方 PCIe 设备,例如网卡,直接与 GPU 显存交换数据:
GPU 显存
↕
网卡
↕
网络
它减少 CPU 主存的数据中转和 CPU 对数据载荷的参与。
CPU 仍然可能参与控制和建立通信,但大块数据不必先复制到普通主机缓冲区。
三十八、为什么网卡位置也重要
一个服务器可能有多个 CPU Socket、多个 PCIe Root 和多个 GPU。
例如:
CPU 0 ─ GPU 0、GPU 1、NIC 0
CPU 1 ─ GPU 2、GPU 3、NIC 1
GPU 0 通过 NIC 0 通信通常比绕到 NIC 1 更直接。
如果进程、GPU 和网卡绑定不合理,数据可能跨越:
- CPU Socket;
- PCIe Root;
- NUMA 互连;
- 额外交换器。
因此多 GPU 性能不仅取决于 GPU 型号,也取决于物理拓扑和任务映射。
三十九、All-to-All 为什么对 MoE 很重要
Mixture-of-Experts 模型中,不同 Token 会被路由到不同 Expert。
如果 Expert 分布在不同 GPU:
GPU 0 上的 Token
可能需要发送到 GPU 3 的 Expert
GPU 1 上的 Token
可能需要发送到 GPU 0、2、3
这形成多对多数据交换:
GPU 0 ↔ GPU 1
GPU 0 ↔ GPU 2
GPU 0 ↔ GPU 3
...
常使用 All-to-All 类通信。
与 All-Reduce 相比,All-to-All 的通信模式更分散,对网络交换能力、负载均衡和 Token 路由分布要求更高。
四十、MoE 为什么可能负载不均衡
假设大多数 Token 都选择 Expert 0:
Expert 0:10000 个 Token
Expert 1:500 个 Token
Expert 2:400 个 Token
Expert 3:300 个 Token
负责 Expert 0 的 GPU 会成为瓶颈,其他 GPU 提前完成后只能等待。
因此 MoE 训练通常需要:
- 路由负载均衡;
- Expert Capacity;
- Token Dropping 或重路由;
- Expert Parallelism;
- 高效 All-to-All。
多 GPU 性能不仅受通信量影响,也受任务分布均匀性影响。
四十一、GB200 Grace Blackwell Superchip
一个 GB200 Grace Blackwell Superchip 包含:
1 × Grace CPU
2 × Blackwell GPU
Grace CPU 与两块 Blackwell GPU 通过 NVLink-C2C 连接。
可以概念化为:

图示:四十一、GB200 Grace Blackwell Superchip
它并不是把 CPU 和 GPU 做成同一个执行核心,而是通过高带宽一致性互连紧密组织。
四十二、GB200 NVL72 的组成
GB200 NVL72 是一个液冷机架级系统,包含:
- 36 个 Grace CPU;
- 72 个 Blackwell GPU;
- 由 NVLink Switch 连接形成的72 GPU NVLink 域。
整个系统的 GPU HBM3E 容量约为13.4 TB,官方列出的 NVLink Fabric 总带宽为130 TB/s。
简化结构如下:

图示:四十二、GB200 NVL72 的组成
四十三、NVL72 是否真的是“一块 GPU”
从系统定位上,它可以像一个大型机架级加速器一样承载单个大模型。
但从编程和资源管理角度,仍应理解为:
72 个独立 GPU 设备
+
各自的 SM 和 HBM
+
高速 NVLink Switch Fabric
并不是把72块 GPU 的所有 SM 和 HBM 物理融合成一个普通 CUDA Device。
模型仍然需要采用:
- 张量并行;
- 流水线并行;
- Expert 并行;
- 数据并行;
- 分布式内存管理。
高速 NVLink 的作用是显著降低这些划分产生的通信代价。
四十四、为什么 NVL72 对大模型重要
以超大模型为例,可能存在以下问题:
模型参数放不进单卡
KV Cache 放不进单卡
单卡计算延迟太高
张量并行通信过于频繁
MoE All-to-All 压力大
72 GPU 高速 NVLink 域可以:
- 提供更大的聚合 HBM 容量;
- 提供更多 Tensor Core;
- 支持更大规模张量并行;
- 降低 GPU 间通信等待;
- 使机架内模型并行不必频繁穿越传统网络。
这也是 Blackwell 不仅强调单 GPU 算力,还强调机架级架构的原因。
四十五、多 GPU 推理与训练的区别
训练
通常需要:
- 保存模型参数;
- 保存激活;
- 保存梯度;
- 保存优化器状态;
- 进行反向传播;
- 频繁执行集合通信。
通信和内存需求都很大。
推理
通常没有反向传播和梯度同步,但需要考虑:
- 模型参数分片;
- KV Cache;
- 请求批处理;
- 首 Token 延迟;
- 每 Token 延迟;
- 张量并行通信;
- 多请求吞吐率。
推理中的张量并行可能需要在生成每一个 Token 的多个网络层中进行通信,因此互连延迟同样非常重要。
四十六、什么时候不应该使用更多 GPU
增加 GPU 可能无益,甚至变慢,例如:
- 模型和 Batch 很小;
- 单 GPU 已经能够快速完成;
- 每块 GPU 分到的计算量太少;
- 通信时间超过计算时间;
- Kernel 太小;
- GPU 间负载不均衡;
- 数据频繁经过主机中转;
- 并行策略与物理拓扑不匹配。
因此,多 GPU 优化的目标不是 GPU 数量最大,而是:
四十七、分析多 GPU 性能的基本步骤
可以依次检查:
1. 单 GPU 是否已经优化
如果单 GPU Kernel 本身效率很低,增加 GPU 只是复制低效率。
2. 计算如何划分
确定使用:
- 数据并行;
- 张量并行;
- 流水线并行;
- Expert 并行。
3. 通信量是多少
分析:
4. 通信频率是多少
每个:
- Iteration;
- Layer;
- Micro-Batch;
- Token;
通信几次。
5. 通信经过哪条链路
确认使用:
- PCIe;
- NVLink;
- NVSwitch;
- InfiniBand;
- Ethernet。
6. 能否与计算重叠
观察通信是否位于关键路径。
7. 是否存在负载不均衡
比较各 GPU 的计算和等待时间。
本课核心结论
第一,多 GPU 加速不仅取决于 GPU 数量,还取决于通信和同步。
第二,PCIe 是通用设备互连,NVLink 面向高速 GPU 协作,NVSwitch 用于连接更多 GPU。
第三,NVLink 提高远端访问和传输能力,但不会自动把多块显存变成完全透明的单一显存。
第四,NCCL 提供 All-Reduce、All-Gather、Reduce-Scatter、All-to-All 等多 GPU 通信原语。
第五,数据并行沿 Batch 拆分,每块 GPU 保存完整模型,并通过 All-Reduce 同步梯度。
第六,张量并行拆分单层参数,通信频率较高,因此对低延迟、高带宽互连很敏感。
第七,流水线并行沿模型层划分,利用 Micro-Batch 填充流水线。
第八,流水线开始和结束阶段会产生 Bubble,增加 Micro-Batch 数量可以降低其相对占比。
第九,大模型训练通常混合使用数据并行、张量并行和流水线并行。
第十,应把最频繁的通信组映射到最快的物理互连上。
第十一,计算和通信重叠可以隐藏一部分通信开销。
第十二,GPUDirect RDMA 允许支持的网卡直接与 GPU 显存交换数据,减少主机内存中转。
第十三,GB200 NVL72 包含36个 Grace CPU和72个 Blackwell GPU,并通过 NVLink Switch 构成72 GPU 高速域。
第十四,NVL72 是机架级多 GPU 系统,而不是一个普通意义上的单独 CUDA GPU。
第十五,多 GPU 扩展最终取决于计算通信比、网络拓扑、负载均衡和并行策略。
下一课进入 GPU 的图形起源和固定功能硬件:
第十五课:GPU 如何渲染一幅三维图像
将包括:
顶点与三角形
Vertex Shader
光栅化 Rasterization
Fragment / Pixel Shader
纹理单元
ROP
Z-Buffer
为什么 GPU 天然适合并行图形处理
图形管线与 CUDA 计算管线有什么关系
RT Core 如何加速光线追踪