OpenDiLoCo:一个分布式低通信模型训练开源框架 允许在全球进行分布式AI训练

Prime Intellect推出了OpenDiLoCo,这是DeepMind分布式低通信(DiLoCo)方法的开源实现和扩展,允许在分布式硬件上进行协作模型开发,旨在促进全球分布式AI模型训练。它通过减少频繁的通信需求,使得在多个、连接不良的设备上训练模型成为可能。

OpenDiLoCo框架可以使多个不同地点和设备上的计算资源协同工作,共同训练和开发AI模型。这意味着不同的计算机和硬件可以在全球范围内分布并通过网络连接起来,一起参与AI模型的训练过程,而不需要将所有计算资源集中在一个地方。这种方法提高了资源利用率,并使得更多人可以参与AI开发。

在两个大洲和三个国家之间训练模型,展示了其有效性,并保持了90-95%的计算利用率。

工作原理

1. DiLoCo算法原理

DiLoCo (Distributed Low-Communication) 是一种针对大规模语言模型的分布式低通信训练方法。其核心思想是通过减少工作节点间的通信频率,降低带宽需求,从而实现高效的全球分布式训练。

2. 本地SGD算法

DiLoCo算法采用本地SGD (Stochastic Gradient Descent) 算法,结合两个优化器进行训练:

3. 工作步骤

初始化
  1. 模型副本:创建两个模型副本,一个用于本地更新(主模型),另一个保留原始权重(副本模型)。
  2. 优化器:初始化内部优化器(如AdamW)和外部优化器(如SGD with Nesterov momentum)。
训练过程
  1. 本地更新
    • 每个训练步长内,使用内部优化器对主模型进行本地更新。
    • 内部优化器在每个步长结束时调用,用于更新模型参数。
  2. 伪梯度计算
    • 在特定的本地步数后,计算伪梯度。伪梯度通过减去当前主模型参数和副本模型参数得到。
  3. 伪梯度同步
    • 使用all-reduce操作在所有工作节点间同步伪梯度,平均化所有节点的伪梯度。
  4. 外部更新
    • 使用外部优化器更新副本模型参数,将其与伪梯度进行合并。
    • 更新后的副本模型参数再次作为新的副本进行存储,以备下一次伪梯度计算使用。

伪代码示例


for batch, step in enumerate(train_loader):
    ...  # 损失计算
    inner_optimizer.step()  # 内部优化器更新

    if step % local_steps == 0:  # 每 local_steps 步长计算一次伪梯度并同步
        for old_param, param in zip(original_params, model.parameters()):
            param.grad = old_param - param.data
            dist.all_reduce(tensor=param.grad, op=dist.ReduceOp.AVG)
            param.data = old_param
        outer_optimizer.step()  # 外部优化器更新
        original_params = [p.detach().clone() for p in model.parameters()]

4. Hivemind实现

Hivemind代码示例


from hivemind.dht.dht import DHT
from open_diloco import DiLoCoOptimizer

optimizer = DiLoCoOptimizer(
    batch_size, learning_rate_scheduler, DHT(),
    inner_optimizer, outer_optimizer, model.parameters()
)

for batch in train_dataloader:
    model(batch).loss.backward()
    optimizer.step()
    optimizer.zero_grad()

5. 性能优化

实验结果

1. 150M参数模型的训练结果

2. 1.1B参数模型的扩展实验

3. 全球分布式训练实验

4. 效率和性能分析

结论与未来方向

  1. 成功复现了DiLoCo的主要实验结果,并将方法扩展到原始工作的三倍参数规模。
  2. 展示了DiLoCo在真实环境中的应用能力,验证了其在全球范围内高效训练模型的潜力。
  3. 未来工作将致力于将DiLoCo扩展到更大模型和更多分布式工作节点,并探索模型合并技术以提高稳定性和收敛速度。

详细介绍:https://www.primeintellect.ai/blog/opendiloco
论文:https://arxiv.org/abs/2407.07852


代码:https://github.com/PrimeIntellect-ai/OpenDiLoCo

Support authors and subscribe to content

This is premium stuff. Subscribe to read the entire article.

加入会员

加入会员查看更多会员内容和教程。
超过1000+的会员内容,每天更新。
退出移动版