DeepSpeed分布式训练技能Skill deepspeed

DeepSpeed技能提供对微软DeepSpeed框架的专家指导,专注于分布式深度学习训练优化,包括ZeRO技术、管道并行、混合精度训练和通信优化,适用于大规模模型训练、性能调优和内存效率提升。关键词:分布式训练、深度学习、ZeRO优化、混合精度、大规模模型训练、DeepSpeed框架、AI训练加速、GPU内存优化。

深度学习 0 次安装 0 次浏览 更新于 3/21/2026

name: deepspeed description: 为分布式训练提供专家指导的Deepspeed技能 - ZeRO优化阶段、管道并行、FP16/BF16/FP8混合精度、1-bit Adam、稀疏注意力 version: 1.0.0 author: Orchestra Research license: MIT tags: [DeepSpeed, 分布式训练, ZeRO, 管道并行, 混合精度, 优化, Microsoft, 大规模训练, FP16, FP8] dependencies: [deepspeed, torch, transformers, accelerate]

Deepspeed 技能

从官方文档生成的全面辅助,用于deepspeed开发。

何时使用此技能

此技能应在以下情况触发:

  • 使用deepspeed时
  • 询问关于deepspeed功能或API
  • 实现deepspeed解决方案
  • 调试deepspeed代码
  • 学习deepspeed最佳实践

快速参考

常见模式

模式1: DeepNVMe 内容要求 创建DeepNVMe句柄 使用DeepNVMe句柄 阻塞文件写入 非阻塞文件写入 并行文件写入 固定张量 整合 致谢 附录 高级句柄创建 性能调优 DeepNVMe API 通用I/O API GDS特定API 句柄设置API 本教程将展示如何使用DeepNVMe在持久存储和张量之间进行数据传输。DeepNVMe通过基于非易失性内存Express(NVMe)固态硬盘(SSD)、Linux异步I/O(libaio)和NVIDIA Magnum IO GPUDirect® Storage(GDS)的强大优化,提高深度学习应用程序中I/O操作的性能和效率。

要求:确保您的环境已正确配置以使用DeepNVMe。首先,需要安装DeepSpeed版本 >= 0.15.0。接下来,确保DeepSpeed安装中DeepNVMe操作符可用。async_io操作符是任何DeepNVMe功能所必需的,而gds操作符仅用于GDS功能。您可以通过检查ds_report的输出确认每个操作符的可用性,以检查兼容状态为[OKAY]。以下是ds_report输出片段,确认async_io和gds操作符的可用性。如果async_io操作符不可用,您需要为您的Linux发行版安装适当的libaio库二进制文件。例如,Ubuntu用户需要运行 apt install libaio-dev。一般来说,您应仔细检查ds_report输出以获取有用的提示,例如: [WARNING] async_io需要开发libaio .so对象和头文件,但未找到。 [WARNING] async_io:请使用apt安装libaio-dev包。 [WARNING] 如果libaio已安装(可能从源代码),请尝试设置CFLAGS和LDFLAGS环境变量以指定其位置。

要启用gds操作符,您需要安装NVIDIA GDS,请咨询裸机系统或Azure VM的相应指南(即将推出)。

创建DeepNVMe句柄:DeepNVMe功能可以通过两个抽象访问:aio_handle和gds_handle。aio_handle可用于主机和设备张量,而gds_handle仅适用于CUDA张量,但更高效。使用DeepNVMe的第一步是创建所需的句柄。aio_handle需要async_io操作符,而gds_handle需要async_io和gds操作符。以下片段分别说明aio_handle和gds_handle的创建。

创建 aio_handle

from deepspeed.ops.op_builder import AsyncIOBuilder aio_handle = AsyncIOBuilder().load().aio_handle()

创建 gds_handle

from deepspeed.ops.op_builder import GDSBuilder gds_handle = GDSBuilder().load().gds_handle()

为简化,以上示例使用默认参数创建句柄。我们期望使用默认参数创建的句柄在大多数环境中提供良好的性能。然而,您可以在下面查看高级句柄创建。

使用DeepNVMe句柄:aio_handle和gds_handle提供相同的API用于将张量存储到文件或从文件加载张量。这些API的常见特征是它们将张量和文件路径作为参数进行所需的I/O操作。为获得最佳性能,I/O操作应使用固定设备或主机张量(详情见这里)。为简洁,本教程将使用aio_handle进行说明,但请记住gds_handle类似工作。您可以通过在aio_handle对象上使用标签完成查看可用API。

阻塞文件写入:sync_pwrite提供Python文件写入的标准阻塞语义。以下示例说明使用sync_pwrite将1GB CUDA张量存储到本地NVMe文件。

非阻塞文件写入:DeepNVMe的重要优化是非阻塞I/O语义,使Python线程能够将计算与I/O操作重叠。async_pwrite提供文件写入的非阻塞语义。Python线程稍后可以使用wait()与I/O操作同步。async_write也可用于提交多个连续的非阻塞I/O操作,然后使用单个wait()阻塞。

并行文件写入:DeepNVMe的重要优化是能够并行化单个I/O操作。此优化通过在构造DeepNVMe句柄时指定所需的并行度来启用。后续I/O操作使用该句柄自动并行化请求的主机或设备线程数。I/O并行性可与阻塞或非阻塞I/O API组合。

固定张量:DeepNVMe优化的关键部分是使用直接内存访问(DMA)进行I/O操作,这要求主机或设备张量被固定。要固定主机张量,您可以使用Pytorch或DeepSpeed Accelerator提供的机制。

整合:我们希望以上材料帮助您开始使用DeepNVMe。您还可以使用以下链接查看DeepNVMe在真实世界深度学习应用程序中的使用。

致谢:本教程通过Guanhua Wang、Masahiro Tanaka和Stas Bekman的反馈得到了显著改进。

附录:高级句柄创建:使用DeepNVMe实现峰值I/O性能需要仔细配置句柄创建。特别是,aio_handle和gds_handle构造函数的参数是性能关键的,因为它们确定DeepNVMe如何与底层存储子系统(即libaio、GDS、PCIe和SSD)高效交互。

性能调优:如前所述,为目标工作负载或环境实现峰值DeepNVMe性能需要使用最优配置的aio_handle或gds_handle句柄。为配置方便,我们提供名为ds_nvme_tune的实用程序,以自动发现最优DeepNVMe配置。

DeepNVMe API:为方便,我们提供DeepNVMe API的列表和简要描述。通用I/O API:以下函数用于aio_handle和gds_handle的I/O操作。函数描述:async_pread 非阻塞文件读取到张量;sync_pread 阻塞文件读取到张量;pread 具有阻塞和非阻塞选项的文件读取;async_pwrite 从张量非阻塞文件写入;sync_pwrite 从张量阻塞文件写入;pwrite 具有阻塞和非阻塞选项的文件写入;wait 等待非阻塞I/O操作完成。GDS特定API:以下函数仅适用于gds_handle:new_pinned_device_tensor 分配并固定设备张量;free_pinned_device_tensor 取消固定并释放设备张量;pin_device_tensor 固定设备张量;unpin_device_tensor 取消固定设备张量。句柄设置API:以下API可用于探测句柄配置:get_queue_depth 返回队列深度设置;get_single_submit 返回是否启用single_submit;get_intra_op_parallelism 返回I/O并行度;get_block_size 返回I/O块大小设置;get_overlap_events 返回是否启用overlap_event。

模式2: 用于NLG模型的混合专家(MoE) 内容 1. 安装 2. 训练NLG+MoE模型 2.1. 模型变更 2.2. 预训练标准MoE模型 2.3. 预训练PR-MoE模型 2.4. 训练MoS以减小模型大小 在本教程中,我们介绍如何将DeepSpeed混合专家(MoE)应用于NLG模型,这减少了5倍的训练成本,并将MoE模型大小减少了3倍(细节见我们的博客)。

模式3: MoS,代表混合学生,是一种基于分阶段蒸馏的技术,用于压缩大型MoE模型。MoS进一步将模型大小减少12.5%,当与PR-MoE结合时,比标准MoE减少高达3.7倍的模型大小。减小模型大小有助于降低推理期间的延迟和成本。要训练MoS模型,需要指定一些额外参数。我们将使用PR-MoE作为示例。

模式4: 学习率范围测试 内容 学习率范围测试(LRRT) 先决条件 LRRT参数 所需模型配置变更 PyTorch示例:为大批量大小调优 本教程展示如何在PyTorch中执行学习率范围测试。

模式5: 训练概述和功能 内容 概述 分布式、有效和高效的训练,轻松实现 速度 内存效率 可扩展性 通信效率 数据效率 支持长序列长度 快速收敛以实现有效性 良好可用性 功能 分布式训练与混合精度 混合精度训练 单GPU、多GPU和多节点训练 管道并行 模型并行 支持自定义模型并行 与Megatron-LM集成 零冗余优化器 优化器状态和梯度分区 激活分区 常量缓冲区优化(CBO) 连续内存优化(CMO) ZeRO-Offload 额外内存和带宽优化 智能梯度累积 通信重叠 训练功能 简化训练API 激活检查点API 梯度裁剪 混合精度自动损失缩放 训练优化器 1-bit Adam、0/1 Adam和1-bit LAMB优化器,通信减少高达26倍 融合Adam优化器和任意torch.optim.Optimizer CPU-Adam:Adam的高性能向量化实现 内存带宽优化的FP16优化器 使用LAMB优化器的大批量训练 使用ZeRO优化器的内存高效训练 训练无关检查点 高级参数搜索 学习率范围测试 1Cycle学习率计划 简化数据加载器 数据效率 课程学习 性能分析和调试 壁钟细分 定时激活检查点函数 Flops分析器 自动调优 监视通信日志 稀疏注意力 混合专家(MoE) 概述 训练高级深度学习模型具有挑战性。

模式6: Flops分析器 内容 概述 Flops测量 多GPU、多节点、数据并行和模型并行使用 使用DeepSpeed运行时的使用 示例:Megatron-LM 在DeepSpeed运行时之外的使用 在模型推理中的使用 示例:AlexNet 示例:Bert 在模型训练工作流中的使用 示例训练工作流 在本教程中,我们介绍DeepSpeed Flops分析器并提供使用示例。

模式7: DeepSpeed配置JSON 内容 批量大小相关参数 优化器参数 调度器参数 通信选项 FP16训练选项 BFLOAT16训练选项 自动混合精度(AMP)训练选项 梯度裁剪 ZeRO FP16训练的优化 参数卸载 优化器卸载 异步I/O 日志 自动调优 Flops分析器 激活检查点 稀疏注意力 数据效率 课程学习 监视模块 弹性训练配置(V0.1和V0.2) 通信日志 压缩 层减少 权重量化 激活量化 稀疏剪枝 行剪枝 头剪枝 通道剪枝 检查点选项 数据类型选项 批量大小相关参数:注意:train_batch_size 必须等于 train_micro_batch_size_per_gpu * gradient_accumulation_steps * GPU数量。为简化,您可以选择仅指定三个参数中的两个,最后一个将由DeepSpeed自动推断。

模式8: 监视 内容 概述 使用 自动监视 自定义监视 在本教程中,我们介绍DeepSpeed监视器并提供使用示例。

示例代码模式

示例1 (python):

### 创建 aio_handle
from deepspeed.ops.op_builder import AsyncIOBuilder
aio_handle = AsyncIOBuilder().load().aio_handle()

参考文件

此技能包括 references/ 中的全面文档:

使用 view 读取特定参考文件以获取详细信息。

使用此技能

对于初学者

从 getting_started 或 tutorials 参考文件开始,了解基础概念。

对于特定功能

使用适当类别的参考文件(api、guides 等)获取详细信息。

对于代码示例

以上快速参考部分包含从官方文档提取的常见模式。

资源

references/

从官方来源提取的组织文档。这些文件包含:

  • 详细解释
  • 带语言注释的代码示例
  • 原始文档链接
  • 快速导航目录

scripts/

在此添加用于常见自动化任务的帮助脚本。

assets/

在此添加模板、样板或示例项目。

注释

  • 此技能是从官方文档自动生成的
  • 参考文件保留源文档的结构和示例
  • 代码示例包括语言检测以更好地突出语法
  • 快速参考模式是从文档中的常见使用示例提取的

更新

要使用更新文档刷新此技能:

  1. 使用相同配置重新运行抓取器
  2. 技能将以最新信息重建