ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【DL16】All-Reduce|NCCL

【DL16】All-Reduce|NCCL 上节课我们讲了一些并行的方法那么GPU之间这么同步数据呢All-Reduce 是什么多个 GPU 对数据进行聚合并让所有 GPU 都获得聚合后的结果。All-Reduce 的作用之一就是让多张 GPU 对各自计算出来的梯度进行聚合并让所有 GPU 都拿到聚合结果。GPU 0 → 梯度 G0 ─┐ GPU 1 → 梯度 G1 ─┤ GPU 2 → 梯度 G2 ─┼→ All-Reduce → 平均梯度 G GPU 3 → 梯度 G3 ─┘ ↓ 所有 GPU 都得到 G ↓ 各自更新模型我们先回忆一下单GPU数据 ↓ Forward ↓ Loss ↓ Backward ↓ Gradient ↓ Optimizer ↓ 更新参数好现在变成四张GPUGPU 0 → Batch A GPU 1 → Batch B GPU 2 → Batch C GPU 3 → Batch D每张GPU都有完整模型经过forwar 和backword四张GPU的梯度不一样这里我们采用先聚合再平均这样所有的GPU得到完全相同的参数这就是ALL reduceallreducereduce意思把多个GPU的数据聚合起来all就是所有的gpu最终都得到这个结果.Reduce ↓ 结果集中到某个 GPU All-Reduce ↓ 结果广播给所有 GPU还有all-gather每个GPU都收集所有gpu的数据。broacast一个 GPU 把数据发送给所有 GPU。了解了All-reduce的作用也就知道了为什么LLM 分布式训练经常能看到All-reduce尤其是DP,数据拆分 ↓ 每张 GPU Forward ↓ 每张 GPU Backward ↓ 得到各自 Gradient ↓ All-Reduce ↓ 得到一致 Gradient ↓ Optimizer ↓ 模型保持同步GPU之间到底怎么传数据NCLLNVIDIA Collective Communications Library:NVIDIA 为 GPU 集体通信提供的高性能通信库。它提供了我们刚才讲的操作PyTorch ↓ Distributed API ↓ NCCL ↓ GPU ↔ GPU那么为什么不使用普通的CPU通信因为我们现在的数据主要再GPU显存如果GPU–CPU–GPU就会产生大量数据搬运效率很低NCCL会尽量利用GPU–高速互通–GPU进行通信。GPU之间有哪些通信方式PCIe NVLink NVSwitch InfiniBandNVlink:NVIDIA 的高速 GPU 互联技术用于提高 GPU 间通信能力NVSwitch:建立更加高效的 GPU 互联网络。InfiniBand:常用于高性能计算和 GPU 集群之间高速通信的网络技术。注意GPU越多不代表训练越快,GPU 加到一定程度后收益会逐渐下降。GPU数量 ↑ │ ______ │ / │ / │ / └────────────→ 性能Ring All-reduce的核心思想让GPU彼此传递数据大家一起完成数据交换All-Reduce Reduce-Scatter :先做 Reduce再把不同部分分散给不同 GPU。 All-Gather通信操作的区分操作核心含义Broadcast一个 → 所有Reduce所有 → 一个聚合All-Reduce所有 → 聚合 → 所有All-Gather所有 → 所有每个收集全部Reduce-Scatter所有 → 聚合 → 每个拿一部分总结一下大模型训练 │ 一张 GPU 放不下 ↓ 多 GPU 分布式训练 │ ┌─────────────┼─────────────┐ ↓ ↓ ↓ DP TP PP │ │ │ 拆数据 拆矩阵 拆 Layer │ ↓ Gradient ↓ All-Reduce ↓ NCCL ↓ GPU 间高速通信 │ ┌─────┼────────┐ ↓ ↓ ↓ PCIe NVLink InfiniBand
返回列表