# MindSpeed_readme1 **Repository Path**: wang_rich/MindSpeed_readme1 ## Basic Information - **Project Name**: MindSpeed_readme1 - **Description**: 昇腾大模型加速库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 503 - **Created**: 2025-05-19 - **Last Updated**: 2025-05-19 ## 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 ``` # 版本变更说明(自 core_r0.10.0 起) ## ⚠️ 重要更新 自 **core_r0.10.0** 开始,为了支持更广泛的用户需求,并解决之前用户意图运行 `--transformer-impl transformer_engine` 实现却意外使用了 `--transformer-impl local` 的问题,需要额外配置 Transformer 实现。 ## ✅ 新增配置要求 请在启动命令中添加以下参数以明确指定使用本地(Local)Transformer 实现: ```bash --transformer-impl local ``` 此设置确保系统按预期执行特定的 Transformer 实现。 ## 📌 注意事项 - 缺少该参数时,系统将依据默认配置选择实现方式,即`--transformer-impl transformer_engine`。 - 使用 `--transformer-impl transformer_engine` 的用户应确保未错误配置为 `--transformer-impl local` 实现。 我们建议所有用户升级后检查并调整相关配置,以匹配实际需求。 # 快速上手 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!