🤖 AI总结
主题
DeepSpeed v0.19.3版本更新详情
摘要
DeepSpeed v0.19.3补丁版本重点修复ZeRO-3问题,增强自动并行与推理能力,并优化工程流程。
关键信息
- 1 v0.19.3是覆盖训练稳定性、ZeRO优化、自动并行、DeepCompile、推理能力、量化压缩等的补丁版本。
- 2 修复了ZeRO-3在混合精度、参数聚合、激活检查点等复杂场景的问题。
- 3 新增AutoEP与AutoTP并行折叠、Hybrid Engine rollout、EXAONE 4.5模型支持等功能。
![]()
![]()
![]()
DeepSpeed v0.19.3 是一次覆盖训练稳定性、ZeRO 优化、自动并行、DeepCompile、推理能力、量化压缩、日志与类型提示、CI 流程以及文档维护的补丁版本更新。
此次更新的核心方向非常明确:一方面持续修复 ZeRO-3 在混合精度、参数聚合、激活检查点、模块 Hook 等复杂训练场景中的问题;另一方面增强 AutoEP、AutoTP、Hybrid Engine、Inference V2 等新能力。同时,版本还针对 Muon 优化器、梯度缩放、学习率调度器、通信日志、文件描述符、共享内存缓冲区等多个稳定性细节进行了修复和校验。
一、版本发布与工程流程更新
v0.19.3 首先完成了发布后的版本号更新,确保代码仓库中的版本信息与正式发布版本保持一致。
在工程协作和持续集成方面,此次更新新增了合并队列的 DCO 工作流,并进一步让该工作流兼容 Probot。这样可以让合并流程中的开发者签署认证流程更加完善。
CI 流程也获得多项改进:
• 在工作流被取消时,停止已经过时的 CI 任务,避免无效任务继续占用资源。
• 增加基于差异内容驱动的测试选择机制,根据代码变更范围选择对应测试。
• 将 AlexNet 测试中的 CIFAR 数据切换为合成数据。
• 更新 CI 徽章展示。
• 移除文档中“并行构建扩展”的建议。
这些更新主要集中在测试选择、任务取消、测试数据与工程文档等方面。
二、混合精度与梯度缩放更新
混合精度训练是 DeepSpeed 的重要能力之一,v0.19.3 对 fp16、bf16 与梯度缩放相关行为进行了补强。
首先,版本增加了对 fp16 动态损失缩放参数的输入校验。相关参数必须为正数,从而避免无效配置进入训练过程。
在 bf16 场景中,check_grad_overflow现在默认启用,与 fp16 的行为保持一致。该更新使 bf16 和 fp16 在梯度溢出检查上的默认行为更加统一。
默认梯度裁剪参数也发生变化:
gradient_clipping = 1.0
也就是说,gradient_clipping的默认值调整为1.0。
此外,版本修复了流水线阶段中梯度被重复缩放的问题。该修复涉及多流水线阶段下的梯度缩放行为,可避免同一梯度在不同阶段出现重复缩放。
针对学习率调度器,v0.19.3 还增加了输入校验,并修复了 WarmupCosineLR 的一个边界问题:当total_num_steps等于warmup_num_steps时,原有计算可能触发除零错误,现在该情况已被保护。
保存检查点接口和 warmup 学习率调度器也增加了输入验证,以提升参数配置的可靠性。
三、ZeRO-3 迎来多项关键修复
ZeRO-3 是本次更新最集中的模块之一,多个修复都围绕参数聚合、混合数据类型、量化缓存、Hook、激活检查点和检查点机制展开。
在_allgather_params_coalesced中,输出缓冲区现在使用每个参数自身的数据类型,而不是依赖统一的数据类型。这一改动解决了混合参数数据类型场景下输出缓冲区类型不匹配的问题。
与之对应,量化 scale 缓冲区同样改为使用每个参数自己的数据类型。这样,参数聚合过程中的输出缓冲区与量化 scale 缓冲区都能够正确适配参数本身的数据类型。
针对自动混合精度,v0.19.3 修复了 ZeRO-3 在混合参数数据类型下进行 autocast gather 的问题。该修复进一步完善了 ZeRO-3 与混合精度参数组合使用时的参数收集逻辑。
在 DeepCompile 相关场景中,如果 Dynamo 跳过某些帧,ZeRO-3 的参数 gather 逻辑此前可能出现问题。本次更新修复了这一情况,使 DeepCompile 与 ZeRO-3 的组合处理更加正确。
ZeRO-3 的模块 Hook 机制也得到修复。对于通过属性委托实现的模块,ZeRO-3 Hook 现在能够正确工作。
在激活检查点方面,新增了 ZeRO-3 对包含冻结参数的激活检查点场景的支持。与此同时,activation_checkpointing的num_layers默认值改为None,使得configure()中的断言能够正确触发。
此外,ZeRO-3 的 elastic checkpoint 被标记为弃用。该项更新明确了旧检查点机制的状态。
AutoEP 与 ZeRO-3 也进一步打通。现在,AutoEP 支持 ZeRO-3 的zero.Init源模块。
四、ZeRO-1、ZeRO-2 与 Muon 优化器更新
v0.19.3 对 ZeRO-1、ZeRO-2 下 Muon 优化器的使用进行了多轮调整。
版本首先增加了数值正确性测试,用于验证 Muon 在 ZeRO-1 和 ZeRO-2 下的行为。
随后,针对 Muon 与reduce_scatter的组合,版本进行了兼容性处理。此前 Muon 优化器与 ZeRO-1、ZeRO-2 的reduce_scatter组合会被拒绝;本次更新进一步加入对该组合的支持。
通信和梯度平均路径也获得修复。在 ZeRO-1 和 ZeRO-2 中,average_tensor现在会等待所有 IPG bucket 生产者流完成,再继续进行相关处理。
这些更新覆盖了 Muon、reduce_scatter、IPG bucket 与张量平均等 ZeRO-1、ZeRO-2 训练路径。
五、AutoEP 与 AutoTP 自动并行能力增强
自动专家并行与自动张量并行是此次版本的重要功能更新方向。
v0.19.3 新增 AutoEP 与 AutoTP 的并行折叠能力,使两类自动并行能力能够进行结合。
AutoTP 的分区配置逻辑也得到修复。partition_config现在使用完整的层级模块路径,而不是不完整的模块路径。这一改动修复了自动张量并行在模块定位与分区配置上的路径问题。
在使用 AutoTP 时,版本调整了部分数据一致性检查逻辑:位于tp_group中的特定数据将不再进行一致性检查。
AutoEP 的ep_router还修复了 Python 3.9 环境下导入时可能出现的TypeError。该修复保证 AutoEP 路由模块可以在 Python 3.9 下正常完成导入。
与此同时,AutoEP 已支持结合 ZeRO-3 的zero.Init源模块使用,进一步扩展自动专家并行与 ZeRO-3 初始化机制的组合范围。
六、DeepCompile 持续完善
v0.19.3 对 DeepCompile 的多个环节进行了修复与增强,涉及性能分析、内存清理、参数 gather、标量输出以及优化 Pass 管理。
首先,版本修复了 DeepCompile 的 profile 元数据回填问题,使性能分析相关元数据能够正确补全。
在性能分析后,DeepCompile 的内存清理逻辑也得到修复,避免 profiling 过程中相关内存未正确释放的问题。
对于 Dynamo 跳过帧的情况,DeepCompile 现在能够正确处理 ZeRO-3 参数 gather,避免跳过帧路径下参数收集异常。
在输出处理上,版本修复了 DeepCompile 对标量输出的 fallback 处理。标量输出现在能够进入正确的回退处理路径。
此外,DeepCompile 新增轻量级优化 Pass 合约。这一更新为优化 Pass 的使用增加了明确的轻量级约束机制。
七、Hybrid Engine 与推理能力更新
此次版本新增了 DeepSpeed Hybrid Engine rollout,用于支持 On-Policy Distillation Trainer,也就是 OPSD Trainer。
该能力将 Hybrid Engine rollout 与 On-Policy Distillation Trainer 的支持结合起来,是本次功能更新中的重要新增项。
在 Inference V2 方面,新增 EXAONE 4.5 模型支持。
DeepSpeedInferenceConfig 也修复了一个兼容性问题:当旧版本配置中的 MoE 值以布尔类型提供时,可能导致配置解析崩溃;现在该向后兼容场景已经得到修复。
推理与运行时模块中还修复了部分注释和文档字符串中的拼写问题。
八、量化、压缩与旋转位置编码更新
在压缩和量化配置方面,v0.19.3 修复了仅压缩量化配置中的特征值解析问题。
此前,在 compression-only 的量化配置中,特征值相关字段可能无法被正确解析;本次更新修复了这一问题。
同时,特征值监控数值现在会被记录到日志中。也就是说,eigenvalue monitor 的相关值能够输出到日志记录流程中。
在 GPU 内核优化方面,fake_quantize_kernel降低了blockDim,以改善 SM 占用率。
旋转位置编码方面,apply_rotary_pos_emb新增可选的 torchembed RoPE 后端支持。该更新为旋转位置编码的应用增加了一个可选后端。
九、ZenFlow 与 CPU 优化器能力更新
ZenFlow 新增了一个执行方式:重叠执行的 CPU 优化器可以运行在原生进程中。
该更新聚焦于 overlapped CPU optimizer 的运行机制,将其执行方式扩展为原生进程运行。
十、日志、通信与运行时配置改进
v0.19.3 新增可配置的 engine 日志级别。用户可以通过配置控制 DeepSpeed engine 的日志输出级别。
通信日志模块中,CommsLogger.stop_profiling_comms修复了一个问题:该方法此前不会正确关闭全局 profiling 状态,现在已经能够正确禁用全局通信性能分析。
在异常处理方面,部分过于宽泛的Exception捕获被替换为更具体的异常类型。该更新缩小了异常捕获范围。
对于 FlopsProfiler,版本修复了 sequence parallelism 场景下dp_world_size为None时可能出现的崩溃问题。
十一、文件描述符、共享内存与 CUDA 初始化修复
底层资源管理是此次补丁版本的重要稳定性内容。
在deepspeed_io_handle_t::wait()中,文件描述符现在会被关闭,从而避免文件描述符泄漏。
共享内存实现中的shm.cpp新增缓冲区长度检查,用于避免缓冲区长度相关问题。
在算子兼容性检查过程中,DeepSpeed 现在避免在导入时初始化 CUDA 上下文。也就是说,执行 op compatibility check 时不会因为模块导入而触发 CUDA context 初始化。
NPUOpBuilder 的异常处理也进行了调整:KeyboardInterrupt和SystemExit不再被吞掉,相关中断与退出行为可以正常向外传递。
十二、类型提示与公共 API 完善
此次版本继续扩展 DeepSpeed 的类型提示覆盖范围。
顶层公共 API 函数新增类型提示。
公共通信 API 函数同样新增类型提示。
这些更新覆盖顶层公共接口和通信公共接口,使接口定义中的类型信息更加完整。
十三、文档、项目治理与信息更新
代码地址:github.com/deepspeedai/DeepSpeed
文档与项目信息方面,v0.19.3 包含以下更新:
• 更新 README 中的论文发表列表。
• 修复 runtime 模块与 inference 模块中的少量注释和文档字符串拼写问题。
• 移除关于并行构建扩展的文档建议。
• 更新 COMMITTERS 文件中的机构信息。
• 采用 PTF Code of Conduct。
这些改动覆盖项目文档、贡献者信息、行为准则和代码注释维护。
十四、v0.19.3 更新清单汇总
为了便于快速查阅,以下是本次版本的完整更新方向汇总:
• 完成发布后的版本号更新。
• 校验 fp16 动态损失缩放参数必须为正数。
• 新增合并队列 DCO 工作流。
• 工作流取消时停止过时 CI 任务。
• 修复 ZeRO-3 参数聚合输出缓冲区的数据类型处理。
• 修复deepspeed_io_handle_t::wait()中的文件描述符泄漏。
• 为顶层公共 API 添加类型提示。
• 将默认gradient_clipping设置为1.0。
• 将 activation checkpointing 的num_layers默认值设为None。
• 新增可配置 engine 日志级别。
• 新增基于差异驱动的测试选择。
• 默认开启 bf16 的check_grad_overflow。
• 支持 AutoEP 与 ZeRO-3zero.Init源模块组合。
• 更新 README 论文发表列表。
• 修复 AutoTP 分区配置的层级模块路径处理。
• 调整 Muon 与 ZeRO-1、ZeRO-2 的reduce_scatter组合支持。
• 修复 DeepCompile profile 元数据回填。
• 新增 Muon 在 ZeRO-1、ZeRO-2 下的数值正确性测试。
• 不再吞掉 NPUOpBuilder 中的中断和退出异常。
• 避免导入时因算子兼容性检查初始化 CUDA 上下文。
• 修复 DeepCompile 在 Dynamo 跳过帧场景下的 ZeRO-3 参数 gather。
• 弃用 ZeRO-3 elastic checkpoint。
• 修复仅压缩量化配置中的特征值解析。
• 记录特征值监控数值。
• 修复 DeepCompile profiling 内存清理。
• 为apply_rotary_pos_emb增加可选 torchembed RoPE 后端。
• 修复 runtime 与 inference 模块中的注释、文档字符串问题。
• 支持 ZenFlow 将重叠 CPU 优化器运行在原生进程中。
• 为共享内存缓冲区增加长度检查。
• 修复 sequence parallelism 下 FlopsProfiler 的崩溃问题。
• 修复 Python 3.9 下 AutoEPep_router的导入错误。
• 为保存检查点和 warmup 学习率调度器增加输入校验。
• 修复 ZeRO-3 参数聚合中量化 scale 缓冲区的数据类型处理。
• 修复 ZeRO-3 autocast gather 的混合参数类型问题。
• 移除并行构建扩展的文档建议。
• 为公共通信 API 添加类型提示。
• 新增 Hybrid Engine rollout 以支持 OPSD Trainer。
• 新增 AutoEP 与 AutoTP 并行折叠。
• 让 DCO 工作流兼容 Probot。
• 修复 ZeRO-1、ZeRO-2 中average_tensor对 IPG bucket 生产者流的等待逻辑。
• 修复CommsLogger.stop_profiling_comms未关闭全局 profiling 的问题。
• 修复 WarmupCosineLR 在总步数等于 warmup 步数时的除零问题。
• 为 Inference V2 新增 EXAONE 4.5 模型支持。
• 调整 AutoTP 下tp_group中特定数据的一致性检查。
• 降低fake_quantize_kernel的blockDim。
• 修复 DeepSpeedInferenceConfig 对布尔 MoE 旧配置值的兼容性崩溃。
• 将宽泛异常捕获改为特定异常类型。
• 支持 Muon 在 ZeRO-1、ZeRO-2 中使用reduce_scatter。
• 为 DeepCompile 优化 Pass 增加轻量级合约。
• 修复 DeepCompile 对标量输出的 fallback 处理。
• 在 AlexNet 测试中使用合成 CIFAR 数据。
• 更新 CI 徽章。
• 更新 COMMITTERS 文件中的机构信息。
• 修复 ZeRO-3 对属性委托模块的 Hook。
• 修复流水线阶段中的重复梯度缩放。
• 支持 ZeRO-3 在冻结参数场景下使用 activation checkpointing。
• 采用 PTF Code of Conduct。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。