,

LLM是如何训练出来的——训练工程科普

我们在多达 512 个 GPU 上进行了超过 4000 次扩展实验,并测量了吞吐量(标记大小)和 GPU 利用率(标记颜色)。需要注意的是,在本可视化中,两者都根据模型大小进行归一化。

数千块 GPU 协同工作,完美协调——这正是当今最强大 AI 模型所需的训练规模。直到最近,这种规模还只属于顶尖研究实验室的专有领域。开源让这块领域发生了翻天覆地的变化,但并没有彻底改变现状。是的,你可以下载最新的 Llama 或 DeepSeek 模型。是的,你能阅读它们的 技术和 实验报告。但最具挑战性的部分——用于协调 GPU 训练这些超大模型的训练代码、必要的知识和技术——仍然极其复杂,零散地分布于多篇论文或私有代码库中。

本开源书将尝试改变这一点。我们将从基础开始,循序渐进地带你了解如何将大型语言模型的训练从单卡 GPU,扩展到数十、数百甚至数千个 GPU,并用实践代码示例和可复现的基准来演示理论。

随着用于训练这些模型的集群规模不断增大,出现了如数据并行、张量并行、流水线并行、上下文并行,以及 ZeRO 或核融合等技术,以确保 GPU 始终保持高利用率,从而显著缩短训练时间并最大化昂贵硬件的使用效率。更进一步地,随着对大型模型的微调在真实应用中越来越受重视,人们发现微调在特定领域数据上能带来更好的效果,这通常也需要相同的分布式训练技术。在本书中,我们将从最简单的方法到最精巧的方法,依次介绍所有这些技术,同时围绕单一的故事线说明每种方法的来龙去脉。

本书假设你对当前 LLM 架构有一些基本了解,并大致熟悉深度学习模型的训练原理,但在分布式训练方面可以是新手。如果有需要,可在 DeepLearning.ai 或 PyTorch 教程等地方学习模型训练的基础知识。可以将本书视为我们第一篇关于预训练数据处理博客——即“FineWeb 博客”——的后续篇章。读完这两篇博客后,你几乎掌握了当今高性能 LLM 构建所需的核心知识,只差一些关于数据混合和模型架构选择等“最后的调味料”就可以完整配方了(敬请期待第三部分……)。

本书基于以下 三个核心支柱

简明的原理与概念简介:在开始编码和实验前,我们希望先高层次地理解每种方法如何工作,及其优劣势何在。你会了解到语言模型在训练时哪些部分会占用最多显存,以及何时占用显存。你会了解到如何通过对模型进行并行拆分来缓解显存的限制,并如何通过扩展 GPU 集群来提高吞吐量。于是你就能理解下面这个小工具是如何计算 Transformer 模型显存占用的:

模型地址:https://huggingface.co/spaces/Ki-Seki/ultrascale-playbook-zh-cn

(如果你对这个小工具里发生的事情还摸不着头脑,不用担心——这正是我们要讲的内容。)

虽然上面的小工具给出的是理论分析,但我们还做了一个 在线工具,可用来预测训练过程中的实际显存用量:

预测显存占用工具截图

清晰的代码实现:理论是一方面,但在真正实现过程中会遇到各种边界情况以及重要的细节。因此我们会在可能的地方关联到实现参考。我们会根据情况引用两份代码:

  • picotron 仓库是为教学目的而构建的,会以简短的单文件形式实现概念,便于独立学习。
  • 而想看生产级别代码则可参考 nanotron,它是 Hugging Face 内部用于训练的实际生产代码库。

真实的训练效率基准:最后,如何在实际环境中真正扩展 LLM 训练还要取决于你的硬件环境,比如 GPU/TPU 芯片种类、网络带宽等。因此我们不可能给出一个适用于所有硬件的统一方案,但我们会介绍评测方法,而我们也已经在自己的集群上进行了此类评测!我们在最多 512 块 GPU 上运行了超过 4100 个分布式实验(加上测试一共做了 16000 多次),以探索众多可能的分布式训练布局和模型规模。

Leave a Reply

Your email address will not be published. Required fields are marked *