TPU 上的 LLM 系统视图 (Part 0: Intro | Part 1: Rooflines)
训练 LLM (大型语言模型) 通常感觉像炼金术, 但理解和优化模型的性能并非必须如此. 本书旨在揭开语言模型扩展科学的神秘面纱: TPU (和 GPU) 如何工作以及它们之间如何通信, LLM 如何在真实硬件上运行, 以及如何在训练和推理过程中并行化你的模型, 使其在大规模上高效运行. 如果你曾想过“训练这个 LLM 应该有多昂贵”或“我自己需要多少内存来服务这个模型”或“什么是 AllGather”, 我们希望这本书对你有所帮助.
深度学习的很多方面仍然可以归结为一种黑魔法, 但优化模型性能并非必须如此 —— 即使是在巨大规模上! 相对简单的原则无处不在 —— 从处理单个加速器到数万个加速器 —— 理解它们可以让你做很多有用的事情:
背景要求: 我们假设你对 LLM 和 Transformer 架构有基本的了解, 但不一定了解它们如何大规模运行. 你应该了解 LLM 训练的基础知识, 最好对 JAX 有一些基本的熟悉. 一些有用的背景阅读可能包括关于 Transformer 架构的 这篇博客文章 和 原始的 Transformer 论文. 另外, 请查看 这个列表 以获取更多有用的同步和未来阅读材料.
目标与反馈: 读完本书后, 你应该能够轻松地为给定硬件平台上的 Transformer 模型估算最佳并行方案, 以及大致的训练和推理时间. 如果你做不到, 请给我们发邮件或留言! 我们很想知道如何能让内容更清晰.
你可能也会喜欢阅读关于 NVIDIA GPU 的新 第 12 节!
三四年前, 我认为大多数机器学习研究人员不需要理解本书中的任何内容. 但如今, 即使是“小型”模型也运行得如此接近硬件极限, 以至于进行新颖的研究需要你考虑规模化的效率.
“模型扩展”的目标是能够在增加用于训练或推理的芯片数量的同时, 实现吞吐量的成比例线性增长. 这被称为“强扩展”. 尽管增加额外的芯片 (“并行化”) 通常会减少计算时间, 但它也带来了芯片之间通信增加的代价. 当通信时间超过计算时间时, 我们就会变得“受通信限制”, 无法实现强扩展.
我们在本书中的目标是解释 TPU (和 GPU) 硬件如何工作, 以及 Transformer 架构如何演变为在当前硬件上表现良好. 我们希望这对于设计新架构的研究人员和致力于让当前一代 LLM 快速运行的工程师都有用.
本书的总体结构如下:
第 1 节 解释了屋顶线分析以及哪些因素会限制我们的扩展能力 (通信, 计算和内存). 第 2 节 和 第 3 节 详细讨论了 TPU 的工作原理, 既包括作为单个芯片, 也包括 —— 至关重要的 —— 作为一个具有有限带宽和延迟的互连芯片的互连系统. 我们将回答以下问题:
五年前, 机器学习拥有丰富多彩的架构格局 —— ConvNets, LSTMs, MLPs, Transformers —— 但现在我们主要只有 Transformer
第 5 节: 训练 和 第 7 节: 推理 是本文的核心, 我们在其中讨论了基本问题: 给定某个大小的模型和一定数量的芯片, 我该如何并行化我的模型以保持在“强扩展”状态? 这是一个简单的问题, 却有着惊人复杂的答案. 从高层次上讲, 有 4 种主要的并行技术用于在多个芯片上拆分模型 (数据, 张量, 流水线 和 专家), 以及许多其他技术来减少内存需求 (重物质化, 优化器/模型分片 (又名 ZeRO), 主机卸载, 梯度累积). 我们在这里讨论其中的许多技术.
我们希望在这些章节结束时, 你应该能够自己为新的架构或设置选择它们. 第 6 节 和 第 8 节 是将这些概念应用于 LLaMA-3 (一个流行的开源模型) 的实践教程.
最后, 第 9 节 和 第 10 节 介绍了如何在 JAX 中实现其中一些想法, 以及在出现问题时如何分析和调试代码. 第 12 节 是一个深入探讨 GPU 的新章节.
在整本书中, 我们都试图给你一些问题让你自己解决. 请不要有压力阅读所有章节或按顺序阅读. 并请留下反馈. 目前, 这是一个草稿, 将继续修订. 谢谢!
我们要感谢 James Bradbury 和 Blake Hechtman, 他们推导出了本文档中的许多想法.
这个系列可能比它需要的要长, 但我们希望这不会阻止你. 前三章是预备知识, 如果熟悉可以跳过, 尽管它们介绍了后面使用的符号. 最后三个部分可能是最实用的, 因为它们解释了如何处理真实模型.
第一部分: 预备知识
第 1 章: 屋顶线分析简介. 算法受到三件事的限制: 计算, 通信和内存. 我们可以用这些来近似我们的算法将运行多快.
第 2 章: 如何看待 TPU. TPU 是如何工作的? 这如何影响我们可以训练和服务的模型?
第 3 章: 分片矩阵以及如何乘以它们. 在这里, 我们通过我们最喜欢的操作: (分片) 矩阵乘法来解释模型分片和多 TPU 并行.
第二部分: Transformers
第 4 章: 你需要知道的所有 Transformer 数学. Transformer 在其前向和后向传播中使用了多少 FLOPs? 你能计算出参数的数量吗? 它的 KV cache (键值缓存) 的大小? 我们在这里详细讲解了这些数学.
第 5 章: 如何为训练并行化 Transformer. FSDP. Megatron 分片. 流水线并行. 给定一定数量的芯片, 我如何以尽可能高效的方式用给定的批量大小训练给定大小的模型?
第 6 章: 在 TPU 上训练 LLaMA 3. 我们将如何在 TPU 上训练 LLaMA 3? 需要多长时间? 成本是多少?
第 7 章: 关于 Transformer 推理的一切. 一旦我们训练了一个模型, 我们就必须为它提供服务. 推理增加了一个新的考虑因素 —— 延迟 —— 并改变了内存格局. 我们将讨论分离式服务的工作原理以及如何看待 KV caches.
第 8 章: 在 TPU 上服务 LLaMA 3. 在 TPU v5e 上服务 LLaMA 3 的成本是多少? 延迟/吞吐量的权衡是什么?
第三部分: 实践教程
第 9 章: 如何分析 TPU 代码. 真实的 LLM 从不像上面的理论那么简单. 在这里, 我们解释了 JAX + XLA 堆栈以及如何使用 JAX/TensorBoard 分析器来调试和修复实际问题.
第 10 章: 在 JAX 中编程 TPU. JAX 提供了一系列用于并行化计算的神奇 API, 但你需要知道如何使用它们. 有趣的例子和已解决的问题.
第四部分: 结论和附加内容
第 11 章: 结论和进一步阅读. 关于 TPU 和 LLM 的总结性思考和进一步阅读.
第 12 章: 如何看待 GPU. 一个关于 GPU 的附加章节, 它们如何工作, 如何联网, 以及它们的屋顶线与 TPU 有何不同.