SuperAPI AI 工具集

deepspeed

智能体与模型

查看项目

更新于 10-21 16:21

技能介绍

用途

DeepSpeed 是用于分布式深度学习训练与 I/O 优化的库。本技能由官方文档生成,用于在开发、调试和学习 DeepSpeed 时提供参考,覆盖训练侧优化与高性能数据 I/O 两大方向。

主要能力

训练相关特性

技能描述中列出的训练能力包括:ZeRO 优化阶段(ZeRO optimization stages)、流水线并行(pipeline parallelism)、FP16/BF16/FP8 训练、1-bit Adam、稀疏注意力(sparse attention)等。这些内容用于分布式深度学习训练场景。

DeepNVMe 高性能 I/O

DeepNVMe 用于在持久化存储与位于主机或设备内存中的张量之间进行数据传输,其优化建立在 NVMe SSD、Linux 异步 I/O(libaio)以及 NVIDIA Magnum IO GPUDirect Storage(GDS)之上。

使用要求:需安装 DeepSpeed 版本 >= 0.15.0;需确保 DeepNVMe 算子可用,其中 async_io 算子为所有 DeepNVMe 功能所必需,gds 算子仅 GDS 功能需要。可通过 ds_report 输出确认算子兼容状态是否为 [OKAY]。若 async_io 不可用,需安装对应 Linux 发行版的 libaio 库二进制文件,例如 Ubuntu 用户运行 apt install libaio-dev。启用 gds 算子需安装 NVIDIA GDS。

DeepNVMe 通过两种抽象访问:aio_handle 与 gds_handle。aio_handle 可用于主机与设备张量;gds_handle 仅适用于 CUDA 张量,但效率更高。aio_handle 需要 async_io 算子,gds_handle 需要 async_io 与 gds 两个算子。

创建句柄示例:

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

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

两种句柄提供相同的 API,用于将张量存入文件或从文件加载张量,参数为张量与文件路径。为获得最佳性能,I/O 操作应使用固定的(pinned)设备或主机张量。

I/O 操作方式

  • 阻塞式文件写入:sync_pwrite 提供标准阻塞语义。
  • 非阻塞文件写入:async_pwrite 提供非阻塞语义,使 Python 线程可将计算与 I/O 重叠;之后可用 wait() 同步。async_write 可连续提交多个非阻塞 I/O 操作,再用单个 wait() 阻塞等待。注意:为避免数据竞争与损坏,必须谨慎使用 .wait() 来串行化源张量的写入与目标张量的读取;在非阻塞写入期间修改源张量是不安全的。
  • 并行文件写入:在创建句柄时指定并行度(intra_op_parallelism),后续 I/O 操作会自动在相应数量的主机或设备线程上并行化,且可与阻塞或非阻塞 API 组合使用。
  • 固定张量:DeepNVMe 优化依赖直接内存访问(DMA),要求主机或设备张量被固定。主机张量可用 PyTorch 或 DeepSpeed Accelerators 提供的机制固定;gds_handle 提供 new_pinned_device_tensor() 与 pin_device_tensor() 用于固定 CUDA 张量,另有 unpin_device_tensor() 解除固定。

性能调优

句柄构造参数对性能至关重要,决定 DeepNVMe 与底层存储子系统(libaio、GDS、PCIe、SSD)的交互效率。默认参数在多数场景下性能尚可,但追求极致性能通常需调整 block_size、queue_depth、single_submit、overlap_events、intra_op_parallelism。aio_handle 构造函数默认值为:block_size=1048576、queue_depth=128、single_submit=False、overlap_events=False、intra_op_parallelism=1。

提供 ds_nvme_tune 工具自动探索配置空间并推荐最佳读写性能配置。示例:

$ ds_nvme_tune --nvme_dir /local_nvme --gpu

该示例在默认配置空间下运行,输出最佳性能(GB/sec)与推荐配置 JSON。文档给出的示例环境为 Lambda 工作站,配备两块 NVIDIA A6000-48GB GPU、252GB DRAM、CS3040 NVMe 2TB SSD(峰值读写 5.6 GB/s 与 4.3 GB/s),调优约需四分半钟,示例结果为读 3.69 GB/sec、写 3.18 GB/sec。ds_nvme_tune 支持的命令行选项包括 --nvme_dir、--sweep_config、--no_read、--no_write、--io_size、--gpu、--gds、--flush_page_cache、--log_dir、--loops、--verbose。

DeepNVMe API 概览

通用 I/O API(aio_handle 与 gds_handle 均可用):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:get_queue_depth、get_single_submit、get_intra_op_parallelism、get_block_size、get_overlap_events。

MoE 用于 NLG 模型

技能包含将 DeepSpeed Mixture of Experts(MoE)应用于 NLG 模型的教程,以 Megatron-LM 框架中的 GPT-3 类模型为例,内容涉及对模型的修改、标准 MoE 模型预训练、PR-MoE 模型预训练,以及以缩减模型规模训练 MoS。文档称其可降低训练成本并缩减 MoE 模型规模。

适用场景

  • 使用 DeepSpeed 进行分布式深度学习训练与并行配置;
  • 训练加速与显存/存储 I/O 优化;
  • 在 NVMe 存储与主机/设备张量之间进行高性能数据传输;
  • 将 MoE 应用于 NLG 模型训练;
  • 调试 DeepSpeed 代码、查询其特性与 API、学习最佳实践。

限制

  • DeepNVMe 需 DeepSpeed >= 0.15.0,并依赖 async_io 算子;GDS 功能还需 gds 算子与 NVIDIA GDS 安装。
  • gds_handle 仅适用于 CUDA 张量。
  • 非阻塞 I/O 需正确使用 wait() 同步,否则可能产生数据竞争与文件损坏。
  • 达到峰值性能通常需要手动调优句柄参数或使用 ds_nvme_tune。
  • 关于收费、价格、平台支持范围等信息,资料中暂未提供。