DeepSpeed v0.17.6 更新详解:性能优化、功能增强与多平台支持

217 阅读5分钟

在这里插入图片描述

更新内容(What's Changed),根据github翻译

  • 在 0.17.5 发布后更新 version.txt
  • 支持在 ZeRO1 和 ZeRO2 模式下 DeepSpeed 的 offload 与 reload 状态
  • CI 赞助致谢 modal.com
  • 修复 pp_int 对象无 custom_print_str 属性时的断言错误
  • 更新 TSC Committers 成员列表
  • 在 DeepSpeed 中启用 Muon 优化器
  • 支持非 ZeRO 模式
  • 更新 README,加入 PyTorch 推荐的 ZenFlow 发布博客链接
  • 在 deepspeed_shm_comm 运算符中增加 riscv64 CPU 支持
  • ZeRO3:改进不匹配检测机制
  • 修复错别字,将“1014 ”改为“1024”
  • 撤销此前的 revert 操作
  • [日志] 启动时减少无关输出
  • [文档] 修复 MoE 教程
  • 修正文档错字:lrrt.md 中 cycle_min_lr 应该为 cycle_max_lr
  • 修复 DeepSpeedCPULion 在 ZeRO-Offload 下的 bug
  • 修复使用 torch.autocast 时的缩放和 allgather 问题
  • 修复 zenflow_torch_adam.py
  • 放宽 torch.autocast 集成的限制条件
  • 自动调优 ZenFlow 亲和性设置
  • 修复 get_cuda_compile_flag
  • 在 init_process_group 时避免设置 device_id
  • 改进错误信息,并减少 autocast 测试中的验证步骤
  • 回退“为 HPU devices 添加索引(#7497)”的更改
  • [ALST 教程] 支持 batch size > 1
  • [MoE] 修复将 num_experts 误用为专家并行组大小(ep_size)的问题
  • 限制测试中随机种子的取值范围
  • 修复 DeepCompile Z1/Z2 的梯度缓冲区访问问题
  • 将 modal 测试移动到 tests/v1 目录
  • 为 deepcompile 测试添加依赖项
  • deepcompile:使用 empty_strided 创建虚拟输入
  • deepcompile:使用 OrderedDict 记录图的顺序
  • deepcompile:创建完整的无拷贝操作列表
  • 修复 NPU 上 device_id 的 AttributeError 问题
  • 使 Muon 优化器更容易启用
  • 脚本:仅在非 C++ 文件中检查 .is_cuda
  • [bugfix] 修复 partition context unpatch 的问题

近日,DeepSpeed 发布了 v0.17.6 版本,本次更新带来了多项重要特性与修复,涵盖分布式训练优化、DeepSpeed-ZeRO 模式改进、DeepCompile 功能完善,以及对更多硬件平台的支持。本文将详细解析此次版本的主要更新内容,帮助开发者快速了解新特性并应用到实际项目中。


一、主要更新亮点

1. ZeRO 优化与功能增强

本次版本针对 ZeRO 各级别(ZeRO1、ZeRO2、ZeRO3)进行了优化:

  • 支持 DeepSpeed Offload 与 Reload 状态(适用于 ZeRO1 和 ZeRO2)
    • 允许在不同计算设备(CPU、GPU)间高效切换模型状态,并支持训练中动态释放与重新加载部分参数,从而降低显存占用。
  • ZeRO3 不匹配检测优化
    • 改进了权重与梯度之间的不一致问题检测机制,增强了稳定性与调试体验。
  • 修复 DeepSpeedCPULion 与 ZeRO-Offload 的兼容性问题
    • 解决了在 CPU 端 Lion 优化器与 ZeRO-Offload 同时使用时的Bug。
  • 支持非 ZeRO 模式
    • 在一些轻量训练场景中,可不启用 ZeRO,从而减少开销。

2. DeepCompile 模块大幅更新

DeepCompile 是 DeepSpeed 的高性能编译与图优化框架,本次进行了多项改进:

  • 引入 empty_strided 创建样本输入,提高内存利用率。
  • 记录计算图顺序,采用 OrderedDict 更精确地保持算子执行次序。
  • 增加完整的无复制操作列表,以减少内存拷贝。
  • 修复在 ZeRO1/ZeRO2 模式下的梯度缓冲区访问问题。
  • 调整 autotune 亲和性参数,提升执行效率。
  • 新增 deepcompile 测试依赖并完善测试用例组织。

3. Muon 优化器升级

  • Muon 优化器现在更容易启用,用户可在配置中简化启用步骤。
  • 与 DeepSpeed DeepCompile、ZeRO-Offload 结合时性能和兼容性更好。

4. Autocast 与混合精度支持

  • 扩展 torch.autocast 集成的适用范围,放宽使用限制。
  • 修复 autocast 下 allgather 的缩放问题,并改善错误提示。
  • 在测试中减少了部分冗余验证步骤,加快测试执行速度。

5. 平台与硬件支持拓展

  • 新增 RISC-V 64 CPU 支持,让 DeepSpeed 可以运行在新兴芯片架构上。
  • 修复 NPU(神经网络处理单元) device_id 属性异常问题。
  • 回退了 HPU(Habana Processing Unit) 设备索引的改动,确保兼容性。

6. 训练体验与文档优化

  • 减少启动日志输出的“噪声”,更聚焦于核心信息。
  • 更新了多个教程,包括 MoE(Mixture of Experts)与 ALST 教程,支持更大批量(bs>1)和修复参数误用问题。
  • 多处文档排版与术语错误修正,例如将 cycle_min_lr 改为 cycle_max_lr
  • 更新 README,推广 ZenFlow 训练框架与性能优化方案。

二、Bug 修复总览

本次版本解决的问题包括但不限于:

  • 修复 pp_int 对象缺少 custom_print_str 属性导致的异常。
  • 修复 CUDA 编译标志检测方法 get_cuda_compile_flag
  • 修复分区上下文 patch/unpatch 时的错误。
  • 避免在 init_process_group 中错误设置 device_id
  • 多个测试中限制随机种子范围,提升复现稳定性。

三、对开发者的意义

DeepSpeed v0.17.6 的更新主要体现在以下几个方面:

  1. 更低的显存占用与更快的分布式训练速度
    • ZeRO Offload 与 Reload 结合 autotune 带来显存优化与速度提升。
  2. 更强的硬件适配性
    • 支持 RISC-V CPU、NPU、HPU 等多样化芯片平台。
  3. 更稳定的高性能编译与混合精度支持
    • DeepCompile 与 autocast 的优化可为大规模模型训练提供更稳定可控的环境。
  4. 更易用的优化器与调试体验
    • Muon 优化器、改进的错误提示以及精简的日志输出,让开发体验更友好。

四、升级建议

如果你的训练任务涉及:

  • 多 GPU/多节点的大规模模型训练
  • 内存/显存受限的环境
  • 新兴硬件平台(如 RISC-V、NPU)
  • DeepSpeed DeepCompile 高性能编译使用
    那么强烈建议升级到 v0.17.6

升级方式:

pip install deepspeed==0.17.6

或:

pip install --upgrade deepspeed

总结

DeepSpeed v0.17.6 不仅带来显存优化、ZeRO 改进,更在硬件兼容、编译优化和调试体验上全面提升。对于大规模模型训练、跨平台部署以及高性能推理场景,v0.17.6 都是值得关注和升级的版本。