deepspeed_npu: Ascend NPU 适配 deepspeed 插件
通过 deepspeed_npu,你可以在 Ascend910 芯片上使用 deepspeed,并基于 deepspeed 进行开发。目前,deepspeed_npu 主要支持以下特性:
- FP16
- Gradient Accumulation
- Data Parallelism
- Pipeline Parallelism
- Tensor Parallelism (Inference Engine)
- ZeRO (stage1-stage3)
- Activation Checkpointing
- ZeRO-Offload
- CPU Adam
- Fused Adam
- One-bit Adam
- MoE
- Zero Infinity
- Zero-One Adam
- Curriculum Learning
- Progressive layer dropping
请参考 deepspeed 官方文档获取这些特性的详细说明:https://www.deepspeed.ai/
1.版本说明
目前仅支持 deepspeed 版本 0.9.2:https://github.com/microsoft/DeepSpeed/tree/v0.9.2
2.安装方法
2.1 先安装原生 deepspeed
pip3 install deepspeed==0.9.2
2.2 然后安装 deepspeed-npu 插件
git clone https://gitee.com/ascend/DeepSpeed.git -b v0.9.2 deepspeed_npu
cd deepspeed_npu
pip3 install .
2.3 安全加固(可选)
2.3.1 权限相关说明
- 请勿使用管理员账户安装运行,建议安装完成后对安装目录文件做好权限管控,文件夹权限建议设置为 750,文件权限建议设置为 640。
- 如需要保存安装日志,可在安装命令后面加上参数
--log <PATH>
, 对<PATH>
做好权限管控。 - 运行程序前,建议用户对训练所需文件,模型脚本、权重等做好权限控制等安全措施。
- 在多用户共享数据集的场景下,请根据需求最小化权限设置所需的文件夹以及文件的读写权限等,避免出现非法访问等安全问题。
- 对于涉及隐私数据、商业资产等敏感文件,建议用户做好安全防护和权限控制,避免隐私泄露造成安全风险。
- 对于涉及到使用 C++ 动态编译特性的场景,建议打开 ASLR (地址空间配置随机加载)以及对编译后的 SO 文件开启 strip(移除调试符号信息),减少程序的暴露面。 因编译由 DeepSpeed 原生框架负责且无此类配置选项,故需用户自行开启,开启方法参考下方章节。
2.3.2 打开 ASLR
echo 2 > /proc/sys/kernel/randomize_va_space
2.3.3 对 cpu_adam、offload 等特性动态编译的 so 文件开启 strip
strip -s /PATH/FEATURE.so
3.插件使用方法
在入口文件行首 import deepspeed_npu,并配合 deepspeed / torch 使用,例如
import deepspeed_npu
import torch
import torch_npu
...
4. DeepSpeed 使用参考
https://github.com/microsoft/DeepSpeedExamples
5. 关于
5.1 目录结构说明
deepspeed_npu
:文件夹下的各个文件都对应原生的文件,如 adaptor_xxx_yyy.py 文件对应原生的 xxx.yyy.py 文件。deepspeed_npu.csrc_npu
:文件夹下为相关特性的动态编译 C++ 文件,与原生的 csrc 文件夹相对应。如 csrc_npu/adam 文件夹对应原生的 csrc/adam 文件夹。
5.2 通信矩阵说明
本插件不涉及端口侦听等相关行为,相关端口由用户在模型脚本指定调用原生接口开启,建议用户注意做好安全防护,单机训练的情况下请勿绑定全局端口。
5.3 接口替换说明
deepspeed_npu 以 monkey patching/装饰器等方式替换/修改 DeepSpeed 原有函数实现,并不提供对外接口,用户只需要import deepspeed_npu
,做到无感迁移原有模型代码。