DeepSpeed 发布了新版本,加强了混合专家模型(从多个专家中选择部分专家使用的模型)的内存处理,以及将训练分配到多个设备执行的功能。训练大模型的开发者可利用扩展后的并行处理功能和错误修复,但使用已移除或计划弃用的旧功能的代码需要检查。
1. 共享原本为各专家层单独设置的临时存储空间
在 10月20日 发布的此次版本中,AutoEP 改为让混合专家模型的多个层共享一个 DeepEP 缓冲区。这意味着原本各层独立设置的临时存储空间改为共享使用。
AutoEP 的默认合并处理中也消除了冗余的 32 位浮点数复制。此次还将分片规划、令牌打包和输入分片汇集等操作重叠执行,同时调整了内存处理方式和操作顺序。
此次以可选方式加入了将部分专家运算合并执行的融合处理,以及内存回收策略,即重新获取用后内存的方式。开发者可选择启用这些新路径。
2. 扩展按词表划分处理的训练路径
AutoTP 新增了对词表并行语言模型输出层和嵌入的支持。从表示输入的嵌入到输出层,按词表划分处理的路径得到扩展,对共享嵌入的模型的支持也得到加强。
此次还新增了在按词表划分处理时计算训练损失的融合运算。输出层支持与损失计算同步扩展,使可应用并行训练的处理范围更广。
发布说明正文以各项变更的简短标题为主,未提供性能对比数值或测量条件。
3. 修复训练计算遗漏和保存过程中的错误
ZeRO-1·2 修复了在 CPU 上对非连续布局的梯度(训练过程中计算的斜率值)求和时,部分批次被静默遗漏的问题。这纠正了部分训练计算结果未被计入求和的错误。
ZeRO-2 现在也会在分片保存过程中保持 32 位梯度累积精度。这项修复涉及合并并保存分布在多个设备上的训练计算结果时的准确性。
在转换检查点(保存的训练状态)时,现在会拒绝将多个分片指定写入同一存储分片地址的映射。这一变更可阻止向同一位置重叠写入的布局信息。
4. 优先检查已移除的功能和不再接受的配置
弹性训练(应对参与设备数量变化的训练)和渐进式层丢弃(训练中逐步移除层的方式)的支持已被移除。两种旧损失函数也已删除,压缩库残余功能及旧版课程学习(从简单任务开始学习的方式)则被列为计划弃用。升级时,先确认依赖功能是已移除还是计划弃用更为实用。
配置文档增加了对 sub_group_size 的说明,并将默认值更正为 1e9。对照现有配置与文档默认值时,应留意此项。
DeepSpeedCPUAdam 现在会拒绝此前忽略的 amsgrad 配置。仍保留此配置的项目应在采用新版本前检查优化器配置。
并行处理功能扩展和计算错误修复带来收益,而清理使用旧功能的代码及不再允许的配置,则是开发者需要承担的迁移成本。尤其是此次包含功能移除,因此判断是否升级时,所用功能的变更记录比“补丁版本”的名称更重要。
5. 加速器支持和构建条件也有变化
NPU 新增了对固定主机内存注册(固定 CPU 内存以供设备访问的处理)及图运算(将运算组织成图执行的方式)的支持。这加强了设备可执行运算及内存处理方面的支持。
NPU 和 XPU 的算子构建器(生成并构建运算代码的工具)包含构建语言标准的变更。
在 torch 2.12 及以上版本中,现改用 C++20。在此类环境下构建算子的开发者应留意这一变化。
NPU 将计划弃用的 Adam 调用替换为融合运算。发布说明中列出的被替换旧调用如下。
npu_apply_adam(_w)此次发布扩展了专家模型和并行训练的处理范围,同时将旧功能清理及各加速器的构建检查留作升级时的任务。
