何时打开:你要训 LLM(>13B) / 要做多机多卡 / 要选 DeepSpeed 还是 Megatron / 要做推理服务。本 wiki 把 9 PDF 整理成实战栈。
一句话核心:4 大并行 = DP + MP + PP + TP + ZeRO 三阶段 + 3D Parallelism = TP * PP * DP + DeepSpeed 普适 + Megatron 训练前沿 + vLLM 推理。
0. 视角说明
主源:LLM 面试 / 分布式训练 8 篇图解专题 9 份 PDF / 图解专题。
1. 为什么需要分布式训练
| 单卡瓶颈 | 解法 |
|---|---|
| 显存不够 — 65B 模型 fp16 = 130GB,A100 80GB 装不下 | 模型并行 / ZeRO |
| 计算时间太长 — 13B 模型预训练单卡 100+ 天 | 数据并行 |
| batch 太小不稳 — 单卡 batch=8 噪声大 | 分布式扩 batch |
| 多机协调 — 节点间通信 | NCCL / Gloo / MPI |
2. 4 大并行策略
| 策略 | 思路 | 通信开销 | 适用 |
|---|---|---|---|
| Data Parallel(DP) | 各 GPU 复制完整模型,分不同数据 | AllReduce 梯度 | 模型能装下单卡 |
| Model Parallel(MP) | 模型不同部分在不同 GPU | 前向 / 反向激活 | 模型超大 |
| Pipeline Parallel(PP) | 不同层在不同 GPU,流水线执行 | 层间 activation | 跨机 |
| Tensor Parallel(TP) | 单层 tensor 切分多 GPU | 层内 AllReduce | 单机内 |
2.1 实际组合(3D Parallelism)
Megatron-Turing NLG 530B 用的:
- TP=8(单机 8 卡内)
- PP=35(跨机)
- DP=替换
总 GPU = TP × PP × DP。
3. 流水线并行(PP)
3.1 流水线思想
模型: Layer1 → Layer2 → Layer3 → Layer4
分到 4 个 GPU:
GPU0: Layer1
GPU1: Layer2
GPU2: Layer3
GPU3: Layer4
mini-batch 切成 micro-batch:
micro1, micro2, micro3, micro4
执行流水线:
t=1: GPU0: micro1
t=2: GPU0: micro2 | GPU1: micro1
t=3: GPU0: micro3 | GPU1: micro2 | GPU2: micro1
...
3.2 痛点:气泡(Bubble)
GPU 等数据空闲 → 利用率下降。
3.3 解法
| 调度 | 特点 |
|---|---|
| GPipe(Google) | 同步流水 / 等 mini-batch 完成 |
| PipeDream(Microsoft) | 异步流水 / 1F1B 调度 |
| 1F1B(one-forward-one-backward) | 减气泡 / Megatron 主用 |
| Interleaved 1F1B | 进一步减气泡 |
| DeepSpeed PP | 集成 ZeRO |
4. PyTorch 数据并行系列
4.1 nn.DataParallel(DP,过时)
model = nn.DataParallel(model)
特点:
- 单进程多线程
- GIL 锁限制
- 主 GPU 显存压力大(聚合所有梯度)
- 不推荐(已过时)
4.2 nn.parallel.DistributedDataParallel(DDP,主流)
import torch.distributed as dist
dist.init_process_group(backend="nccl")
model = DDP(model, device_ids=[local_rank])
特点:
- 多进程(无 GIL 锁)
- Ring AllReduce 通信
- 各 GPU 独立梯度计算
- 主流选择
4.3 torch.multiprocessing
LLM 面试 / 分布式训练 8 篇图解专题 §file_48:
import torch.multiprocessing as mp
mp.spawn(train_worker, args=(world_size,), nprocs=world_size)
用于启动多进程训练(配合 DDP)。
5. AMP 混合精度训练
LLM 面试 / 分布式训练 8 篇图解专题 §file_49:
5.1 fp16 vs bf16
| 格式 | 范围 | 精度 | 适用 |
|---|---|---|---|
| fp16 | 较窄 | 高 | 训推都行 / 易溢出 |
| bf16 | 同 fp32 | 较低 | 训练推荐 / 不溢出 |
| fp32 | 大 | 高 | 累积 / 优化器状态 |
5.2 AMP 流程
forward: fp16/bf16
loss: fp32
backward: fp16/bf16(梯度)
optimizer step: fp32(参数 + Adam 状态)
gradient scaler: 防止 fp16 下溢
5.3 关键 API
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
with autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
6. DeepSpeed
LLM 面试 / 分布式训练 8 篇图解专题 §file_50:
6.1 DeepSpeed 是什么
Microsoft 出的训练框架,集成:
- ZeRO(三阶段优化器 / 梯度 / 参数分摊)
- Pipeline Parallel
- Mixed Precision
- CPU/NVMe Offload
6.2 ZeRO 三阶段
LLM 面试 / 分布式训练 8 篇图解专题 §file_52:
| 阶段 | 分摊什么 | 显存节省 | 通信开销 |
|---|---|---|---|
| ZeRO-1 | 优化器状态(Adam m,v) | 4x | 基线 |
| ZeRO-2 | + 梯度 | 8x | 略增 |
| ZeRO-3 | + 参数 | N x(N=GPU 数) | 显著增 |
ZeRO-Offload:把优化器状态 / 参数 swap 到 CPU(更省显存,更慢)。
6.3 何时用 ZeRO
| 场景 | 选择 |
|---|---|
| <13B 模型 / 单机多卡 | ZeRO-1 或 ZeRO-2 |
| 13B-65B / 多机 | ZeRO-3 |
| >100B | 3D Parallelism + ZeRO |
| 超大单卡 | ZeRO-Offload |
6.4 DeepSpeed Config 示例
{
"fp16": {"enabled": true},
"zero_optimization": {
"stage": 3,
"offload_optimizer": {"device": "cpu"},
"offload_param": {"device": "cpu"}
},
"gradient_accumulation_steps": 4
}
7. Megatron-LM
7.1 特点
- NVIDIA 出
- 强项:Tensor Parallel + Pipeline Parallel
- 训练前沿(530B / GPT-3 175B 大量用)
7.2 Megatron vs DeepSpeed
| 维度 | Megatron | DeepSpeed |
|---|---|---|
| 强项 | TP + PP | ZeRO |
| 门槛 | 高(C++ kernel) | 低(Python API) |
| 适用 | 训练前沿大模型 | 中小模型 + Offload |
| 混合用 | Megatron-DeepSpeed | 两者长处合一 |
8. Accelerate(HuggingFace)
LLM 面试 / 分布式训练 8 篇图解专题 §file_51:
8.1 一句话定位
HuggingFace 出的轻量分布式封装:让 PyTorch 代码 5 行改成多机多卡。
8.2 核心 API
from accelerate import Accelerator
accelerator = Accelerator()
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
for batch in dataloader:
output = model(batch)
loss = criterion(output, batch.labels)
accelerator.backward(loss)
optimizer.step()
8.3 何时用
- 不想写 DeepSpeed config
- 简单 DDP / fp16 / 多卡训练
- 适合 SFT / LoRA 等中小训练
9. 通信后端
| 后端 | 适用 |
|---|---|
| NCCL | NVIDIA GPU(主流) |
| Gloo | CPU 训练 / 跨 GPU 厂商 |
| MPI | HPC 集群 |
关键参数:
world_size= 总 GPU 数rank= 全局 GPU 编号local_rank= 本节点 GPU 编号MASTER_ADDR / MASTER_PORT= rendezvous
10. 推理优化栈(独家整合)
10.1 主流推理引擎
| 引擎 | 特点 |
|---|---|
| vLLM | PagedAttention / Continuous Batching / 吞吐王 |
| TensorRT-LLM | NVIDIA / 极致延迟 |
| TGI(Text Generation Inference) | HuggingFace 出 / 易用 |
| llama.cpp | CPU + 量化 / Mac 友好 |
| MLC-LLM | 跨平台 / WebGPU |
| SGLang | 结构化输出 / Radix Tree 缓存 |
10.2 PagedAttention(vLLM 核心)
- 把 KV Cache 分页管理(类似 OS 虚拟内存)
- 解决传统 KV Cache 碎片问题
- 吞吐量 2-3x 提升
10.3 Continuous Batching
- 不等同 batch 内所有请求都结束
- 完成的 slot 立刻放入新请求
- 吞吐 2-5x
10.4 量化推理
| 方法 | 精度 | 速度提升 |
|---|---|---|
| GPTQ | INT4 / 后训练 | 1.5-2x |
| AWQ | INT4 / 重要权重保留高精度 | 1.5-2x |
| GGUF(llama.cpp) | INT4-INT8 | CPU 友好 |
| SmoothQuant | INT8 / 平滑权重和激活 | 1.5x |
11. 训练资源经验估算
11.1 训练时间公式
训练 token 数 / (GPU 数 × 每 GPU 吞吐 token/s) = 总时间
11.2 主流模型训练成本(参考)
| 模型 | GPU | 时间 | 估算成本 |
|---|---|---|---|
| GPT-3(175B) | 1024 A100 | 1 月 | ~$5M |
| LLaMA-2 70B | 2048 A100 | 数周 | ~$3M |
| GPT-4 | 万 H100 | 数月 | ~$100M |
| DeepSeek-V3 | 2048 H800 | 2 月 | ~$5M(独家优化) |
12. 怎么用 —— 按身份的分布式路径
| 你是谁 | 主用方法 | 起点 |
|---|---|---|
| 入门多卡训练 | DDP + Accelerate | accelerator.prepare() |
| 训练 13B 模型 | ZeRO-2 + DeepSpeed | stage=2 + AMP |
| 训练 65B+ 模型 | 3D Parallelism + Megatron-DeepSpeed | TP=8 + PP=8 + ZeRO-3 |
| 单卡微调大模型 | QLoRA + Offload | NF4 + ZeRO-Offload |
| 要推理服务 | vLLM + PagedAttention | OpenAI-compatible API |
| 要 Mac 本地跑 | llama.cpp / MLC | GGUF 量化 |
| 要结构化输出 | SGLang | Radix Tree 缓存 |
通用纪律:
- 不要用 nn.DataParallel(过时)
- DDP + bf16 是入门标配
- ZeRO 阶段按模型大小选(1/2/3)
- 3D Parallelism 是 100B+ 必选
- vLLM 是推理服务首选
- PagedAttention + Continuous Batching = 吞吐王道
- 量化(GPTQ/AWQ)在推理几乎免费提速 1.5-2x
13. 引用清单
- LLM 面试 / 分布式训练 8 篇图解专题 —— 9 PDF / 总览 + 流水线 + DP/DDP + multiprocessing + AMP + DeepSpeed + accelerate + ZeRO
- LLM 基础(Transformer / Attention / 三种 PLM)(跨作者主题综合) —— 基础架构(配合阅读)
- LLM 微调 / LoRA / RLHF / DPO(跨作者主题综合) —— 微调显存 + LoRA 应用
- Scaling Law / AGI 时间表 / Software 3.0(跨作者主题综合) —— Scaling Law / 训练规模 / 算力经济(配合阅读)