Prime Intellect 发布 PCCL 分布式训练通信库
PCCL - Prime Collective Communications Library
Prime Intellect 发布 Prime Collective Communications Library(PCCL),一个面向全球分布式训练的低层通信库,把容错作为一等设计目标,任何时刻杀掉一个 peer 都可恢复。
PCCL - Prime 集合通信库
我们非常高兴地发布 Prime 集合通信库,这是一个为全球分布式训练构建的低层通信库。
像 NVIDIA 的 NCCL 这样的通信库假设连接快速且稳定——这适用于超级计算机,而非公共互联网。
PCCL 将容错性作为一等公民来构建。任何时候终止一个 PCCL 对等节点都不会有问题,即使是在多个并发的 all-reduce 操作期间或在对等节点重新配置期间。系统的每一种可能状态都被设计为可恢复的,并已通过大量压力测试验证。
在我们的测试中,PCCL 在西欧各数据中心之间实现了高达 45 Gbit/s 的带宽,在北美与西欧之间的洲际训练中达到了 25 GBit/s。
我们发布 PCCL,是希望加速分布式低通信优化算法的研究,以进一步缩小与集中式训练之间的差距。
详细技术报告:https://arxiv.org/abs/2505.14065
Github:https://github.com/PrimeIntellect-ai/pccl
文档:http://pccl.primeintellect.ai/
安装:
pip install pypccl动机
传统的 MPI 库主要是为 CPU 节点超级计算机设计的。
如今我们使用类似 MPI 的库(如 NCCL)来运行深度学习程序,利用现代企业级 GPU 上可用的快速互连。然而,在继承 MPI API 表面的同时,我们也继承了它的局限性。每个进程运行相同的程序,并通过发送和接收消息与其他进程通信。由于程序在控制流上是确定性的,所有计算机将按相同顺序运行相同的集合通信操作,因此所有进程将发送和接收相同的消息。如果任何一个进程失败,整个程序就会失败。
MPI 程序被设计为在单个网络内的单个数据中心的单台超级计算机上运行。因此,许多 MPI 实现假设本地可达性。例如,要在公共互联网上使用 Meta 的 Gloo,一种常见——但理论上不必要且实际上更慢——的解决方案是使用 VPN。这是在训练 INTELLECT-1 期间必要的变通方法,但它降低了吞吐量。
MPI 程序中的对等节点在程序启动时就是固定的。简单来说,如果一个进程失败,整个作业就会失败。
MPI 中的“容错”通常意味着从头重新启动整个程序,或者最多能够容忍一定数量的对等节点失败,或者依赖应用层的“技巧”,而这些技巧留下了未被探索的微妙故障场景,在足够糟糕的时序条件下可能表现为崩溃或停滞。
将新的对等节点加入正在进行的 MPI 作业是不可能的。对于现代机器学习工作负载,我们希望能够
a) 容忍对等节点非正常失败
b) 动态加入或重新加入对等节点。
传统 MPI 不尝试解决这些问题是有充分理由的。
具体来说,对于任何具有任意嵌套控制流的通用程序,设计一个稳健的方案来处理具有全新程序状态的新对等节点加入,本质上是不可能的。
为什么机器学习不同
在机器学习领域,我们感兴趣的不是具有任意复杂控制流的通用科学计算程序。相反,我们关注的是迭代优化算法,这类算法要求在每个“训练步骤”中重复本质上相同的操作。在这种设定下,稳健的动态成员资格确实是可行的。节点要么参与训练步骤,要么不参与。
PCCL 模型
PCCL 是一个提供容错集合通信原语的库,专为公共互联网设计。
PCCL 模型很简单:
- 每个节点运行相同的程序,并通过发送和接收消息与其他节点通信。
- 节点声明一个“共享状态”,该状态在所有节点之间同步。如果节点偏离了主流哈希,共享状态会被重新传输。
- 如果某个节点在集合通信操作期间发生故障,该操作可以在剩余节点上重试。
- 新节点可以随时加入,并将等待现有节点接受其加入程序
- 新加入的节点将跳转到训练循环中现有节点先前接受新节点时所处的同一行。
为什么要在公共互联网上?
分布式学习文献的最新进展表明,在每一步同步工作节点梯度并非收敛所必需。像 DiLoCo 这样的优化策略,仅每 N 个内部步骤同步一次工作节点本地的权重增量,其表现与朴素 DDP 相当。至关重要的是,随着模型规模的增长,DiLoCo 与 DDP 之间的差距会进一步缩小。PCCL 的开发正是为了利用这一在分布式环境中扩展语言模型训练的新机遇。
免费*通信
PCCL 允许轻松实现诸如异步 DiLoCo 之类的方案,这些方案实现了一步延迟的参数更新,这是一种完全隐藏归约操作通信的方式,因为下一组内部步骤是并发计算的。在最佳情况下,内部步骤的数量被调整为使计算时间与通信时间精确匹配。这允许实现并行性与通信频率的最佳平衡。关于推荐的使用模式以及如何实现常见分布式优化策略的示例,可在 PCCL 仓库的 examples 文件夹中找到。
它的容错能力如何?
TLDR:非常强
PCCL 在所有主流套接字实现(Linux、macOS、Windows WSA)上通过了广泛的长时间压力测试,测试采用高频训练循环,节点以完全随机的时机被快速创建和杀死,以触发所有可能的竞态条件或崩溃。
只要应用程序代码遵循错误恢复/重试逻辑的最佳实践,杀死 PCCL 节点就没有坏时机,无论是否有多个并发的集合通信操作正在进行、需要部分中止、等待或重试,还是共享状态同步或任何其他阶段。共享状态不会丢失。即使在节点频繁变动的情况下,它也会通过剩余节点继续由训练循环推进。
拓扑优化
PCCL 可以执行自动拓扑优化。这会触发带宽测试,并根据获得的成本边随后构建最优路径。
例如,如果计算机位于同一数据中心内,数据包通常可以在本地交付,而无需经过网关。在这种情况下,大多数云中的带宽通常在约 50GBit/s 以内。在这种利用拓扑优化的场景中,“离开”数据中心的成本只需支付两次。次优路径会更频繁地支付这一成本。鉴于这一特性,PCCL 并不严格局限于通过互联网传输,并允许以太网内通信与公共互联网通信的无缝混合。
基准测试
PCCL 可以通过使用多个并发的流水线 all reduce 将数据包分布在一个大型连接池上,从而有效利用跨大陆的长肥管道链路。这有助于从实施每流公平队列的路由器聚合带宽。
北美 + 西欧


仅北美
在我们的测试中,我们观察到 PCCL 在分布在北美和西欧的 18 个对等节点设置中实现了 25 Gbit/s 的吞吐量。
在不涉及海底链路的情况下,带宽可以进一步提高:


仅西欧
在分布范围较小的环境中,我们可以实现更高的速度:


它能否用于 HPC 环境?
尽管 PCCL 并未直接针对高性能本地网络进行优化,但 PCCL 在以太网上仍可与 PyTorch 的 Gloo 相竞争。

在我们的 prime 框架中的使用
如果你想了解我们如何使用 PCCL,请参阅开源 prime 仓库,这是我们生产就绪的 DiLoCo 和异步 DiLoCo 开源实现。
来源:Prime Intellect Blog · primeintellect.ai