引言
今天要推荐的这份资料是近日(2025年2月19日)由Huggingface发布的一份关于从 1 到 1000 多个 GPU 训练集群上训练 LLMs 的全面指南。包括硬件配置、软件工具(例如 PyTorch、Hugging Face 库)、优化策略等方方面面。
- 系统地讲解如何将大语言模型训练从单GPU扩展到数千 GPU 规模
- 让复杂的分布式训练技术变得更容易理解和实践
- 弥补当前开源领域中分布式训练知识零散的问题
这份指南干货满满,让关于大规模LLM训练的知识大众化。不论你是从1个GPU起步,还是协调成千上万的GPU,这本指南将一步步带你走完这段旅程。此外,官方已经翻译为中文版,非常的暖心! 原始英文版和中文版链接见本文末尾。
目录
概览
单卡训练
- Transformer 中的显存使用
- 分析显存使用
- 权重、梯度和优化器状态的显存占用
- 激活值占用
- 激活重计算 (Activation recomputation)
- 梯度累加 (Gradient accumulation)
- 分析 GPU 计算与通信
数据并行 (Data Parallelism)
- 优化一:在反向传播中重叠梯度同步
- 优化二:对梯度进行 bucket 化
- 优化三:梯度累加的结合
- 重新审视 global batch size
- 到目前为止的旅程
- ZeRO (Zero Redundancy Optimizer)
- 再看内存需求
- ZeRO-1:分区优化器状态
- ZeRO-2:添加梯度分区
- ZeRO-3:添加参数分区
张量并行 (Tensor Parallelism)
- Transformer块中的张量并行
- 序列并行 (Sequence Parallelism)
上下文并行 (Context Parallelism)
- 探索环形注意力 (Ring Attention)
- 之字形环形注意力 (Zig-Zag Ring Attention)
- 平衡计算的实现
流水线并行 (Pipeline Parallelism)
- 在不同节点上拆分层 —— 先前向,再反向
- 一前一后 (1F1B) 与 Llama 3.1 方案
- 交错阶段
- 零气泡 (Zero Bubble) 与 DualPipe
专家并行 (Expert parallelism)
5D 并行概览
找到最佳训练配置
- 步骤1:将训练步骤适配到内存中
- 步骤2:实现目标全局批次大小
- 步骤3:优化训练吞吐量
- 成千上万个配置的基准测试
- 基准测试中的经验教训
深入GPU - 融合、线程化、混合
- GPU简介
- 如何使用内核提高性能?
- 内存合并
- 分块处理 (Tiling)
- 线程粗化 (Thread Coarsening)
- 最小化控制分歧
- 融合内核 (Fused Kernels)
- Flash Attention 1-3
- 混合精度训练 (Mixed Precision Training)
- FP16和BF16训练
- FP8预训练
结论
- 那么,接下来呢?
- 致谢
- 讨论页面
参考文献
- 里程碑式的LLM大规模训练相关的论文
- 训练框架
- 调试
- 分布式技术
- 硬件
- 其他
附录
- A0: 并行编程速成课程
- 广播 (Broadcast)
- 归约 & 全局归约 (Reduce & AllReduce)
- Gather & AllGather
- Scatter & ReduceScatter
- 快速关注环形AllReduce
- Barrier
- NCCL: NVIDIA Collective Communications Library
- A1: 分布式训练性能分析
- 内核
- CPP扩展
- A2: LLM训练中的典型规模
- A3: 计算/通信重叠的数学
- 数据并行通信分析
- ZeRO-3 (FSDP) 通信分析
- TP通信分析
- PP通信分析
原文
中文版:
https://huggingface.co/spaces/Ki-Seki/ultrascale-playbook-zh-cn
英文版:
https://huggingface.co/spaces/nanotron/ultrascale-playbook