SuperAPI AI 工具集

deepspeed

智能体与模型

查看项目

更新于 10-30 06:48

技能介绍

DeepSpeed 技能基于官方文档生成,用于在分布式深度学习训练开发中提供参考与指导。当需要处理 DeepSpeed 相关工作、询问其功能或 API、实现相关方案、调试代码或学习最佳实践时,可触发该技能。

主要能力覆盖分布式训练的优化方向,包括 ZeRO 优化阶段、流水线并行、FP16/BF16/FP8 混合精度、1-bit Adam 与稀疏注意力。资料还给出两类典型使用模式:DeepNVMe 数据传输,以及面向自然语言生成(NLG)模型的 Mixture of Experts(MoE)训练。

DeepNVMe 用于在持久化存储与主机或设备内存中的张量之间传输数据,其优化建立在 NVMe SSD、Linux 异步 I/O(libaio)与 NVIDIA GPUDirect Storage(GDS)之上。使用前提为 DeepSpeed 版本不低于 0.15.0,并通过 ds_report 确认 async_io 算子可用(任何 DeepNVMe 功能都需要),gds 算子仅在需要 GDS 时需要;若缺少 async_io,需按 Linux 发行版安装 libaio 库,例如 Ubuntu 执行 apt install libaio-dev。

DeepNVMe 通过 aio_handle 与 gds_handle 两种句柄访问:aio_handle 可用于主机与设备张量,gds_handle 仅支持 CUDA 张量但更高效。句柄可通过 from deepspeed.ops.op_builder import AsyncIOBuilder 后调用 AsyncIOBuilder().load().aio_handle() 创建,GDS 句柄则使用 GDSBuilder().load().gds_handle()。两者提供一致的读写 API,包括阻塞式 sync_pwrite、非阻塞 async_pwrite 以及 pwrite,读取侧对应 sync_pread、async_pread、pread,并用 wait() 等待非阻塞操作完成。非阻塞写入后若在未 wait() 前修改源张量,会产生数据竞争并可能损坏文件,需谨慎串行化。

性能方面,DeepNVMe 支持在创建句柄时通过 intra_op_parallelism 指定并行度,实现单次 I/O 的多线程并行,且可与阻塞或非阻塞 API 组合。为获得较好性能,应使用固定(pinned)的主机或设备张量:主机张量可用 PyTorch 的 pin_memory,CUDA 张量可用 gds_handle 的 pin_device_tensor、new_pinned_device_tensor 等接口。高级句柄创建参数 block_size、queue_depth、single_submit、overlap_events、intra_op_parallelism 对性能关键,默认值在多数环境表现尚可;可用 ds_nvme_tune 工具自动搜索配置,示例命令为 ds_nvme_tune --nvme_dir /local_nvme --gpu,输出建议的最佳读写下限与 JSON 配置。资料中给出的示例在特定工作站上测得住 3.69 GB/s 读、3.18 GB/s 写,但该数值取决于具体硬件环境,不代表通用效果。

在 MoE 方面,资料介绍将 DeepSpeed Mixture of Experts 应用于 NLG 模型(以 Megatron-LM 中的 GPT-3 类模型为例),涉及模型改动、标准 MoE 预训练、PR-MoE 预训练以及缩减模型规模的 MoS 训练;文中称可降低训练成本并缩小 MoE 模型体积,具体数据以原文博客为准。

适用场景包括大规模模型分布式训练优化、需要高频张量换入换出的推理与训练(如 ZeRO-Inference、ZeRO-Infinity 中的参数、优化器与梯度 swapper),以及 MoE 模型的训练实践。限制在于:DeepNVMe 依赖 NVMe 存储、libaio 与可选 GDS 环境,GDS 句柄仅限 CUDA 张量,非阻塞 I/O 需正确同步,性能需按环境调优;其余功能的具体版本要求、支持范围与效果资料未逐一说明,暂未提供。