MT-DeepSpeed 入门
1. MT-DeepSpeed 是什么
DeepSpeed 是面向深度学习训练与推理的分布式优化库。它通过 ZeRO、混合精度、梯度累积、通信优化和 offload 等能力,降低大模型训练的单卡显存压力,并提高多卡训练效率。
本项目中的 MT-DeepSpeed,指 DeepSpeed 在摩尔线程 MUSA 环境中的适配与使用实践。DeepSpeed 负责训练加速和分布式状态管理,但通常不负责解析业务数据集;模型定义、数据读取和 loss 计算仍由 PyTorch、Transformers 或上层训练框架完成。
1.1 适用场景
- 单卡无法容纳模型参数、梯度和优化器状态;
- 使用数据并行进行单机多卡或多机训练;
- 通过 BF16/FP16 和 fused optimizer 提高训练效率;
- 使用 ZeRO-Offload 将部分状态转移到 CPU/NVMe;
- 在不重写完整训练逻辑的情况下接入分布式优化。
1.2 DeepSpeed 的设计特点
- ZeRO 显存优化:按 stage 分片优化器状态、梯度和模型参数;
- 配置与代码分离:大部分优化通过
ds_config.json控制; - 训练引擎封装:
DeepSpeedEngine负责 forward、backward、step 和 checkpoint; - 分布式启动器:
deepspeed命令负责拉起单机或多机进程; - 组合使用:可由 Transformers、LLaMA-Factory 等上层框架调用,也可直接集成到 PyTorch 脚本。
2. 核心架构
2.1 主要组件
| 组件 | 作用 |
|---|---|
| 用户训练脚本 | 定义模型、数据、forward 和 loss |
| DeepSpeedEngine | 包装模型并管理反向传播、参数更新和梯度累积 |
| ZeRO | 在数据并行 rank 之间分片训练状态 |
| Optimizer / Scheduler | 管理优化器、学习率和 fused kernel |
| Launcher | 启动和管理本地或多机训练进程 |
| Checkpoint | 保存和恢复分片后的模型、优化器和调度器状态 |
| MUSA / MCCL | 提供摩尔线程 GPU 计算和多卡通信能力 |
2.2 一个训练 step 如何运行
DataLoader 产生 batch
↓
DeepSpeedEngine 执行 forward
↓
用户脚本计算 loss
↓
engine.backward(loss)
↓
ZeRO 分片并同步梯度/参数状态
↓
engine.step() 更新参数
↓
按配置保存 checkpoint
DeepSpeed 不会自动知道训练数据的业务格式。ShareGPT、messages 或其他格式能否使用,取决于上层训练脚本如何解析并转换为模型输入。