❝假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,“一朝看尽长安花”似乎近在眼前 …… 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM 的训练或许对你有帮助。
近年来,语言模型越训越大已成为常态。大家通常会诟病这些大模型本身的信息未被公开以供研究,但很少关注大模型训练技术这种背后的知识。本文旨在以 1760 亿参数的语言模型 BLOOM 为例,阐明训练此类模型背后的软硬件工程和技术要点,以促进大家对大模型训练技术的讨论。
BLOOM 文档链接:
https://hf.co/bigscience/bloom
首先,我们要感谢促成或赞助我们这个小组最终完成了训练 1760 亿参数模型这一惊人壮举的公司、个人和团体。
然后,我们开始讨论硬件配置和主要技术组件。

以下是对本项目的简要总结:
硬件 | 384 张 80GB A100 GPU |
软件 | Megatron-DeepSpeed |
模型架构 | 基于 GPT3 |
数据集 | 含 59 种语言,共 3500 亿词元 |
训练时长 | 3.5 个月 |
人员组成
该项目由 Thomas Wolf (Hugging Face 联合创始人兼 CSO) 发想,他敢于与大公司竞争,提出不仅要训练出立于世界上最大的多语言模型之林的模型,还要让所有人都可以公开访问训练结果,圆了大多数人的梦想。
本文主要关注模型训练的工程方面。BLOOM 背后的技术中最重要的部分是分享专业知识并帮助我们进行编码和训练的人员和公司。
我们主要需要感谢 6 个群体:
HuggingFace 的 BigScience 团队投入了六名以上的全职员工全程参与了训练的研究和运行,他们还提供或报销了 Jean Zay 计算机之外的所有基础设施。
Microsoft DeepSpeed 团队,开发了 DeepSpeed,后来将其与 Megatron-LM 集成,其开发人员花费数周时间研究项目需求,并在训练前和训练期间提供了许多很棒的实用经验建议。
NVIDIA Megatron-LM 团队开发了 Megatron-LM,他们非常乐于回答我们的大量问题并提供一流的使用建议。
IDRIS / GENCI 团队管理着 Jean Zay 超级计算机,他们为该项目捐赠了大量的算力和强大的系统管理支持。
PyTorch 团队创建了一个超强的框架,其余软件都基于该框架,并且在准备训练期间非常支持我们,修复了多个 bug 并提高了我们所依赖的 PyTorch 组件的训练可用性。
BigScience 工程工作组志愿者 很难说出所有为该项目的工程方面做出贡献的杰出人物的名字,所以我只列举 Hugging Face 之外的几个关键人物,他们在过去 14 个月中为该项目奠定了工程基础:
Olatunji Ruwase、Deepak Narayanan、Jeff Rasley、Jared Casper、Samyam Rajbhandari 和 Rémi Lacroix
我们也感谢所有允许其员工为该项目做出贡献的公司。
概述
BLOOM 的模型架构与 GPT3 非常相似,只是增加了一些改进,本文稍后将对此进行讨论。
该模型是在 Jean Zay 上训练的,Jean Zay 是由 GENCI 管理的法国政府资助的超级计算机,安装在法国国家科学研究中心 (CNRS) 的国家计算中心 IDRIS。训练所需的算力由 GENCI 慷慨捐赠给本项目 (捐赠号 2021-A0101012475)。
训练硬件:
GPU: 384 张 NVIDIA A100 80GB GPU (48 个节点) + 32 张备用 GPU
每个节点 8 张 GPU,4 条 NVLink 卡间互联,4 条 OmniPath 链路
CPU: AMD EPYC 7543 32 核处理器
CPU 内存: 每个节点 512GB
GPU 显存: 每个节点 640GB
节点间连接: 使用 Omni-Path Architecture (OPA) 网卡,网络拓扑为无阻塞胖树
NCCL - 通信网络: 一个完全专用的子网
磁盘 IO 网络: GPFS 与其他节点和用户共享
Checkpoints:
主 checkpoints
https://hf.co/bigscience/bloom每个 checkpoint 含精度为 fp32 的优化器状态和精度为 bf16+fp32 的权重,占用存储空间为 2.3TB。如只保存 bf16 的权重,则仅占用 329GB 的存储空间。
数据集:
1.5TB 经过大量去重和清洗的文本,包含 46 种语言,最终转换为 350B 个词元
模型的词汇表含 250,680 个词元
更详细信息,请参阅 The BigScience Corpus A 1.6TB Composite Multilingual Dataset
https://openreview.net/forum?id=UoEw6KigkUn
176B BLOOM 模型的训练于 2022 年 3 月至 7 月期间,耗时约 3.5 个月完成 (约 100 万计算时)。
Megatron-DeepSpeed
176B BLOOM 模型使用 Megatron-DeepSpeed 进行训练,它结合了两种主要技术:
Megatron-DeepSpeed:
https://github.com/bigscience-workshop/Megatron-DeepSpeedDeepSpeed 是一个深度学习优化库,让分布式训练变得简单、高效且有效。
https://github.com/microsoft/DeepSpeedMegatron-LM 是由 NVIDIA 的应用深度学习研究团队开发的大型、强大的 transformer 模型框架。
https://github.com/NVIDIA/Megatron-LM
DeepSpeed 团队通过将 DeepSpeed 库中的 ZeRO 分片和流水线并行 (Pipeline Parallelism) 与 Megatron-LM 中的张量并行 (Tensor Parallelism) 相结合,开发了一种基于 3D 并行的方案。有关每个组件的更多详细信息,请参见下表。
请注意,BigScience 的 Megatron-DeepSpeed 是基于原始 Megatron-DeepSpeed 代码库,我们还在其上添加了不少代码。
BigScience 的 Megatron-DeepSpeed:
https://github.com/bigscience-workshop/Megatron-DeepSpeed原版的 Megatron-DeepSpeed:
https://github.com/microsoft/Megatron-DeepSpeed
下表列出了我们在训练 BLOOM 时各采用了两个框架的哪些组件:
组件 | DeepSpeed | Megatron-LM |
---|---|---|
ZeRO 数据并行 | 是 | |
张量并行 | 是 | |
流水线并行 | 是 | |
BF16 优化器 | 是 | |
CUDA 融合核函数 | 是 | |
数据加载器 | 是 |
请注意,Megatron-LM 和 DeepSpeed 都有流水线并行和 BF16 优化器实现,但我们使用 DeepSpeed 的实现,因为它们集成进了 ZeRO。
Megatron-DeepSpeed 实现了 3D 并行以允许大模型以非常有效的方式进行训练。我们简要讨论一下有哪些 3D 组件。
数据并行 (Data Parallelism,DP) - 相同的设置和模型被复制多份,每份每次都被馈送不同的一份数据。处理是并行完成的,所有份在每个训练步结束时同步。
张量并行 (Tensor Para