文件最后提交记录最后更新时间
[mindspore][docs] edit link for moe feature7 个月前
readme.md

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 r0.4.0
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 2.2.0_core_r0.12.1

# 获取指定版本的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/mindtorch:${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

并行策略特性

特性名称 介绍 支持情况
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

技术文章