当前位置: 首页 > news >正文

分布式训练(二): DeepSpeed 知识总结

目录

  • 一、DeepSpeed 简介
    • 1.1 核心特性
    • 1.2 典型使用场景
    • 1.3 如果已经有 PP、TP,为什么还需要 DeepSpeed
      • 1.3.1 PP / TP 解决的与未解决的
      • 1.3.2 DeepSpeed 在其中的作用
      • 1.3.3 关键结论
    • 1.4 混合精度训练详解
      • 1.4.1 不同张量的精度分工
      • 1.4.2 训练流程示意
  • 二、ZeRO 原理与阶段对比
    • 2.1 ZeRO 定义
    • 2.2 ZeRO-1:分片优化器状态
    • 2.3 ZeRO-2:分片优化器状态 + 梯度
    • 2.4 ZeRO-3:分片优化器状态 + 梯度 + 参数
    • 2.5 显存对比(以 7.5B 模型、64 卡为例)
    • 2.6 扩展能力
    • 2.7 三个阶段优缺点与使用场景对比
    • 2.8 选择建议
  • 三、DeepSpeed 配置示例
    • 3.1 ZeRO-1 配置
    • 3.2 ZeRO-2 配置(推荐中等规模模型)
    • 3.3 ZeRO-3 配置(大模型)
    • 3.4 配置参数说明
    • 3.5 启动命令

一、DeepSpeed 简介

DeepSpeed 是微软开源的深度学习优化库,主要用于大规模模型训练

1.1 核心特性

  • ZeRO (Zero Redundancy Optimizer):将优化器状态、梯度、参数分片到多个 GPU,大幅降低单卡显存占用,可训练千亿/万亿参数模型
  • 3D 并行:原生支持数据并行 (DP) 与流水线并行 (PP);张量并行 (TP) 主要通过与 Megatron-LM 集成(Megatron-DeepSpeed)实现,从而组合出完整的 3D 并行
  • 混合精度训练(1.4 详细介绍):训练中同时使用低精度 (FP16/BF16) 和 FP32——前向/反向计算、激活和梯度用低精度以省显存、加速计算,而 master 权重和优化器状态保留 FP32 以保证参数更新的数值精度
  • CPU/NVMe Offload:将参数和优化器状态卸载到 CPU 内存或 NVMe,进一步突破显存限制
  • DeepSpeed-MoE:稀疏专家模型支持

1.2 典型使用场景

  • 大模型训练:训练 LLM、视觉大模型、MoE 模型等(如 BLOOM、MT-NLG)
  • 显存受限训练:单卡/多卡显存不足时,借助 ZeRO 与 Offload 训练更大模型
  • 框架集成:可与 HuggingFace Transformers、PyTorch Lightning、Accelerate 等无缝配合

1.3 如果已经有 PP、TP,为什么还需要 DeepSpeed

PP(流水线并行)和 TP(张量并行)只是「怎么切模型」的两种方法,而 DeepSpeed 是「怎么训模型」的完整训练引擎。两者层次不同,不是替代关系。

1.3.1 PP / TP 解决的与未解决的
  • PP / TP 解决:模型切分(按层切 / 按矩阵切),让超大模型能放进多卡
  • PP / TP 未解决:DP 维度冗余、显存进一步压缩(Offload)、混合精度、训练工程细节、通信优化、分布式 checkpoint、并行调度策略等
1.3.2 DeepSpeed 在其中的作用
组件提供能力
ZeRO在 DP 维度上分片优化器状态/梯度/参数,消除冗余
PP 引擎实现 1F1B 等流水线调度策略
混合精度一行配置启用 BF16/FP16
Offload把状态卸载到 CPU/NVMe,突破显存限制
Checkpoint自动处理分布式状态的保存与恢复
通信优化overlap_comm、contiguous_gradients 等
1.3.3 关键结论
  • PP / TP 是切分策略,DeepSpeed 是训练框架
  • 真实训练几乎都是TP + PP + DP 组合,DP 维度需要 ZeRO 去冗余
  • DeepSpeed 让用户只写 config,不必手撸分布式细节

1.4 混合精度训练详解

"混合精度"指的是训练中同时使用 FP16/BF16 和 FP32:低精度负责计算,FP32 负责关键的累加和参数更新。

1.4.1 不同张量的精度分工
用途精度原因
前向/反向计算FP16 / BF16计算快、显存省
激活值 (activations)FP16 / BF16占大头,省显存
梯度 (gradients)FP16 / BF16通信快
Master 权重FP32保证参数更新精度
优化器状态 (m, v)FP32数值稳定性
loss / 梯度累加FP32防止精度损失
1.4.2 训练流程示意
FP32 master weights │ 转 FP16/BF16 ▼ 低精度权重 ─► forward ─► loss ─► backward ─► 低精度梯度 │ 转 FP32 ▼ 优化器更新 (FP32) │ ▼ FP32 master weights(更新)

补充:为什么必须保留 FP32 主权重?FP16 只有约 3-4 位有效数字,若直接累加小的更新量(如W=1.0lr*grad=0.0001)会被精度"吞掉"导致更新丢失,所以必须在 FP32 上做累加,再把更新后的权重转回低精度用于下一轮 forward。这里的"FP32 主权重"是训练时的内存策略,与模型保存到磁盘的格式无关——训练 checkpoint 通常存 FP32 便于恢复训练,而对外发布的权重(如 LLaMA、Qwen)大多是 BF16。


二、ZeRO 原理与阶段对比

2.1 ZeRO 定义

ZeRO全称Zero Redundancy Optimizer(零冗余优化器),是 DeepSpeed 中的核心显存优化技术,由微软在论文《ZeRO: Memory Optimizations Toward Training Trillion Parameter Models》中提出。

在传统的数据并行(Data Parallelism, DP)训练中,每张 GPU 都会保存一份完整的模型参数、梯度和优化器状态,存在大量冗余。ZeRO 的核心思想是:将这些训练状态在数据并行的 GPU 之间进行分片(partition),每张卡只保存自己负责的那一部分,从而消除冗余、大幅降低单卡显存占用,使得在有限显存下能训练更大的模型。

训练状态分为三类:

  • 优化器状态 (Optimizer States):如 Adam 的 momentum、variance,通常占用最多显存
  • 梯度 (Gradients):反向传播得到的梯度
  • 参数 (Parameters):模型权重本身

根据分片的范围不同,ZeRO 划分为三个递进的阶段:ZeRO-1、ZeRO-2、ZeRO-3。

2.2 ZeRO-1:分片优化器状态

  • 分片内容:仅优化器状态(如 Adam 的 momentum、variance)
  • 显存节省:约 4 倍(相比传统 DP)
  • 通信开销:与传统 DP 基本相同
  • 原理:每张卡只保存 1/N 的优化器状态,参数更新后通过 all-gather 同步

2.3 ZeRO-2:分片优化器状态 + 梯度

  • 分片内容:优化器状态 + 梯度
  • 显存节省:约 8 倍
  • 通信开销:与传统 DP 基本相同(reduce-scatter 替代 all-reduce)
  • 原理:每张卡只保留自己负责更新的那部分参数的梯度

2.4 ZeRO-3:分片优化器状态 + 梯度 + 参数

  • 分片内容:全部三类状态
  • 显存节省:与 GPU 数量 N 成线性关系(理论上 N 倍)
  • 通信开销:约为传统 DP 的 1.5 倍
  • 原理:参数也分片存储,前向/反向计算时按需 all-gather,用完即释放

2.5 显存对比(以 7.5B 模型、64 卡为例)

阶段单卡显存占用
传统 DP~120 GB
ZeRO-1~31 GB
ZeRO-2~16 GB
ZeRO-3~1.9 GB

2.6 扩展能力

  • ZeRO-Offload:在 ZeRO-2 基础上把优化器状态和梯度卸载到 CPU
  • ZeRO-Infinity:在 ZeRO-3 基础上把参数卸载到 CPU/NVMe,可训练万亿参数模型

2.7 三个阶段优缺点与使用场景对比

阶段优点缺点适用场景
ZeRO-1- 实现简单,对训练流程影响最小
- 通信开销与传统 DP 相当
- 训练速度快
- 显存节省有限(约 4 倍)
- 梯度和参数仍有冗余
- 中小模型(< 1B 参数)
- 显存比较宽裕
- 追求最快训练速度
ZeRO-2- 显存节省较大(约 8 倍)
- 通信开销仍与传统 DP 相当
- 性价比高,工业界使用最广
- 参数仍未分片,单卡需存完整模型权重
- 模型大小受单卡显存限制
- 中等规模模型(1B ~ 10B 参数)
- 主流大模型微调场景
- 显存与速度需平衡时的首选
ZeRO-3- 显存节省最大(随 GPU 数线性增长)
- 可训练超大模型(百亿/千亿级)
- 可结合 Offload 突破显存上限
- 通信开销增加约 50%
- 训练速度变慢
- 实现复杂,调试较困难
- 对网络带宽要求高
- 超大模型(> 10B 参数)训练
- 单卡放不下完整模型时
- 显存极度受限(配合 Offload)

2.8 选择建议

  • 显存够用→ ZeRO-1 或 ZeRO-2(通信少,速度快)
  • 显存不够→ ZeRO-3
  • 极端显存受限→ ZeRO-3 + Offload(CPU/NVMe)
  • 建议优先级:ZeRO-2 → ZeRO-3 → ZeRO-3 + Offload(按需逐级升级,避免过度牺牲速度)

三、DeepSpeed 配置示例

3.1 ZeRO-1 配置

{"train_batch_size":32,"optimizer":{"type":"AdamW","params":{"lr":1e-4,"weight_decay":0.01}},"bf16":{"enabled":true},"zero_optimization":{"stage":1}}

3.2 ZeRO-2 配置(推荐中等规模模型)

{"train_batch_size":32,"optimizer":{"type":"AdamW","params":{"lr":1e-4,"weight_decay":0.01}},"bf16":{"enabled":true},"zero_optimization":{"stage":2,"overlap_comm":true,"contiguous_gradients":true}}

3.3 ZeRO-3 配置(大模型)

{"train_batch_size":32,"optimizer":{"type":"AdamW","params":{"lr":1e-4,"weight_decay":0.01}},"bf16":{"enabled":true},"zero_optimization":{"stage":3,"overlap_comm":true,"contiguous_gradients":true,"stage3_gather_16bit_weights_on_model_save":true}}

3.4 配置参数说明

顶层参数
参数含义
train_batch_size全局训练 batch size(= 单卡 batch × GPU 数 × 梯度累积步数),DeepSpeed 会据此校验配置
optimizer.type优化器类型,常用AdamWAdamLamb
optimizer.params.lr学习率
optimizer.params.weight_decay权重衰减系数,用于正则化,防止过拟合
bf16.enabled启用 BF16 混合精度训练。相比 FP16 数值范围更大、无需 loss scaling,适合 A100/H100 等新硬件
zero_optimization参数
参数含义
stageZeRO 阶段:1分片优化器状态;2加上梯度;3再加上参数
overlap_comm通信与计算重叠执行,隐藏通信延迟、加速训练(推荐开启)
contiguous_gradients将梯度复制到连续的显存块中,减少反向传播时的内存碎片,提升性能
stage3_gather_16bit_weights_on_model_save仅 ZeRO-3 适用。保存模型时把分片的参数 all-gather 成完整权重再落盘,便于后续加载

3.5 启动命令

deepspeed--num_gpus=8train.py--deepspeed--deepspeed_configds_config.json
http://www.jsqmd.com/news/925253/

相关文章:

  • 郑州市 经开区 上门安装、维修维保|维小达 开关插座/灯具/门窗/柜体/锁具/卫浴/龙头/洗菜盆/踢脚线一站式家装安装服务 - 维小达科技
  • 5.31 芜湖黄金回收|皖江枢纽实测 避坑 + 正规榜单 - 速递信息
  • Gemini社交媒体运营全链路拆解(2024最新算法适配版)
  • 123云盘免费会员解锁终极指南:3步告别下载限制的完整解决方案
  • CentOS 7.6最小化安装后,必装的5个基础软件包清单(附yum命令详解)
  • WuWa-Mod核心技术解析:AES加密解密与游戏模组实战指南
  • 从群接单到平台化运营:游戏电竞护航陪玩源码系统小程序 - 壹软科技
  • 基于Arduino Leonardo的自制头控游戏控制器:硬件设计与软件实现
  • 陕西连锁零售行业怎么做 GEO 优化科普:3 分钟看懂连锁零售 GEO 优化核心逻辑 - 新闻快讯
  • 如何永久保存微信聊天记录:从数据丢失焦虑到数字记忆守护
  • PVE核显直通避坑实录:AMD 5600G直通后Win10休眠唤醒失败怎么办?
  • 郑州市 巩义市 上门安装、维修维保|维小达 开关插座/灯具/门窗/柜体/锁具/卫浴/龙头/洗菜盆/踢脚线一站式家装安装服务 - 维小达科技
  • 5.31 太原黄金回收|本地实测盘点 教你避坑放心变现 - 速递信息
  • 人工智能从内容生成到自主进化
  • 基于PIC单片机的多参数空气质量监测系统设计与实现
  • 2026 论文降重软件实测对比:真正好用,毕业季必备宝典
  • 国内主流求职辅导公司推荐盘点:专业度与成果深度对比 - 速递信息
  • CF Spark 浏览器插件实战应用指南
  • 仿生优化群算法及应用方案【附代码】
  • 从Arduino LED闪烁入门嵌入式开发:硬件电路设计与代码优化实践
  • Windows安裝Hermers(WSL2版本)
  • 必应推广行业百科:实力服务商甄选及核心价值解析
  • 基于Arduino Nano的20KHz便携式数字示波器设计与实现
  • Kling AI 视频生成能力深度评测报告
  • 必应推广行业百科:服务商选择与核心价值解析
  • 基于Arduino的智能闹钟枕头:定向唤醒与嵌入式系统实践
  • 2026终极测评:16款降AI率网站实测,这款神器让论文秒过检测!
  • 内河小型射吸抽沙船直销 - 舒雯文化
  • 13周,位移 - feng
  • 抖音下载神器:3步搞定无水印视频批量下载完整教程