第1章 课程导入:大模型训练挑战、DeepSpeed简介、课程目标与学习路径

当你第一次尝试把参数量推到十亿、百亿甚至千亿级别时,很快会发现:真正拖慢进度的往往不是模型结构本身,而是显存、带宽、通信与并行策略之间的连锁约束。一个 70B 参数的模型,仅以 FP16 存储权重就需要约 140GB 显存,再加上梯度、优化器状态与激活值,单卡几乎不可能容纳。DeepSpeed 正是在这种“单卡放不下、多卡跑不快、并行写不动”的背景下,成为大模型训练优化的重要工具库。

一、大模型训练的三重挑战

大模型训练的核心矛盾可以概括为“显存墙、通信墙、效率墙”。显存墙来自模型状态与激活值:权重、梯度、Adam 优化器状态(一阶矩与二阶矩)在混合精度下通常需要模型参数量的 16 倍以上字节数。通信墙来自数据并行中的梯度 AllReduce、张量并行中的高频 AllGather/ReduceScatter,以及流水并行中的点对点传输。效率墙则表现为 GPU 利用率低、气泡率高、检查点保存慢、长尾任务拖垮整体吞吐。

下面这张图展示了单卡训练时显存的主要占用来源,以及 DeepSpeed 介入后可以优化的方向。可以看到,优化器状态往往是最大的一块,而 ZeRO 正是从这里切入。

单卡显存占用与 DeepSpeed 优化切入点 模型权重 FP16 约 2 字节/参数 梯度 FP16 约 2 字节/参数 优化器状态 FP32(一阶矩 + 二阶矩 + 主权重) 约 12 字节/参数 激活值与临时缓冲 随 batch 与序列长度增长 DeepSpeed ZeRO 主要切分:优化器状态 → 梯度 → 参数;Offload 可进一步转移到 CPU/NVMe

二、DeepSpeed 是什么

DeepSpeed 是微软开源的大模型训练优化库,核心能力包括 ZeRO 显存优化、混合精度训练、梯度累积、梯度检查点、Offload、通信压缩、流水并行、张量并行以及推理加速。它并不是一个“替代 PyTorch”的框架,而是以轻量方式嵌入现有训练脚本:通常只需几行初始化代码和一个 JSON 配置文件,就能把单卡脚本扩展到多卡、多机甚至异构集群。

从设计哲学看,DeepSpeed 强调“配置驱动”和“渐进式优化”。你可以先跑通单卡,再逐步开启 ZeRO-1、ZeRO-2、ZeRO-3,最后叠加 Offload 与通信优化。这种路径对初学者非常友好,也便于在生产环境中按硬件条件做取舍。

核心判断:DeepSpeed 解决的不是“模型能不能收敛”,而是“在给定硬件预算下,能不能训得下、训得快、训得稳”。

三、典型场景:从单卡到多卡的迁移

假设你有一个 7B 模型,单卡 A100 80GB 在 batch size 为 1 时已经接近显存上限。此时可以按以下顺序尝试:

  1. 开启 ZeRO-1,切分优化器状态,显存下降最明显,通信量增加较少。
  2. 若仍不足,升级到 ZeRO-2,同时切分梯度,进一步释放显存。
  3. 若模型继续增大,使用 ZeRO-3 切分参数,配合 CPU Offload 或 NVMe Offload。
  4. 若吞吐仍不理想,再考虑张量并行、流水并行或序列并行。

一个最小化的 DeepSpeed 启动配置如下,展示了 ZeRO-2 与混合精度的基本组合:

{
  "train_batch_size": 32,
  "gradient_accumulation_steps": 4,
  "fp16": {
    "enabled": true,
    "loss_scale": 0
  },
  "zero_optimization": {
    "stage": 2,
    "allgather_partitions": true,
    "reduce_scatter": true,
    "overlap_comm": true
  }
}

启动命令通常为:

deepspeed --num_gpus=8 train.py \
  --deepspeed ds_config.json \
  --model_name_or_path ./model

四、课程目标与学习路径

本课程的目标不是让你背诵配置项,而是建立“问题—机制—配置—验证”的闭环能力。学完后,你应该能够:判断当前瓶颈属于显存、通信还是计算;选择合适的 ZeRO 阶段与并行策略;读懂 DeepSpeed 日志中的关键指标;在真实训练任务中完成调参与排障。

阶段 核心内容 产出能力
入门 环境安装、配置结构、单卡跑通 能启动一个 DeepSpeed 训练任务
进阶 ZeRO-1/2/3、Offload、混合精度 能根据显存与吞吐选择优化级别
并行 数据并行、张量并行、流水并行 能组合并行策略扩展到大模型
调优 通信压缩、检查点、性能分析 能定位瓶颈并稳定提升吞吐
选型 DeepSpeed 与 FSDP、Megatron 等对比 能结合团队与硬件做技术选型

学习建议:每学一个配置项,都在小模型上做一次对照实验。记录显存峰值、每秒迭代次数和通信耗时,比单纯看文档更容易形成直觉。

五、常见误区与复盘

初学者最容易陷入三个误区。第一,认为“开了 ZeRO-3 就一定最快”。实际上 ZeRO-3 通信量最大,小模型或高带宽集群上可能反而变慢。第二,忽略 batch size 与梯度累积的等价关系,导致学习率与全局 batch 不匹配。第三,只看显存下降,不看吞吐变化,最终训练时间被通信拖长。

排障提醒:如果开启 Offload 后速度骤降,优先检查 PCIe 带宽与 CPU 内存频率;如果 loss 出现 NaN,优先检查 fp16 loss scale 与梯度裁剪配置,而不是盲目降低学习率。