AI 入门到精通 06 · AI 训练实战
学校教你 "怎么写模型",工业界要你 "怎么把训练跑稳跑快跑出效果"。 90% 的工程师卡在这一章 —— 论文复现不了、loss 训不动、显存爆了、几张卡跑不起来。
一、训练一个模型涉及哪些事
数据 → 实验设计 → 分布式 → 训练循环 → 监控 / 调参 → checkpoint → 评测 → 复盘
每一环都能写一本书。本章给你"先跑通、再调优"的完整路径。
二、知识点
2.1 数据工程(决定上限)
- 数据采集:自有日志、爬取(合规)、合成数据、开源数据集(HF Hub / opendatalab / ModelScope)。
- 数据清洗:去重(MinHash / SimHash / Bloom Filter)、去毒、去 PII、语种识别、质量打分(fastText / 困惑度过滤)。
- 数据混合:不同来源 / 不同领域的配比;DoReMi、RegMix 等自动配比方法。
- 数据格式:parquet / arrow / WebDataset / Mosaic Streaming / HF datasets streaming —— 大规模训练用 streaming 才不会撑爆磁盘。
- 打 token / 打包:高效 packing(不浪费 padding)、blocked sequence 策略。
- 数据版本化:DVC / LakeFS / 自建 manifest;可复现的关键。
2.2 实验设计
- 小步快跑:先在 1% 数据 + 小模型上跑通,再扩规模。
- Sanity check:单样本能过拟合吗?前 100 step loss 走势对不对?
- 对照组:每个 trick 都要有 ablation;一次只改一个变量。
- 种子 (seed):固定 seed,不然没法对比。
- 预算管理:用小模型做 scaling law 推算大模型最优配置(learning rate / batch size / 数据量)。
2.3 分布式训练
按"显存 / 算力 / 通信"三个维度展开:
| 并行策略 | 拆什么 | 适用场景 |
|---|---|---|
| Data Parallel (DDP) | 数据 | 单机多卡,模型放得下单卡 |
| ZeRO-1/2/3 (DeepSpeed) | 优化器状态 / 梯度 / 参数 | 显存吃紧 |
| FSDP (PyTorch) | 同 ZeRO-3 思路 | PyTorch 原生 |
| Tensor Parallel (TP) | 单层权重切分 | 模型单卡放不下,机内多卡 |
| Pipeline Parallel (PP) | 模型按层切到多机 | 跨节点扩展 |
| Sequence Parallel (SP) | 长序列切分 | 长上下文训练 |
| Expert Parallel (EP) | MoE 专家分布 | MoE 模型 |
| 3D / 4D / 5D Parallel | 上述组合 | 千亿参数及以上 |
工具栈:torch.distributed / DeepSpeed / Megatron-LM / Megatron-DeepSpeed / accelerate / Colossal-AI / NVIDIA NeMo / Mosaic Composer。
2.4 训练加速 trick
- 混合精度:bf16(H100 / A100 首选)/ fp16;AMP / GradScaler。
- 梯度 checkpointing:用算力换显存。
- Flash Attention 2 / 3:必开。
- Fused kernels:FusedAdam / FusedRMSNorm / FusedSwiGLU。
torch.compile/ TorchInductor:免费加速 10-30%。- CPU offload / NVMe offload:极限省显存。
- Activation Checkpointing / Sequence Packing / Variable Length Attention。
- Communication overlap:通信和计算重叠。
2.5 调参与训练动力学
- 学习率:最重要的超参;warmup + cosine decay 是默认范式。
- Batch size:和 learning rate 有平方根关系(线性缩放规则)。
- Weight decay:现代 Transformer 一般 0.1。
- Gradient clipping:global norm 1.0 是默认。
- Loss spike:梯度 / 数据问题;解决:跳过坏 batch、回滚 checkpoint、降低 LR、改 init。
- 看 loss 曲线判断问题:欠拟合 / 过拟合 / 数据 bug / LR 太大 / 优化器问题各有特征。
2.6 监控、可观测性、复盘
- 指标监控:loss / accuracy / 学习率 / 梯度范数 / 参数范数 / 激活分布。
- 资源监控:GPU 利用率 (
nvidia-smi) / 显存 / NVLink / 网络 / 磁盘 IO。 - 实验跟踪:W&B / TensorBoard / MLflow / Aim。
- 配置管理:Hydra / OmegaConf / 自建 yaml。
- 故障恢复:checkpoint 自动保存 + 自动 resume + 弹性训练(PyTorch Elastic / TorchX)。
- 训练日志:长跑必须有 structured log,出了问题能回查每一步。
2.7 强化学习训练(chap 05 RLHF / RLVR 的工程细节)
- PPO / GRPO / RLOO 的实现要点。
- Reward Model 训练:偏好对齐、过拟合监控。
- Rollout / Replay Buffer / Advantage 估计。
- 采样 - 训练分离架构:vLLM 做 rollout + 训练框架做更新。
- Reward Hacking 检测与防御。
- 框架:OpenRLHF / veRL (字节) / TRL / LLaMA-Factory。
三、参考资料
系统类
- Hugging Face 《Performance and Scalability》文档 —— 单卡 → 多卡 → 多机的完整指南。
- DeepSpeed 官方文档 + ZeRO 论文。
- Megatron-LM 论文 + 仓库 —— 学习 TP / PP 的标杆。
- PyTorch FSDP / DTensor 文档。
- NVIDIA Deep Learning Performance Guide。
- 《How to Scale Your Model》(Google JAX 团队的最新指南)。
论文 / 技术报告
- ZeRO (Rajbhandari 2019) / ZeRO-Offload / ZeRO-Infinity。
- Megatron-LM (2019) — Tensor Parallel 经典。
- GPipe / PipeDream — Pipeline Parallel。
- FlashAttention 1/2/3。
- DeepSeek-V3 Technical Report — 公开的最详尽训练实践之一。
- Llama 3 Technical Report。
- Pre-training Data Curation 相关综述。
实战材料
- Hugging Face 《The Smol Training Playbook》。
- Stas Bekman 《Machine Learning Engineering Open Book》 —— 工业界最实用的训练手册。
- Eleuther AI Cookbook —— 训练大模型的踩坑合集。
- [Anthropic / OpenAI / DeepMind blog 中关于训练的工程文章]。
四、动手实践
按算力分档,挑你能负担的做。
入门(单卡 24G 显存以下)
- 手搓 DDP:用
torch.distributed.launch在 CPU 多进程上模拟多 worker,理解通信。 - LoRA 微调:用 unsloth / LLaMA-Factory 在 7B 模型上微调,体会显存优化的威力。
- 加 Flash Attention + bf16 + torch.compile:测训练速度提升。
- 数据流水线优化:自己写一个 streaming dataset,对比磁盘版本的吞吐。
- 监控:把上面所有训练接 W&B,建一个 dashboard。
进阶(多卡 / 租云)
- 多机多卡训练:在 2 台 8 卡机器上跑一个 1.5B 模型 SFT;走通 NCCL / 网络配置。
- ZeRO-3 / FSDP 实操:训练一个 7B 模型,对比单机多卡 vs 多机多卡的 throughput。
- 从零做一次预训练:拿 FineWeb 一个子集,预训练一个 200M-1B 的中文 / 英文小模型。
- 完整 RL 流程:用 OpenRLHF / veRL 跑一遍 SFT + RM + PPO(或 SFT + DPO),数据集用公开偏好集。
- 复现 RLVR:在数学数据上用 GRPO 训一个推理模型,复现 R1-zero 的某种小规模版本。
- debug 一次失败的训练:故意把 LR 调爆 / 数据混入脏数据,记录现象、定位、修复全过程,写复盘。
五、通关标志
- 能在多机多卡上跑通一次完整训练 (SFT 或 pretrain)。
- 看 loss 曲线 + GPU 利用率,能给出"瓶颈在哪、怎么优化"的判断。
- 能讲清楚 ZeRO 1/2/3、TP、PP 的区别和适用场景。
- 能用 Flash Attention / bf16 / gradient checkpointing 把 OOM 救回来。
- 能从零规划一次微调实验:数据准备 → 配置 → 训练 → 评测 → 部署。
- 你的 wandb 上至少有 50+ 次实验记录。
下一站:07. AI 推理与部署