LogoCookLLM文档
LogoCookLLM文档
首页CookLLM

原理精讲

词元化
Tokenization 基础BPE 算法详解GPT 系列 TokenizerBPE 训练工程化
模型架构
Transformer LM
从 token ids 到 logitsEmbedding 与 LM Head
Attention 机制
Self-Attention 到 GQAAttention Sink
位置编码
位置编码基础RoPE 数学推导RoPE 代码实现长度外推
GPU 编程基础
GPU 架构基础张量布局Triton 入门:向量加法
FlashAttention
Flash Attention 原理详解从朴素实现到 Auto-TuningBlock Pointer 与多维支持Causal Masking 优化Grouped Query Attention反向传播实现
分布式训练
数据并行ZeRO 优化器全分片数据并行张量并行流水线并行多维混合并行
推理优化
KV CacheContinuous BatchingPagedAttention

动手训练

概述
预训练
预训练数据Tokenizer 训练模型架构数据流水线训练循环监控与验证
X (Twitter)
系统工程分布式训练

ZeRO 优化器

会员专享

渐进式去冗余,从优化器状态到参数的三级分片

在权益中心获取代码

上一章我们看到 DDP 的内存问题:为了保证训练一致性(通过 All-Reduce 同步梯度),每个 GPU 都需要存储完整的模型状态。4 个 GPU 就是 4 份完整副本(参数、梯度、优化器状态)。ZeRO(Zero Redundancy Optimizer)的核心思想很直接:既然最终状态是一致的,那就每个 GPU 只存一部分,需要的时候再通信取回。

训练状态的冗余分析

先量化一下 DDP 的浪费。以混合精度 + Adam 为例,NNN 个 GPU 训练一个 Φ\PhiΦ 参数的模型,每个 GPU 需要存储:

  • 参数(fp16):2Φ2\Phi2Φ bytes
  • 梯度(fp16):2Φ2\Phi2Φ bytes
  • 优化器状态(fp32):12Φ12\Phi12Φ bytes(参数副本 + 一阶矩 + 二阶矩)

合计 16Φ16\Phi16Φ bytes,其中优化器状态占了 75%。

NNN 个 GPU 就是 NNN 倍冗余:全局存储 16NΦ16N\Phi16NΦ bytes,但实际只需要 16Φ16\Phi16Φ bytes。ZeRO 的三个 Stage 就是按从大到小的顺序,依次消除这些冗余。

登录以继续阅读

这是一篇付费内容,请登录您的账户以访问完整内容。

数据并行

理解通信原语和 DDP 的梯度同步机制

全分片数据并行

理解 FSDP 的 Intra-Tensor 分片与 All-Gather/Reduce-Scatter 通信模式

目录

训练状态的冗余分析
ZeRO Stage 1:分片优化器状态
参数分配策略
梯度同步
训练循环对比
ZeRO Stage 2:分片梯度
ZeRO Stage 3:分片参数
参数分片
通信模式
通信开销对比
ZeRO-3 的分片方式:Inter-Tensor
总结