文件最后提交记录最后更新时间
9 个月前
README

MindSpeed MindSpore后端介绍

MindSpeed已支持接入华为自研AI框架MindSpore,旨在提供华为全栈易用的端到端的大模型训练解决方案,以此获得更极致的性能体验。MindSpore后端提供了一套对标PyTorch的API,用户无需进行额外代码适配即可无缝切换。


安装

1. 安装依赖

依赖软件 软件安装指南
昇腾NPU驱动 《 驱动固件安装指南 》
昇腾NPU固件
Toolkit(开发套件) 《 CANN 软件安装指南 》
Kernel(算子包)
NNAL(Ascend Transformer Boost加速库)
MindSpore 《 MindSpore AI框架安装指南 》

2. 获取 MindSpore-Core-MS 代码仓

执行以下命令拉取MindSpeed-Core-MS代码仓,并安装Python三方依赖库,如下所示:

git clone https://gitcode.com/Ascend/MindSpeed-Core-MS.git -b master
cd MindSpeed-Core-MS
pip install -r requirements.txt

可以参考MindSpeed-Core-MS目录下提供的一键适配命令脚本, 拉取并适配相应版本的MindSpeed、Megatron-LM和MSAdapter。

若使用MindSpeed-Core-MS目录下的一键适配命令脚本(如auto_convert.sh)可忽略后面步骤。

3. 获取并适配相应版本的 MindSpeed、Megatron-LM 和 MSAdapter

(1)进入MindSpore-Core-MS目录后,获取指定版本仓库的源码:

# 获取指定版本的MindSpeed源码:
git clone https://gitcode.com/Ascend/MindSpeed.git -b master

# 获取指定版本的Megatron-LM源码:
git clone https://gitee.com/mirrors/Megatron-LM.git -b core_v0.12.1

# 获取指定版本的MSAdapter源码:
git clone https://openi.pcl.ac.cn/OpenI/MSAdapter.git -b master

具体版本对应关系参考MindSpore-Core-MS下的一键适配命令脚本,如auto_convert.sh。

(2)设置环境变量:

# 在MindSpeed-Core-MS目录下执行
# 若在环境中PYTHONPATH等环境变量失效(例如退出容器后再进入等),需要重新设置环境变量
MindSpeed_Core_MS_PATH=$(pwd)
export PYTHONPATH=${MindSpeed_Core_MS_PATH}/MSAdapter:${MindSpeed_Core_MS_PATH}/MSAdapter/msa_thirdparty:${MindSpeed_Core_MS_PATH}/MindSpeed:$PYTHONPATH
echo $PYTHONPATH

(3)如需使用Ascend Transformer Boost(ATB)加速库算子,请先安装 CANN-NNAL 并初始化添加环境,例如:

# CANN-NNAL默认安装路径为:/usr/local/Ascend/nnal
# 运行CANN-NNAL默认安装路径下atb文件夹中的环境配置脚本set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh

快速上手

  1. 仅仅一行代码就可以轻松使能 MindSpeed 的各项功能。以 GPT 模型为例:在 Megatron-LM 目录下修改pretrain_gpt.py文件,在import torch下新增一行:import mindspeed.megatron_adaptor,即如下修改:

     import os
     import torch
    +import mindspeed.megatron_adaptor
     from functools import partial
     from typing import Union
    
  2. (可选)若未准备好相应训练数据,则需进行数据集的下载及处理供后续使用。数据集准备流程可参考 数据集处理。

  3. 在 Megatron-LM 目录下,准备好训练数据,并在示例脚本中填写对应路径,然后执行。以下示例脚本可供参考。

    MindSpeed/tests_extend/example/train_distributed_ms.sh
    

自定义优化级别

MindSpeed 提供了多层次的优化解决方案,并划分为三个层级,用户可根据实际需求灵活启用任意层级。高层级兼容低层级的能力,确保了整个系统的稳定性和扩展性。 用户可以通过设置启动脚本中的 --optimization-level {层级} 参数来自定义开启的优化层级。该参数支持以下配置:

层级 层级名称 介绍
0 基础兼容层 提供Megatron-LM框架对NPU的支持,确保无缝集成。该层包含基础功能集patch,保证可靠性和稳定性,为高级优化奠定基础。
1 亲和性增强层🔥 兼容L0能力,集成高性能融合算子库,结合昇腾亲和的计算优化,充分释放昇腾算力,显著提升计算效率。
2 自研加速算法层🔥🔥 默认值。该模式兼容了L1, L0能力,并集成了昇腾多项自主研发核心技术成果,可提供全面的性能优化。

特性介绍

MindSpeed 特性由七大模块组成,分别为:megatron特性支持、并行策略特性、内存优化特性、亲和计算特性、通信优化特性、关键场景特性以及多模态特性。其中【Released】表示是否商用发布,原型特性为非商用发布。

  • 特性的介绍中说明了对应特性的应用场景及使用说明。一般而言,在脚本中加入相关参数即可轻松使用对应特性。🛰️

  • 当前大模型训练主要使用bf16数据类型,以下特性若无特殊声明原则上兼容fp16, 如遇到fp16场景下相关问题请联系 MindSpeed 团队或提交issue, 我们会快速响应。🛰️

特性支持

MindSpore后端对MindSpeed的重要加速特性的支持情况如下表所示,部分不支持的特性将在后续迭代中逐步支持,敬请期待。

特性名称 介绍 支持情况
Megatron 张量并行 link ✅
Megatron 流水并行 link ✅
Megatron 虚拟流水并行 link ✅
Megatron 分布式优化器 link ✅
Megatron 序列并行 link ✅
Megatron 权重更新通信隐藏 link ✅
Megatron 重计算 link ✅
Megatron 全分片并行 link 暂不支持开启pp及--reuse-fp32-param参数配置

并行策略特性

特性名称 介绍 支持情况
Ascend Ulysses 长序列并行 link ✅
Ascend Ring Attention 长序列并行 link ✅
Ascend Double Ring Attention 长序列并行 link ❌
Ascend 混合长序列并行 link ❌
Ascend 自定义空操作层 link ✅
Ascend DualPipeV link 暂不支持--dualpipev-dw-detach参数配置

内存优化特性

特性名称 介绍 支持情况
Ascend 激活函数重计算 link ✅
Ascend 重计算流水线独立调度 link ❌
Ascend Mask归一 link ❌
Ascend BF16 参数副本复用 link ✅
Ascend swap_attention link ❌
Ascend Norm重计算 link ✅
Ascend Hccl Buffer 自适应 link ❌
O2 BF16 Optimizer link ❌
SWAP优化器 link ✅

亲和计算特性

特性名称 介绍 支持情况
Ascend rms_norm 融合算子 link ✅
Ascend swiglu 融合算子 link ✅
Ascend flash attention link ✅
Ascend ring attention update link ✅
Ascend Moe Token Permute and Unpermute 融合算子 link ✅
Ascend npu_matmul_add_fp32 梯度累加融合算子 link ✅
Ascend 计算通信并行优化 link ✅
Ascend MC2 link ❌
Ascend fusion_attention_v2 link ❌

通信优化特性

特性名称 介绍 支持情况
Ascend Gloo 存档落盘优化 link ❌
Ascend 高维张量并行 link ❌

Mcore MoE特性

特性名称 介绍 支持情况
Ascend Megatron MoE GMM link ✅
Ascend Megatron MoE Allgather Dispatcher 性能优化 link ❌
Ascend Megatron MoE Alltoall Dispatcher 性能优化 link ✅
Ascend Megatron MoE TP拓展EP link ✅
Ascend 共享专家 link ✅
Ascend Megatron MoE alltoall 通信掩盖 link ✅

关键场景特性

特性名称 介绍 支持情况
Ascend EOD Reset训练场景 link ✅
Ascend alibi link ✅

多模态特性

特性名称 介绍 支持情况
Ascend fused ema adamw优化器 link ❌
Ascend PP支持动态形状 link ✅
Ascend PP支持多参数传递 link ❌
Ascend PP支持多参数传递和动态形状 link ❌
Ascend 非对齐线性层 link ❌
Ascend 非对齐Ulysses长序列并行 link ❌

其它特性

特性名称 介绍 支持情况
Ascend TFLOPS计算 link ✅
Ascend Auto Settings 并行策略自动搜索系统 link ❌
Ascend 确定性计算 link ✅

自定义算子

部分自定义算子设置为公开接口,公开接口设置说明请参照 MindSpeed 安全声明中的公开接口声明,具体对外接口细节参照以下算子对应的手册链接。

自定义算子名称 介绍 Released
npu_dropout_add_layer_norm link ✅
npu_rotary_position_embedding link ✅
fusion_attention link ✅
rms_norm link ✅
swiglu link ✅
npu_mm_all_reduce_add_rms_norm link ✅
npu_mm_all_reduce_add_rms_norm_ link ✅
npu_gmm link ✅
npu_grouped_mat_mul_all_reduce link ✅
lcal_coc link ✅
npu_apply_fused_ema_adamw link ✅
ffn link ❌
npu_ring_attention_update link ❌
npu_matmul_add_fp32 link ❌
npu_groupmatmul_add_fp32 link ❌
npu_all_to_all_all_gather_bmm link ❌
npu_bmm_reduce_scatter_all_to_all link ❌
quant_gmm link ❌

MindSpeed 中采集Profile数据

📝 MindSpeed 支持命令式开启Profile采集数据,命令配置介绍如下:

配置命令 命令含义
--profile 打开profile开关
--profile-step-start 配置开始采集步,未配置时默认为10, 配置举例: --profile-step-start 30
--profile-step-end 配置结束采集步,未配置时默认为12, 配置举例: --profile-step-end 35
--profile-level 配置采集等级,未配置时默认为level0, 可选配置: level0, level1, level2, 配置举例: --profile-level level1
--profile-with-cpu 打开cpu信息采集开关
--profile-with-stack 打开stack信息采集开关
--profile-with-memory 打开memory信息采集开关,配置本开关时需打开--profile-with-cpu
--profile-record-shapes 打开shapes信息采集开关
--profile-save-path 配置采集信息保存路径, 未配置时默认为./profile_dir, 配置举例: --profile-save-path ./result_dir
--profile-ranks 配置待采集的ranks,未配置时默认为-1,表示采集所有rank的profiling数据,配置举例: --profile-ranks 0 1 2 3, 需注意: 该配置值为每个rank在单机/集群中的全局值

常见问题

现象 介绍
Data helpers 数据预处理出错 ❗ link
Torch extensions 编译卡住 ❗ link
megatron0.7.0版本长稳测试出现grad norm为nan ❗ link
Gloo建链失败Gloo connectFullMesh failed with ... ❗ link

技术文章