← Knowledge Notes
AI Engineering / Knowledge note · Chinese

LLM 分布式训练 / GPU 集群 / 推理优化(跨作者主题综合)

LLM 分布式训练综合。llm-interview-distributed(9 PDF / 分布式总览 + 流水线并行 + DataParallel/DDP + torch.multiprocessing + AMP 混合精度 + DeepSpeed + accelerate + ZeRO)+ vLLM / 推理优化栈。覆盖 4 大并行策略(DP/MP/PP/TP)、3D Parallelism、ZeRO 三阶段、Megatron + DeepSpeed 主流栈

Source collection:跨来源主题整理 · Published here:2026-09-26 · Note updated:2026-05-18

AI 工程Agent 工作流模型与评测

何时打开:你要训 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. 为什么需要分布式训练

LLM 面试 / 分布式训练 8 篇图解专题 §一:

单卡瓶颈 解法
显存不够 — 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)

LLM 面试 / 分布式训练 8 篇图解专题 §二:

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 数据并行系列

LLM 面试 / 分布式训练 8 篇图解专题 §三:

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 缓存

通用纪律:

  1. 不要用 nn.DataParallel(过时)
  2. DDP + bf16 是入门标配
  3. ZeRO 阶段按模型大小选(1/2/3)
  4. 3D Parallelism 是 100B+ 必选
  5. vLLM 是推理服务首选
  6. PagedAttention + Continuous Batching = 吞吐王道
  7. 量化(GPTQ/AWQ)在推理几乎免费提速 1.5-2x

13. 引用清单

来源与关联资料