技术指南

集体沟通和 NCCL

集体通信是一组 GPU 交换和组合数据的方式,而 NCCL 是 NVIDIA 的库,可以使这些交换变得异常快速。

概述

集体通信是一组 GPU 交换和组合数据的方式,而 NCCL 是 NVIDIA 的库,可以使这些交换变得异常快速。像 all-reduce 这样的操作是分布式训练的核心,每一步都在每个 GPU 上同步梯度。

集体通信和 NCCL 是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。

深入探讨

训练大型模型意味着每个 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 下的通信主干。

技术洞察

Ring all-reduce 是经典算法:GPU 形成一个逻辑环,数据被分成循环的块,因此每个步骤都重叠通信,从而使总传输带宽最优并且大致独立于 GPU 数量。对于许多节点,基于树的算法通过分层组合结果来减少延迟。 NCCL 自动检测拓扑,选择最佳算法,并可以使用 NVIDIA SHARP 将简化数学卸载到网络中,从而将必须遍历链路的数据减半。

掌握集体沟通和 NCCL

集体通信是一组 GPU 交换和组合数据的方式,而 NCCL 是 NVIDIA 的库,可以使这些交换变得异常快速。像 all-reduce 这样的操作是分布式训练的核心,每一步都在每个 GPU 上同步梯度。集体通信和 NCCL 是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将集体通信和 NCCL 视为一种操作模型,而不是单一功能:定义期望的结果,澄清假设,并将系统可以可靠地执行的操作与仍需要专家判断的操作分开。

在实践中,强大的团队使用集体通信和 NCCL 来根据可靠性和成本优化架构、数据和基础设施选择。他们记录明确的成功标准,根据实际数据和工作流程进行测试,并根据观察到的失败模式而不是一次性基准测试胜利进行迭代。这就是理论理解转变为跨产品、政策和运营的持久能力的地方。

多年来,架构决策决定着性能和运营成本。与此同时,优化一个基准测试可以隐藏更广泛的系统弱点。最具弹性的方法是将实验速度与治理规则结合起来:运行试点、捕获证据、发布决策日志,并随着模型行为、用户期望和监管要求的发展不断更新保障措施。

战略影响

多年来,架构决策决定着性能和运营成本。

多年来,架构决策决定着性能和运营成本。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

更好的工程选择可以减少生产中的可靠性事故。

更好的工程选择可以减少生产中的可靠性事故。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

集体沟通和 NCCL 的未来

随着集群扩展到数十万个 GPU,通信越来越主导训练时间,因此集体库是一个热门领域。期望更深入的网络内计算(交换机进行减少),更好的计算和通信重叠以隐藏延迟,以及缩小移动字节的低精度集合。随着跨供应商的努力和基于以太网的 RDMA 推动替代方案,竞争也在加剧,而 NCCL 不断加强与 NVLink、NVSwitch 和新兴光学结构的集成。

现实世界的实施

使用 PyTorch DistributedDataParallel 中的 all-reduce 同步所有 GPU 上的每个训练步骤的梯度

通过 FSDP 或 DeepSpeed ZeRO 中的全收集和减少分散功能对分片优化器状态进行按需收集参数

在训练运行开始时将初始模型权重从一个 GPU 广播到所有其他 GPU

在 NVLink 和 InfiniBand 上使用环 all-reduce 来保持多节点 GPU 集群的高带宽

实施模式

集体沟通和 NCCL 实践

使用 PyTorch DistributedDataParallel 中的 all-reduce 同步所有 GPU 上的每个训练步骤的梯度。

使用 PyTorch DistributedDataParallel 中的 all-reduce 同步所有 GPU 上的每个训练步骤的梯度 当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

集体沟通和 NCCL 实践

通过 FSDP 或 DeepSpeed ZeRO 中的全收集和减少分散功能,对分片优化器状态进行按需收集参数。

在 FSDP 或 DeepSpeed ZeRO 中通过全收集和减少分散功能对优化器状态进行分片并按需收集参数。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

集体沟通和 NCCL 实践

在训练运行开始时,将初始模型权重从一个 GPU 广播到所有其他 GPU。

在训练运行开始时将初始模型权重从一个 GPU 广播到所有其他 GPU 当团队预先定义质量阈值、为边缘情况保留人工升级路径并跟踪一段时间内的生产力提升和错误成本时,通常会获得更好的结果。

集体沟通和 NCCL 实践

在 NVLink 和 InfiniBand 上使用环 all-reduce 来保持多节点 GPU 集群的高带宽。

使用 NVLink 和 InfiniBand 上的环 all-reduce 来保持多节点 GPU 集群的高带宽 当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

风险与防护栏

!

优化一项基准测试可以隐藏更广泛的系统弱点。

!

基础设施和维护成本常常被低估。

!

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

在实施之前定义延迟、质量和成本目标。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

2

在实际负载和数据条件下进行基准测试。

在实际负载和数据条件下进行基准测试。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

3

仪器监控错误、漂移和用户影响。

仪器监控错误、漂移和用户影响。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

4

在扩展之前准备回滚和事件响应路径。

在扩展之前准备回滚和事件响应路径。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

不断探索