Prime Intellect 启动 INTELLECT-1:首个全球分布式训练的 10B 参数模型
INTELLECT–1: Launching the First Globally-Distributed Training of a 10B Parameter Model
Prime Intellect 启动 INTELLECT-1,这是首个在全球分布式节点上训练的 10B 参数模型,基于 Llama-3 架构,邀请任何人贡献算力参与。
INTELLECT–1:启动首个全球分布式训练的 100 亿参数模型
我们非常激动地推出 INTELLECT-1,这是首个全球分布式训练的 100 亿参数模型,邀请任何人贡献算力并参与其中。这让我们离开源 AGI 更近了一步。
最近,我们发布了 OpenDiLoCo,这是 DeepMind 的分布式低通信(DiLoCo)方法的开源实现与扩展,支持全球分布式 AI 模型训练。我们不仅复现并开源了这项工作,还成功将其扩展到 10 亿参数规模。
现在,我们将其进一步扩大 10 倍,达到 100 亿参数规模,相比最初的研究扩大了约 25 倍。这让我们朝着前沿开放基础模型的民主化训练又迈进了一步:从语言、智能体到科学模型。
我们的目标是逐步解决分布式训练问题,以确保 AGI 将是开源的、透明的且可访问的。
启动合作伙伴与贡献者
我们非常激动并感激 Hugging Face、SemiAnalysis、Arcee、Hyperbolic、Olas、Akash、Schelling AI 等领先的开源 AI 参与者加入,为本次训练运行贡献算力。
.png&mode=full&exp=1791590400&sig=9c853c33ee6496cd)
如何贡献算力
现在任何人都可以通过我们的平台为推进开源 AI 贡献资源,之后也可以更轻松地用自己的硬件参与。
分布式训练的范式转变。
正如 Anthropic 联合创始人 Jack Clark 所强调的,目前还没有任何模型能够在全球分布式工作节点上以 100 亿参数规模高效训练。我们最初的 OpenDiLoCo 运行突破了 10 亿参数的门槛,而通过 INTELLECT-1,我们正在将低通信训练推向新的规模水平。
DiLoCo 使得在连接不佳的设备孤岛上训练 AI 模型成为可能。该方法允许在这些不同的孤岛上进行数据并行训练,只需每隔几百步同步一次伪梯度。它显著降低了通信频率(最高可达 500 倍),从而降低了分布式训练的带宽需求。
.png&mode=full&exp=1791590400&sig=9b0647a6d2dea609)
Prime:我们的分布式训练框架
自最初的开源发布以来,我们在两个关键维度上改进了分布式训练框架:
1. 算法进展
基于我们 OpenDiLoCo 工作的许多消融实验,在进一步降低通信需求方面展现出巨大潜力。值得注意的是,我们对伪梯度的量化实验将带宽需求降低了最高 2000 倍,将伪梯度的 int8 量化与每 500 步一次的外层优化器同步相结合。这些结果在较小规模上已经有效,我们很期待将其扩展到更大的模型规模。
2. 可扩展的全球分布式训练框架
分布式训练既是工程挑战,也是研究挑战。实现跨分布式数据中心的容错训练,是当今即使最大的 AI 实验室也在努力解决的问题。
我们非常激动地宣布发布一个名为 Prime 的新分布式训练框架。Prime 支持容错训练,支持计算资源的动态上下线,并优化全球分布式 GPU 网络中的通信与路由。
该框架构成了我们开源技术栈的基础,旨在支持我们自身以及其他超越 OpenDiLoCo 的低通信训练算法。通过构建在这一基础设施之上,我们力求突破全球分布式 AI 训练的极限。
关键特性:
- ElasticDeviceMesh for Fault Tolerant Training:
- 在 Prime 中,我们添加了一个名为 ElasticDeviceMesh 的新分布式抽象,它封装了用于跨互联网容错通信的动态全局进程组,以及用于节点或数据中心内部通信的本地进程组。
- 当节点加入或离开时,ElasticDeviceMesh 会管理全局进程组的调整大小,这与 torch distributed 中的标准 DeviceMesh 不同,后者会崩溃并需要冷重启才能调整进程组的大小。
- 为了知道何时调整进程组的大小,我们使用心跳机制来发现死节点并将其从进程组中移除。崩溃的节点将尽最大努力发出临终遗言,以快速使自己的心跳失败,从而为同伴节省超时时间。
- Asynchronous distributed checkpointing
- 由于模型的规模,检查点操作可能非常昂贵,在我们测试的节点上最多需要 20 分钟。如果它阻塞了主训练进程,就会降低我们的计算利用率。
- 为了最小化阻塞时间,我们首先将检查点写入 /dev/shm,这是一个由 RAM 支持的文件系统。此操作要快得多,一旦检查点在 /dev/shm 中创建完成,我们就可以解除对主训练进程的阻塞。
- 然后,我们使用两个子进程异步地将检查点从 /dev/shm 复制到磁盘上的检查点目录,并将其上传到远程。
- Live checkpoint recovery
- 希望在训练中途加入运行的节点需要能够获取模型和优化器的最新状态,然后才能为训练做出贡献。它们必须在两个外部步骤之间的时间窗口内完成此操作,否则它们收到的检查点将是过时的。
- 为了快速完成此操作,我们让加入的节点从其对等节点请求检查点,这些对等节点都托管着一个 sidecar HTTP 服务器,从 /dev/shm 提供最新的检查点。
- 一旦加入的节点下载并初始化了模型,它就会跳过内部步骤,并以零伪梯度加入外部步骤。这是为了防止加入的节点拖慢现有节点。如果加入的节点也执行内部步骤,那么它下载和加载检查点所需的时间会导致它错过外部步骤,从而降低集群的计算利用率。
- Custom Int8 All-Reduce Kernel
- 在我们的实验中,我们发现可以对伪梯度进行 int8 量化,而不会对损失曲线产生任何影响。这意味着,如果我们以 int8 而不是 fp32 通信伪梯度,我们可以将每个外部步骤 all-reduce 的有效载荷大小减少 4 倍。
- 然而,我们需要以 fp32 累积归约,在 all-reduce 期间对中间结果进行反量化和重新量化。目前没有任何集合通信库支持这一点。
- 因此,我们用 C++ 实现了自己的全流水线环形归约内核,该内核使用 torch 库作为自定义算子进行 JIT 编译。
- 然而,由于我们需要执行大量的量化工作,使用 torch 算子(quantize_per_tensor、scatter_add、index 等)太慢了,导致我们 4 Gbps 的目标网络带宽无法得到充分利用。
- 因此,我们用 C++ 实现了自己的多线程 uint8 操作,以执行量化和反量化操作,将量化速度提高了 60 倍以上。
- Maximising bandwidth utilization:
- 通过在一个节点内对 DiLoCo 伪梯度进行分片,我们可以在执行 all-reduce 时同时打开多个连接,从而最大限度地提高网络带宽利用率。这使得某些节点的传输速度提高了 8 倍。
- 依赖公共 IP 转发导致某些计算提供商的 p2p 带宽较差或不稳定。为了缓解这个问题,我们采用 VPN 技术来优化节点之间的点对点连接,通过修改数据包在互联网上的路由,使我们能够更好地利用节点之间可用的互联网带宽。
- 与我们的 OpenDiLoCo 版本相比,我们在类似数据中心设置中将节点之间的带宽利用率提高了多达 40 倍,在全美范围内的数据中心之间实现了高达 4Gb/s 的连接。
- PyTorch FSDP2 / DTensor ZeRO-3 implementation
- 为了在给定的内存资源内进行 10B 模型的训练,我们不得不在节点内 GPU 之间对模型权重、梯度和优化器状态进行分片。
- 我们使用 PyTorch FSDP2 的 fully_shard API 实现了这一点,该 API 将模型参数包装为 DTensors,并注册钩子以在张量被使用时调度 all-gather 和 reduce-scatter。FSDP2 还通过将参数分桶到 FSDPParamGroups 来优化集合通信。这使我们能够在更大的张量上执行集合通信,提高协议与有效载荷的比率,并改善流水线带来的重叠。我们对伪梯度采用相同的技巧,按层进行分桶。
- CPU Off-Loading
- 我们的 Diloco 优化器不会增加任何 GPU 开销。Diloco 优化器所需的所有张量都被卸载到 CPU 内存中。
- 由于我们每数百步才执行一次全局同步,在 CPU 上复制和计算伪梯度的速度降低相对于执行内部步骤和 all-reduce 的时间来说可以忽略不计。
如需了解更多信息,请查看 代码库,并敬请期待我们即将发布的研究论文。
所有这些使得 INTELLECT-1 能够在 10B 参数规模下训练,并在多个分布式工作节点上实现 98% 的计算利用率。 在我们的生产训练运行中,我们选择每 100 步同步一次,在 8xH100 节点的岛屿上,这大约需要 40 分钟才能完成。我们将伪梯度量化为 int8,将通信需求减少了 400 倍。使用我们新框架的 DiLoCo 外部优化器的 all-reduce 同步耗时不到 1 分钟,将节点之间的通信时间最小化到仅占总训练时间的 1-2%。

INTELLECT-1:首个全球训练的 10B 模型
INTELLECT-1 是一个基于 Llama-3 架构的 10B 参数模型。
它将是首个在此规模上使用最高质量的开源数据集之一——Hugging Face 的 Fineweb-Edu——进行广泛训练的模型。
%2525201.png&mode=full&exp=1791590400&sig=2f19d566c1f2eb18)
我们精心策划的数据混合包含以下内容:
- 55% Fineweb-edu
- 20% DLCM
- 20% Stack v2
- 5% OpenWebMath
由于其中一些数据集包含具有相关数据的分片,我们通过从 12 个流式数据集迭代器中随机采样并重新分片数据集来预先打乱数据集。我们预先打乱的数据集可以在 huggingface hub 上找到。使用 Llama-3 分词器处理后的数据混合中的总 token 数超过 6 万亿。
我们正在使用 WSD 学习率调度器,它在初始预热阶段后保持恒定的学习率。这种方法为我们可训练的 token 数量提供了灵活性,具体取决于计算贡献的数量。在训练接近尾声时,我们计划使用高质量数据集实施冷却阶段,以进一步提升性能,并进行训练后优化。
下一步:
INTELLECT-1 只是第一步。我们将继续在我们的 路线图 上取得进展,将分布式训练扩展到最大、最强大的开放前沿科学、推理和编码模型。
我们的路线图包括:
- 扩展到科学、推理和编码领域更大、更强大的开放前沿模型。
- 开发一个市场,让任何人都可以贡献自己的计算资源。
- 创建一个平台,使任何人都能利用分布式计算发起训练运行。
加入我们,共建 AI 的开放未来
开源 AI 是对抗中心化风险的关键,但它需要协调一致的努力,以利用分布式计算、人才和资本,与领先的闭源实验室竞争。
加入我们,推动开放和民主化的 AI:
来源:Prime Intellect Blog · primeintellect.ai