# MindSpeed **Repository Path**: wangzw1022/MindSpeed ## Basic Information - **Project Name**: MindSpeed - **Description**: 昇腾大模型加速库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 454 - **Created**: 2024-05-09 - **Last Updated**: 2025-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Badge Documentation

# 简介 MindSpeed 是针对华为[昇腾设备](https://www.hiascend.com/)的大模型加速库。 大模型训练是一种非常复杂的过程,涉及到许多技术和挑战,其中大模型训练需要大量的显存资源是一个难题,对计算卡提出了不小的挑战。 为了在单个计算卡显存资源不足时,可以通过多张计算卡进行计算,业界出现了类似 Megatron、DeepSpeed 等第三方大模型加速库,对模型、输入数据等进行切分并分配到不同的计算卡上,最后再通过集合通信对结果进行汇总。 昇腾提供 MindSpeed 加速库,使能客户大模型业务快速迁移至昇腾设备,并且支持昇腾专有算法,确保开箱可用。 --- # 安装 ### 1. 安装依赖 ☀️ 在安装 **MindSpeed** 之前,请参考[版本配套表](#版本配套表),安装最新昇腾软件栈。
依赖软件 软件安装指南
昇腾NPU驱动 驱动固件安装指南
昇腾NPU固件
Toolkit(开发套件) CANN 软件安装指南
Kernel(算子包)
NNAL(Ascend Transformer Boost加速库)
PyTorch Ascend Extension for PyTorch 配置与安装
torch_npu插件
apex
### 2. 安装 MindSpeed ☀️ 下载源码安装: ```shell git clone https://gitee.com/ascend/MindSpeed.git pip install -e MindSpeed ``` 如需使用Ascend Transformer Boost(ATB)加速库算子,请先安装 CANN-NNAL 并初始化添加环境,例如: ```shell # CANN-NNAL默认安装路径为:/usr/local/Ascend/nnal # 运行CANN-NNAL默认安装路径下atb文件夹中的环境配置脚本set_env.sh source /usr/local/Ascend/nnal/atb/set_env.sh ``` ### 3. 获取 Megatron-LM 并指定分支 ☀️ 获取并切换 Megatron-LM 版本至 core_r0.10.0 的release版本,如下所示: ```shell git clone https://github.com/NVIDIA/Megatron-LM.git cd Megatron-LM git checkout core_r0.10.0 ``` # 快速上手 1. 仅仅一行代码就可以轻松使能 MindSpeed 的各项功能。以 GPT 模型为例:在 Megatron-LM 目录下修改`pretrain_gpt.py`文件,在`import torch`下新增一行:`import mindspeed.megatron_adaptor`,即如下修改: ```diff import os import torch +import mindspeed.megatron_adaptor from functools import partial from typing import Union ``` 2. 从core_r0.10.0版本开始,Megatron大量使用高版本语法的类型注解(Type Annotations),如: ``` hierarchical_context_parallel_sizes: Optional[list[int]] = None ``` 因此,若出现以下报错: ``` TypeError: 'type' object is not subscriptable. ``` 则需修改Megatron相应代码,或使用python 3.9及以上版本以适应Megatron原生接口的变动。 3. 在 Megatron-LM 目录下,准备好训练数据,并在示例脚本中填写对应路径,然后执行。 ```shell bash examples/gpt3/train_gpt3_175b_distributed.sh ``` --- # 自定义优化级别 MindSpeed 提供了多层次的优化解决方案,并划分为三个层级,用户可根据实际需求灵活启用任意层级。高层级兼容低层级的能力,确保了整个系统的稳定性和扩展性。 用户可以通过设置启动脚本中的 `--optimization-level {层级}` 参数来自定义开启的优化层级。该参数支持以下配置:
层级 层级名称 介绍
0 基础兼容层 提供Megatron-LM框架对NPU的支持,确保无缝集成。该层包含基础功能集patch,保证可靠性和稳定性,为高级优化奠定基础。
1 亲和性增强层🔥 兼容L0能力,集成高性能融合算子库,结合昇腾亲和的计算优化,充分释放昇腾算力,显著提升计算效率。
2 自研加速算法层🔥🔥 默认值。该模式兼容了L1, L0能力,并集成了昇腾多项自主研发核心技术成果,可提供全面的性能优化。
# 特性介绍 MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并行策略特性、内存优化特性、亲和计算特性、通信优化特性、关键场景特性以及多模态特性。其中【Released】表示是否商用发布,原型特性为非商用发布。 - 特性的介绍中说明了对应特性的应用场景及使用说明。一般而言,在脚本中加入相关参数即可轻松使用对应特性。🛰️ - MindSpeed 加速特性仅支持mcore,这也是megatron在v0.6.0版本后主推分支,也是当前版本的默认分支。🛰️ - 当前大模型训练主要使用bf16数据类型,以下特性若无特殊声明原则上兼容fp16, 如使用其它数据类型遇到问题可提交issue, 我们会快速响应。🛰️ ## Megatron特性支持
特性名称 介绍 Released
Megatron 数据并行 link
Megatron 张量并行 link
Megatron 流水并行 link
Megatron 虚拟流水并行 link
Megatron 分布式优化器 link
Megatron 序列并行 link
Megatron 异步DDP link
Megatron 权重更新通信隐藏 link
Megatron 重计算 link
## 并行策略特性
特性名称 介绍 Released
Ascend Ulysses 长序列并行 link
Ascend Ring Attention 长序列并行 link
Ascend Double Ring Attention 长序列并行 link
Ascend 混合长序列并行 link
Ascend 自定义空操作层 link
## 内存优化特性
特性名称 介绍 Released
Ascend 激活函数重计算 link
Ascend 重计算流水线独立调度 link
Ascend Mask归一 link
Ascend BF16 参数副本复用 link
Ascend swap_attention link
Ascend Norm重计算 link
Ascend Hccl Buffer 自适应 link
## 亲和计算特性
特性名称 介绍 Released
Ascend rms_norm 融合算子 link
Ascend swiglu 融合算子 link
Ascend rotary_embedding 融合算子 link
Ascend flash attention link
Ascend npu_matmul_add_fp32 梯度累加融合算子 link
Ascend Moe BMM通算融合算子 link
Ascend 计算通信并行优化 link
Ascend MC2(存在已知问题⚠️) link
Ascend fusion_attention_v2 link
## 通信优化特性
特性名称 介绍 Released
Ascend Gloo 存档落盘优化 link
Ascend 高维张量并行 link
## Mcore MoE特性
特性名称 介绍 Released
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 负载感知内存均衡算 link
## 关键场景特性
特性名称 介绍 Released
Ascend EOD Reset训练场景 link
Ascend alibi link
## 多模态特性
特性名称 介绍 Released
Ascend fused ema adamw优化器 link
Ascend PP支持动态形状 link
Ascend PP支持多参数传递 link
Ascend PP支持多参数传递和动态形状 link
Ascend 非对齐线性层 link
Ascend 非对齐Ulysses长序列并行 link
## 其它特性
特性名称 介绍 Released
Ascend TFLOPS计算 link
Ascend Auto Settings 并行策略自动搜索系统 link
Ascend 确定性计算 link
## 自定义算子 昇腾训练自定义算子统一由torch_npu提供API,以下API预计2025年q4起不维护,请优先使用torch_npu提供的自定义算子,如有新需求或问题可提issue反馈,我们会尽快回复。 部分自定义算子设置为公开接口,公开接口设置说明请参照 MindSpeed 安全声明中的[公开接口声明](SECURITYNOTE.md#公开接口声明),具体对外接口细节参照以下算子对应的手册链接。
自定义算子名称 介绍 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
npu_fused_moe_token_permute link
npu_fused_moe_token_unpermute link
npu_ring_attention_update link
npu_matmul_add_fp32 link
npu_groupmatmul_add_fp32 link
npu_apply_fused_ema_adamw link
lcal_coc link
ffn 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在单机/集群中的全局值 | --- # 版本配套表 💡 **PyTorch Extension**版本号采用`{PyTorch版本}-{昇腾版本}`命名规则,前者为**PyTorch Extension**匹配的PyTorch版本,后者用于匹配CANN版本,详细匹配如下: | MindSpeed版本 | Megatron版本 | PyTorch版本 | torch_npu版本 | CANN版本 | Python版本 | 硬件型态 | |-------------------------|-----------------|------------- |-------------|---------|----------------------------------------|----------| | master(主线) | Core 0.10.0 | 2.1.0 | 在研版本 | 在研版本 | Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | core_r0.9.0(主线) | Core 0.9.0 | 2.1.0 | 在研版本 | 在研版本 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | core_r0.8.0(主线) | Core 0.8.0 | 2.1.0 | 在研版本 | 在研版本 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | core_r0.7.0(主线) | Core 0.7.0 | 2.1.0 | 在研版本 | 在研版本 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | core_r0.6.0(主线) | Core 0.6.0 | 2.1.0 | 在研版本 | 在研版本 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.0_core_r0.7.0(商用) | Core 0.7.0 | 2.1.0 | 6.0.0 | 8.0.0 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.0_core_r0.6.0(商用) | Core 0.6.0 | 2.1.0 | 6.0.0 | 8.0.0 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.RC3_core_r0.7.0(商用) | Core 0.7.0 | 2.1.0 | 6.0.RC3 | 8.0.RC3 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.RC3_core_r0.6.0(商用) | Core 0.6.0 | 2.1.0 | 6.0.RC3 | 8.0.RC3 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.RC2(商用) | Core 0.6.0 | 2.1.0 | 6.0.RC2 | 8.0.RC2 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | | 1.0.RC1(商用) | commitid bcce6f | 2.1.0 | 6.0.RC1 | 8.0.RC1 | Python3.8.x, Python3.9.x, Python3.10.x | Atlas 200T A2 Box16, Atlas 800T A2, Atlas 900 A2 PODc | [昇腾辅助软件](https://gitee.com/ascend/pytorch#%E6%98%87%E8%85%BE%E8%BE%85%E5%8A%A9%E8%BD%AF%E4%BB%B6)中有更多关于PyTorch和CANN的版本信息。 # 分支维护策略 🛠️ MindSpeed 版本分支的维护阶段如下: | **状态** | **时间** | **说明** | | ------------------- | -------- |----------------------------------------------------------------------| | 计划 🕐 | 1-3 个月 | 计划特性 | | 开发 🕔 | 3 个月 | 开发特性 | | 维护 🕚 | 6-12 个月| 合入所有已解决的问题并发布版本,针对不同的MindSpeed 版本采取不同的维护策略,常规版本和长期支持版本维护周期分别为6个月和12个月 | | 无维护 🕛 | 0-3 个月 | 合入所有已解决的问题,无专职维护人员,无版本发布 | | 生命周期终止(EOL)🚫 | N/A | 分支不再接受任何修改 | 🛠️ MindSpeed 版本维护策略: | **MindSpeed版本** | **维护策略** | **当前状态** | **发布时间** | **后续状态** | **EOL日期** | |---------------------|-----------|---------|------------|--------------------|-----------| | 2.0.0_core_r0.8.0 | 常规版本 | 开发 | 2025/03/30 | 预计2025/9/30起无维护 | | | 1.0.0_core_r0.7.0 | 常规版本 | 开发 | 2024/12/30 | 预计2025/6/30起无维护 | | | 1.0.0_core_r0.6.0 | 常规版本 | 开发 | 2024/12/30 | 预计2025/6/30起无维护 | | | 1.0.RC3_core_r0.7.0 | 常规版本 | 维护 | 2024/09/30 | 预计2025/3/30起无维护 | | | 1.0.RC3_core_r0.6.0 | 常规版本 | 维护 | 2024/09/30 | 预计2025/3/30起无维护 | | | 1.0.RC2 | 常规版本 | 维护 | 2024/06/30 | 预计2024/12/30起无维护 | | | 1.0.RC1 | 常规版本 | 停止维护 | 2024/03/30 | 2024/9/30起无维护 | | --- # 常见问题 | 现象 | 介绍 | |------------------------------------|---------------------------------------| | Data helpers 数据预处理出错 ❗ | [link](docs/faq/data_helpers.md) | | Torch extensions 编译卡住 ❗ | [link](docs/faq/torch_extensions.md) | | megatron0.7.0版本长稳测试出现grad norm为nan ❗| [link](docs/faq/megatron070_grad_norm_nan.md) | | Gloo建链失败Gloo connectFullMesh failed with ... ❗| [link](docs/features/hccl-replace-gloo.md) | # 技术文章 - [MindSpeed 加速百万级超长序列大模型训练](https://mp.weixin.qq.com/s/8q4MxCkosLn0yoneuxzynw) 🚀🚀 - [MindSpeed 加速万亿MoE大模型训练](https://mp.weixin.qq.com/s/HQRzYzSUNNMonv5d1AP0OQ) 🚀🚀 - [大模型训练内存优化难?MindSpeed 帮你来支招](https://mp.weixin.qq.com/s/lwjVgM67hwsgtOKp06zYPg) 🚀🚀 # 安全声明 ⚠️ [MindSpeed 安全声明](SECURITYNOTE.md) --- # 致谢 🔎 MindSpeed-Core 由华为公司的下列部门联合贡献 : 华为公司: - 昇腾计算产品部 - 计算算法部 - 计算软件平台部 - 计算技术开发部 - 公共开发部:NAIE - 网络技术实验室 此外,MindSpeed-Core 感谢以下团队对项目的贡献: - 微信基础架构中心 感谢来自社区的每一个PR,欢迎贡献 MindSpeed-Core!