Intellect-1采用OpenDiLoCo训练框架,通过减少节点间通信需求降低大规模分布式训练的通信成本。
03为此,Prime Intellect研发了Prime可扩展的去中心化训练框架,实现计算资源的动态管理和鲁棒性。
04在五个国家和三大洲使用多达112个H100 GPU同时协作训练100亿参数模型,实现83%的总体计算利用率。
05尽管地理分布对通信效率构成挑战,但PRIME框架和DiLoCo算法的结合有效缓解了通信瓶颈。
随着模型的规模和训练复杂度的不断提升,算力的需求也呈现出指数级的增长,它已成为各大科技公司争夺的核心竞争点。科技巨头们竞相投资计算资源,耗费上百亿美元建设算力中心,以此巩固自己在 AI 领域的领先地位。
然而,这样的集中化趋势也带来了对未来的隐忧——模型训练的资源需求和集中化的控制权可能让 AI 技术的未来被少数大公司所垄断。这引发了人们对 AI 发展路径的深刻担忧。
在此背景下,一批研究者们正在尝试一条新的路径——去中心化训练,通过聚合全球计算资源,使研究人员能够通过跨集群的分布式训练协作开发出先进模型。
美国初创公司 Prime Intellect 正是其中的探索者之一。日前,他们推出了首个去中心化的 100 亿参数模型训练项目 INTELLECT-1,在此前的原始研究基础上将参数量提升了 25 倍。
当地时间 11 月 30 日,Prime Intellect 公布了 Intellect-1 模型的完整开源版本,包括基础模型、检查点、后训练模型和数据(项目地址:)。其参与者遍布美国、欧洲和亚洲等不同地区,既包括 Hugging Face、SemiAnalysis 等机构,也包括一些个人参与者。
随着模型的参数量,单一设备的算力已无法满足训练需求,因此需要将模型拆分为多个部分,并分配到不同的计算节点(通常是多个 GPU)上进行训练,这就是我们称之为分布式训练(Distributed Training)的方法。其原理就是将训练负担拆分至多个计算节点,利用并行计算缩短训练时间。
例如,Llama 3.1 模型的 4050 亿参数版本使用了 24,000 个 GPU 进行训练,每 16 个 GPU 形成一个节点对模型副本进行训练,然后各节点定期共享学习成果,以确保所有节点都在相同的模型状态上进行训练。
而去中心化训练实际上就是分布式训练的一种延续,我们可以简单地理解为,在去中心化训练中,这些节点之间的距离进一步拉大,它们横跨数个地区,甚至分布在不同大陆,这样就可以通过全球中小型算力节点的协同合作来减少对集中化算力中心的依赖。
然而,模型的训练过程需要节点之间持续进行通信,并交换大量的信息,以保证模型的参数更新一致性。因此其对于节点的通信带宽要求极高,通常情况下,这些节点彼此靠近,甚至在同一个建筑内,以便使用高带宽连接进行通信。
一旦将这一距离拉大,问题就会变得异常棘手。因为当各节点分布在不同地点时,它们之间的频繁同步就会引入延迟并增加带宽需求,再加上连接的不稳定性等问题,会严重降低训练性能。
具体来说,OpenDiLoCo 使用了一种本地随机梯度下降(SGD)算法,集成了内外两种不同的优化过程。内优化器 (AdamW) 负责对各个工作节点进行本地更新。每个工作节点根据其本地的数据对模型参数进行多步更新,这些更新通过使用 AdamW 优化器来实现,AdamW 结合了动量和权重衰减,使得训练过程更加稳定并防止过拟合。
而外优化器 (SGD with Nesterov Momentum) 通过伪梯度来周期性地同步各个工作节点。这些伪梯度代表本地更新的权重与原始权重之间的差异。在具体实现中,工作节点会在本地进行若干次更新后,将更新后的模型参数与原始参数进行比较,计算出伪梯度。
这些伪梯度随后被发送到其他节点进行同步更新,从而实现全局一致性。其中,Nesterov 动量的使用进一步提高了收敛速度,使得模型在减少同步频率的情况下,仍能保持良好的优化效果。
简单来说,OpenDiLoCo 的创新之处在于使用伪梯度进行同步,这大大减少了通信的频率和数据量。由于各个节点在本地进行多次更新后才会进行全局同步,模型可以在较长的时间内不受通信瓶颈的影响,从而显著降低带宽需求。
这样的更新方式以去中心化的方式进行,意味着每个工作节点独立地计算本地更新,仅偶尔与其他工作节点通信,大大降低了传统分布式方法中的通信开销。
此外,在 OpenDiLoCo 中,研究团对还引入了混合精度训练(FP16),通过将部分计算转换为 16 位浮点数,从而进一步降低了通信的数据量。在同步伪梯度时,采用 FP16 格式存储和传输伪梯度,使得通信的带宽要求进一步降低,同时在实验中验证了这种方式对模型性能没有明显的负面影响。
在 INTELLECT-1 训练中的另一个关键要素则是被称为 Prime 的可扩展的去中心化训练框架,主要用于支持 OpenDiLoCo 及其之外的其他去中心化训练算法。通过该框架,Prime Intellect 实现了对计算资源的动态管理,并确保了训练过程的鲁棒性。
据悉,Prime 框架首先通过引入 ElasticDeviceMesh 来实现容错通信,使得节点可以在加入或离开时自动调整进程组的大小,不会导致训练中断。这不同于传统的 torch distribution 中的 DeviceMesh,需要冷重启来调整进程组。
此外,Prime 使用了异步分布式检查点保存技术,将检查点数据首先保存到 RAM 支持的文件系统中,随后再异步上传到远程存储,从而最大限度地减少对训练过程的阻塞。对于新加入的节点,Prime 框架允许其通过对等节点的 sidecar HTTP 服务器获取最新的检查点数据,以快速同步和参与训练。
在通信优化方面,Prime 使用自定义的 Int8 All-Reduce 内核,通过对伪梯度进行 int8 量化来减少通信量,并在 C++ 中实现了流水线环型规约内核,以最大化带宽利用率。
并且,Prime 通过分片 DiLoCo 伪梯度并同时打开多个连接来执行 All-Reduce,从而提高了网络带宽利用率,并采用 VPN 技术优化节点间的对等连接,从而进一步改进数据包的路由和传输效率。
为了适应 10B 模型的训练,Prime 框架还结合了 PyTorch FSDP2 的 fully_shard API,将模型参数、梯度和优化器状态分片到各个 GPU 中,优化内存使用并提高集合效率。
由此,INTELLECT-1 得以在分布式网络中实现有效的容错和动态管理,从而突破全球分布式 AI 训练的限制。
最终,借助 Prime 框架,团队在五个国家和三大洲使用多达 112 个 H100 GPU 同时协作训练 100 亿参数模型,涉及 1 万亿个 token,实现了 83% 的总体计算利用率,在分布于整个美国的节点上进行专门训练时实现了 96% 的计算利用率,与集中式训练方法相比,开销较小。
其中,在美国本土范围内的训练,模型 FLOPS 利用率达到了 41.4%,全局同步时间为 103 秒;当节点分布扩展至美国与欧洲之间时,利用率下降至 37.1%,同步时间增至 382 秒;而在全球范围内的训练中,尽管通信延迟和带宽不稳定性增加,利用率仍保持在 36.2%,全局同步时间为 469 秒。这些结果表明,尽管地理分布对通信效率构成了挑战,但 PRIME 框架和 DiLoCo 算法的结合有效缓解了通信瓶颈。
在模型评估中,INTELLECT-1 在多个基准测试中表现优异,其性能与许多集中式训练的开源模型相当甚至有所超越。例如,在 MMLU 5-shot、ARC-Challenge 25-shot 等基准测试中,INTELLECT-1 取得的分数高于除 LLaMA2-13B 之外的其他同类模型。
作为全球首个 10B 参数的去中心化训练模型,INTELLECT-1 让我们看到,利用分布式计算资源来训练前沿的 AI 模型的可能性。
如果成功,这或许能为今后去中心化训练的发展乃至给 AI 发展模式带来启示。未来,任何人或许都可以通过贡献算力资源来参与到 AI 模型的训练和开发中,使得 AI 技术不再局限于少数几家科技公司的掌控之中,而是成为全社会共同的资源。
另据悉,按照 Prime Intellect 此前规划的去中心化 AI 总路线,INTELLECT-1 尚处于该公司计划的第二阶段。下一步,他们计划将去中心化训练扩展到更大、更强大的开放前沿科学、推理和编码模型。
这家公司于 2024 年 1 月由 Vincent Weisser 和 Johannes Hagemann 在美国成立,公司致力于建立一个去中心化的 AI 生态系统,允许参与者通过贡献算力、代码、数据、资本或专业知识来共同拥有 AI 模型。