概述
NCCL 实现 GPU 通信操作,如 all-reduce、all-gather 和 broadcast;其性能取决于消息大小、拓扑、硬件和配置。
深入探讨
训练大型模型意味着每个 GPU 在自己的数据切片上计算梯度,然后所有 GPU 必须在下一步之前就组合结果达成一致。这种协调是通过集体操作完成的:对 GPU 上的值进行 all-reduce 求和,并为每个人提供结果; all-gather 将每个 GPU 的片段收集到所有 GPU 的完整副本中;广播将一个 GPU 的数据发送给其余 GPU;减少分散组合然后分裂。 NCCL(NVIDIA Collective Communications Library)使用拓扑感知算法(例如环和树全归约)跨服务器中的 GPU 以及跨服务器高效地实现这些功能。它利用节点内部的 NVLink 以及节点之间的 InfiniBand 或 RoCE,是 PyTorch DDP、FSDP、DeepSpeed 和 Megatron 下的通信主干。
现实世界的实施
使用 PyTorch DistributedDataParallel 中的 all-reduce 同步所有 GPU 上的每个训练步骤的梯度
通过 FSDP 或 DeepSpeed ZeRO 中的全收集和减少分散功能对分片优化器状态进行按需收集参数
在训练运行开始时将初始模型权重从一个 GPU 广播到所有其他 GPU
在 NVLink 和 InfiniBand 上使用环 all-reduce 来保持多节点 GPU 集群的高带宽
集体沟通和 NCCL 的未来
更大的模型和集群促使人们研究计算/通信重叠、拓扑感知路由和网络卸载。这些可以在某些工作负载中提升性能,同时增加配置和调试需求。比较算法时请使用代表性张量大小并记录版本和拓扑。即使库自动化了大部分路由,正确的参与和缓冲区处理仍然至关重要。仅凭链路带宽声明无法确定端到端训练速度。
付诸实践
为什么这很重要
- 成本与预算. 多年来,架构决策决定着性能和运营成本。
- 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
- 质量控制. 更好的工程选择可以减少生产中的可靠性事故。
留意
- 优化一项基准测试可以隐藏更广泛的系统弱点。
- 基础设施和维护成本常常被低估。
- 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
后续步骤
- 在实施之前定义延迟、质量和成本目标。
- 在实际负载和数据条件下进行基准测试。
- 仪器监控错误、漂移和用户影响。
- 在扩展之前准备回滚和事件响应路径。
不断探索
常见问题
什么是集体沟通和 NCCL?
集体通信协调参与设备组之间的数据。NCCL 实现 GPU 通信操作,如 all-reduce、all-gather 和 broadcast;其性能取决于消息大小、拓扑、硬件和配置。
all-reduce 操作在分布式训练中能完成什么?
All-reduce 对每个 GPU 上的值求和(或以其他方式组合),并将相同的结果分配回所有 GPU,这就是梯度同步的方式。
缩写词 NCCL 代表什么?
NCCL是NVIDIA集体通信库,它实现了快速的多GPU和多节点集体操作。
为什么分块环形通信对大张量有用?
环形组织块移动,但性能仍取决于网络和工作负载。
哪个集体操作将每个 GPU 的数据收集到所有 GPU 持有的完整副本中?
All-gather 收集每个 GPU 中的不同部分,并在所有 GPU 上组装完整的集合,在 FSDP 等分片训练中大量使用。
支持的网络归约卸载(如 SHARP)会做什么?
卸载能力取决于配置,必须进行评估。