From 1c1e1006aa6e80eeab9b593819d41ebd10366776 Mon Sep 17 00:00:00 2001 From: passioningsun Date: Fri, 12 Sep 2025 16:07:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=A8=A1=E6=9D=BF=E6=95=B4?= =?UTF-8?q?=E6=94=B9Core=E4=B8=BB=E9=A1=B5Readme=20+=20=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E4=B8=8A=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 958 +++++++++++++++-------------- docs/user-guide/getting_started.md | 169 +++-- 2 files changed, 615 insertions(+), 512 deletions(-) diff --git a/README.md b/README.md index e4adba6f..ef7dbeaf 100644 --- a/README.md +++ b/README.md @@ -14,33 +14,65 @@

+ # 简介 -MindSpeed Core 是针对华为[昇腾设备](https://www.hiascend.com/)的大模型加速库。 +--- + + -大模型训练是一种非常复杂的过程,涉及到许多技术和挑战,其中大模型训练需要大量的显存资源是一个难题,对计算卡提出了不小的挑战。 -为了在单个计算卡显存资源不足时,可以通过多张计算卡进行计算,业界出现了类似 Megatron、DeepSpeed 等第三方大模型加速库,对模型、输入数据等进行切分并分配到不同的计算卡上,最后再通过集合通信对结果进行汇总。 +MindSpeed Core :华为[昇腾设备](https://www.hiascend.com/)的大模型加速库,旨在让客户大模型业务快速迁移至昇腾设备,并且支持昇腾专有算法,确保开箱可用。 -昇腾提供 MindSpeed Core 加速库,使能客户大模型业务快速迁移至昇腾设备,并且支持昇腾专有算法,确保开箱可用。 +由于大模型训练是一种非常复杂的过程,涉及到许多技术和挑战,其中大模型训练的一个难题是需要大量的显存资源,这对计算卡数量的要求很高。 -此外在 MindSpeed Core 加速库的基础之上也提供了大语言模型、多模态模型以及强化学习模型套件加速库: +当单张计算卡显存资源不足时,可以通过多张计算卡进行计算。为此,业界出现了类似 Megatron、DeepSpeed 等第三方大模型加速库,这可以将模型和输入数据等进行切分并分配到不同的计算卡上,最后再通过集合通信对结果进行汇总,这一方式有效解决了单张计算卡显存资源不足的问题。 + +在 MindSpeed Core 加速库的基础之上也提供了大语言模型、多模态模型以及强化学习模型套件加速库: - 📝 大语言模型库: [MindSpeed LLM](https://gitee.com/ascend/MindSpeed-LLM) - 🖼️ 多模态模型库: [MindSpeed MM](https://gitee.com/ascend/MindSpeed-MM) - 🖥️ 强化学习加速库: [MindSpeed RL](https://gitee.com/ascend/MindSpeed-RL) + + +# 最新消息 + --- -# 📣 Latest News -- [May 21, 2025]: 🚀 MindSpeed Core 支持Mcore 0.12.1版本。 -> 注: 当前版本初步支持两种版本的transformer实现。如需回溯老版本transformer实现,需要用户配置参数`--transformer-impl local`。 + +- [May 21, 2025]: MindSpeed Core 支持 Mcore 0.12.1版本。 + +> 注意: 当前版本仅支持local后端的Transformer实现,需要用户配置参数`--transformer-impl local`。Transformer_engine后端实现正在筹备中,敬请期待。 + + + +# 版本说明 --- + + +MindSpeed Core 对应版本配套表如下: + +| 软件 | 版本 | +|------------------|--------------------------| +| MindSpeed Core分支 | master | +| Mcore | 0.12.1 | +| CANN | 8.2.RC1 | +| PyTorch | 2.1.0、2.6.0 | +| torch_npu | 7.1.RC1 | +| Python | Python3.9.x、Python3.10.x | + +更多具体版本说明请参考:[版本配套表](https://gitee.com/ascend/MindSpeed/blob/2.1.0_core_r0.12.1/docs/user-guide/installation.md#%E7%89%88%E6%9C%AC%E9%85%8D%E5%A5%97%E8%A1%A8) + # 安装 -MindSpeed Core拉取源码后使用pip命令行安装`pip install -e MindSpeed`,具体请参考 [部署文档](./docs/user-guide/installation.md) 安装 MindSpeed Core 指定分支及其依赖软件。 +--- + + + +MindSpeed Core 拉取源码后使用 pip 命令行安装`pip install -e MindSpeed`,具体请参考 [部署文档](./docs/user-guide/installation.md) 安装 MindSpeed Core 指定分支及其依赖软件。 获取并切换 Megatron-LM 版本至 core_v0.12.1 版本,可参考: ```shell @@ -49,21 +81,17 @@ MindSpeed Core拉取源码后使用pip命令行安装`pip install -e MindSpeed` git checkout core_v0.12.1 ``` -当前版本配套表如下: +# 快速上手 -| 软件 | 版本 | -|------------------|--------------------------| -| MindSpeed Core分支 | master | -| Mcore版本 | 0.12.1 | -| CANN版本 | 8.2.RC1 | -| PyTorch | 2.1.0、2.6.0 | -| torch_npu版本 | 7.1.RC1 | -| Python版本 | Python3.9.x、Python3.10.x | +--- -# 快速上手 -使用MindSpeed Core仅须增加一行代码,即可在昇腾训练设备上运行Megatron-LM,并进一步参考[特性介绍](#特性介绍) 使能MindSpeed的各项加速特性。 +## 概述 + +使用 MindSpeed Core 仅须增加一行代码,即可在昇腾训练设备上运行Megatron-LM,并进一步参考[特性介绍](#特性介绍) 使能MindSpeed的各项加速特性。 + +## 操作方法 以 GPT 模型为例:在 Megatron-LM 目录下修改`pretrain_gpt.py`文件,在`import torch`下新增一行:`import mindspeed.megatron_adaptor`,即如下修改: @@ -75,52 +103,62 @@ MindSpeed Core拉取源码后使用pip命令行安装`pip install -e MindSpeed` import inspect ``` - 具体操作可以参考[快速上手指导](./docs/user-guide/getting_started.md)。 ---- # 加速特性分级说明 +--- + + + MindSpeed Core 加速特性分为三个层级,用户可根据实际需求选择通过设置启动脚本中的 `--optimization-level {层级}` 参数来自定义开启的优化层级。该参数支持以下配置: - - - - - - - - - - - - - - - - - - - - - - - - - +
层级层级名称介绍
0基础功能兼容提供Megatron-LM框架对NPU的基本功能适配。
1亲和性增强🔥在L0基础上使能部分融合算子与昇腾亲和计算改写。
2加速特性使能🔥🔥默认值。在L0、L1基础上开启更丰富的加速特性,加速特性通常通过具体参数使能,可参考"特性介绍"章节。
+ + + + + + + + + + + + + + + + + + + + + + +
层级层级名称介绍
0 基础功能兼容提供Megatron-LM框架对NPU的基本功能适配。
1 亲和性增强在L0基础上使能部分融合算子与昇腾亲和计算改写。
2 加速特性使能默认值。在L0、L1基础上开启更丰富的加速特性,加速特性通常通过具体参数使能,可参考“特性介绍”章节。
+ + # 特性介绍 -MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并行策略特性、内存优化特性、亲和计算特性、通信优化特性、关键场景特性以及多模态特性。其中【Released】表示是否商用发布,原型特性为非商用发布。 -- 特性的介绍中说明了对应特性的应用场景及使用说明。一般而言,在脚本中加入相关参数即可轻松使用对应特性。🛰️ +--- + + + +MindSpeed 特性由 Megetron 特性支持、并行策略特性、内存优化特性、亲和计算特性、通信优化特性、关键场景特性以及多模态特性七大特性组成。其中【Released】表示商用发布,原型特性为非商用发布。 + +- 特性的介绍中说明了对应特性的应用场景及使用说明。一般而言,在脚本中加入相关参数即可轻松使用对应特性。 + +- MindSpeed 加速特性仅支持 Mcore,这也是 Megatron 在v0.6.0版本后主推分支,也是当前版本的默认分支。 -- MindSpeed 加速特性仅支持mcore,这也是megatron在v0.6.0版本后主推分支,也是当前版本的默认分支。🛰️ +- 当前大模型训练主要使用bf16数据类型,以下特性若无特殊声明原则上兼容fp16, 如使用其它数据类型遇到问题可提交 issue, 我们会快速响应。 + +- 注意:在Megatron_core_r0.9.0后,alltoall dispatcher进行了调整,原版本 alltoall dispatcher 重命名为 alltoall_seq。MindSpeed MoE 特性对各分支的支持情况,见各特性说明。 -- 当前大模型训练主要使用bf16数据类型,以下特性若无特殊声明原则上兼容fp16, 如使用其它数据类型遇到问题可提交issue, 我们会快速响应。🛰️ -- 注意❗:在megatron_core_r0.9.0后,alltoall dispatcher进行了调整,原版本alltoall dispatcher重命名为alltoall_seq。MindSpeed MoE特性对各分支的支持情况,见各特性说明。 ## Megatron特性支持 @@ -188,16 +226,6 @@ MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并 link ❌ - - Megatron Transformer Engine - link - ❌ - - - Megatron Multi-head Latent Attention - link - ❌ - @@ -248,430 +276,447 @@ MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并 ## 内存优化特性 - - - - - - - - +
特性名称介绍Released
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - - + + + +
特性名称介绍Released
Ascend 激活函数重计算 link
Ascend 重计算流水线独立调度 link
Ascend Mask归一link
Ascend BF16 参数副本复用link
Ascend swap_attentionlink
Ascend 激活函数重计算link
Ascend 重计算流水线独立调度link
Ascend Mask归一link
Ascend BF16 参数副本复用link
Ascend swap_attentionlink
Ascend Norm重计算link
Ascend Norm重计算link
Ascend Hccl Buffer 自适应link
Ascend Hccl Buffer 自适应link
Ascend Swap Optimizerlink
Ascend Swap Optimizerlink
Virtual Optimizerlink
Virtual Optimizerlink
## 亲和计算特性 - - - - - - - - +
特性名称介绍Released
+ + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
特性名称介绍Released
Ascend rms_norm 融合算子 link
Ascend swiglu 融合算子 link
Ascend rms_norm 融合算子link
Ascend swiglu 融合算子link
Ascend rotary_embedding 融合算子link
Ascend flash attentionlink
Ascend Moe Token Permute and Unpermute 融合算子link
Ascend npu_matmul_add_fp32 梯度累加融合算子link
Ascend 计算通信并行优化link
Ascend MC2link
Ascend fusion_attention_v2link
Ascend rotary_embedding 融合算子 link
Ascend flash attentionlink
Ascend Moe Token Permute and Unpermute 融合算子link
Ascend npu_matmul_add_fp32 梯度累加融合算子link
Ascend 计算通信并行优化link
Ascend MC2link
Ascend fusion_attention_v2 link
## 通信优化特性 - - - - - - - - +
特性名称介绍Released
+ + + + + - - - - - - - - - - - -
特性名称介绍Released
Ascend Gloo 存档落盘优化link
Ascend 高维张量并行link
+ + Ascend Gloo 存档落盘优化 + link + ✅ + + + + Ascend 高维张量并行 + link + ✅ + + ## Mcore MoE特性 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
特性名称介绍Released
Ascend Megatron MoE GMMlink
Ascend Megatron MoE Allgather Dispatcher 性能优化link
Ascend Megatron MoE Alltoall Dispatcher 性能优化link
Ascend Megatron MoE TP拓展EPlink
Megatron MoE alltoall dispatcher分支通信隐藏优化link
Megatron MoE allgather dispatcher分支通信隐藏优化link
Ascend 共享专家link
1F1B Overlaplink
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
特性名称介绍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
1F1B Overlap link
## 关键场景特性 - - - - - - - - - - - - - - - - - - - - +
特性名称介绍Released
Ascend EOD Reset训练场景link
Ascend alibilink
+ + + + + + + + + + + + + + + + +
特性名称介绍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 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
+ + + + + + + + + + + + + + + + + + + + + + +
特性名称介绍Released
Ascend TFLOPS计算 link
Ascend Auto Settings 并行策略自动搜索系统 link
Ascend 确定性计算 link
## 自定义算子 -昇腾训练自定义算子统一由torch_npu提供API,以下API预计2025年q4起不维护,请优先使用torch_npu提供的自定义算子,如有新需求或问题可提issue反馈,我们会尽快回复。 +昇腾训练自定义算子统一由torch_npu提供API,以下API预计2025年Q4起不维护,请优先使用torch_npu提供的自定义算子,如有新需求或问题可提issue反馈,我们会尽快回复。 部分自定义算子设置为公开接口,公开接口设置说明请参照 MindSpeed 安全声明中的[公开接口声明](SECURITYNOTE.md#公开接口声明),具体对外接口细节参照以下算子对应的手册链接。 - - - - - - - - +
自定义算子名称介绍Released
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
自定义算子名称介绍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_dropout_add_layer_normlink
npu_rotary_position_embeddinglink
fusion_attentionlink
rms_normlink
swiglulink
npu_mm_all_reduce_add_rms_normlink
npu_mm_all_reduce_add_rms_norm_link
npu_gmmlink
npu_grouped_mat_mul_all_reducelink
npu_ring_attention_updatelink
npu_matmul_add_fp32link
npu_groupmatmul_add_fp32link
npu_apply_fused_ema_adamwlink
lcal_coclink
ffnlink
npu_all_to_all_all_gather_bmmlink
npu_bmm_reduce_scatter_all_to_alllink
quant_gmmlink
npu_apply_fused_adamw_v2link
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
npu_apply_fused_adamw_v2 link
+ +# 分支维护策略 + --- -# 分支维护策略 -🛠️ MindSpeed 版本分支的维护阶段如下: + MindSpeed 版本分支的维护阶段如下: | **状态** | **时间** | **说明** | | ------------------- | -------- |----------------------------------------------------------------------| -| 计划 🕐 | 1-3 个月 | 计划特性 | -| 开发 🕔 | 3 个月 | 开发特性 | -| 维护 🕚 | 6-12 个月| 合入所有已解决的问题并发布版本,针对不同的MindSpeed 版本采取不同的维护策略,常规版本和长期支持版本维护周期分别为6个月和12个月 | -| 无维护 🕛 | 0-3 个月 | 合入所有已解决的问题,无专职维护人员,无版本发布 | -| 生命周期终止(EOL)🚫 | N/A | 分支不再接受任何修改 | +| 计划 | 1-3 个月 | 计划特性 | +| 开发 | 3 个月 | 开发特性 | +| 维护 | 6-12 个月| 合入所有已解决的问题并发布版本,针对不同的MindSpeed 版本采取不同的维护策略,常规版本和长期支持版本维护周期分别为6个月和12个月 | +| 无维护 | 0-3 个月 | 合入所有已解决的问题,无专职维护人员,无版本发布 | +| 生命周期终止(EOL) | N/A | 分支不再接受任何修改 | -🛠️ MindSpeed 版本维护策略: + MindSpeed 版本维护策略: | **MindSpeed版本** | **维护策略** | **当前状态** | **发布时间** | **后续状态** | **EOL日期** | |---------------------|----------|----------|------------|-------------------|-----------| @@ -685,33 +730,47 @@ MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并 | 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) | +| 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 加速百万级超长序列大模型训练](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使用者 + 1. MindSpeed提供的所有内容仅供您用于非商业目的。 2. 对于MindSpeed测试用例以及示例文件中所涉及的各模型和数据集,平台仅用于功能测试,华为不提供任何模型权重和数据集,如您使用这些数据进行训练,请您特别注意应遵守对应模型和数据集的License,如您因使用这些模型和数据集而产生侵权纠纷,华为不承担任何责任。 3. 如您在使用MindSpeed过程中,发现任何问题(包括但不限于功能问题、合规问题),请在Gitee提交issue,我们将及时审视并解决。 @@ -723,11 +782,13 @@ MindSpeed 特性由七大模块组成,分别为:megetron特性支持、并 ## License声明 Ascend MindSpeed中涉及的模型,如模型目录下存在License的,以该License为准。如模型目录下不存在License的,以Apache 2.0许可证许可,对应许可证文本可查阅Ascend MindSpeed根目录。 +# 致谢 + --- -# 致谢 -🔎 MindSpeed-Core 由华为公司的下列部门联合贡献 : + + MindSpeed Core 由华为公司的下列部门联合贡献 : 华为公司: @@ -738,9 +799,10 @@ Ascend MindSpeed中涉及的模型,如模型目录下存在License的,以该 - 公共开发部:NAIE - 网络技术实验室 -此外,MindSpeed-Core 感谢以下团队对项目的贡献: +此外,MindSpeed Core 感谢以下团队对项目的贡献: - 微信基础架构中心 - 科大讯飞AI工程院内核技术部 -感谢来自社区的每一个PR,欢迎贡献 MindSpeed-Core! +感谢来自社区的每一个PR,欢迎贡献 MindSpeed Core! + diff --git a/docs/user-guide/getting_started.md b/docs/user-guide/getting_started.md index 07e2e63a..d7e1a30d 100644 --- a/docs/user-guide/getting_started.md +++ b/docs/user-guide/getting_started.md @@ -1,94 +1,126 @@ + # 快速上手 -请先参考[软件安装](./installation.md)进行环境准备,环境准备后按照如下步骤操作,即可实现Megatron-LM在昇腾设备上的高效运行,且无缝集成并充分发挥MindSpeed所提供的丰富加速与优化技术。 +## 概述 + +### 简介 + +以GPT模型为例,介绍将其从GPU迁移至NPU上运行的方法。按照如下步骤操作,即可实现Megatron-LM在昇腾设备上的高效运行,且无缝集成并充分发挥MindSpeed所提供的丰富加速与优化技术。 + +## 环境准备 + +- 准备[**Atlas A2 训练系列产品**](https://www.hiascend.com/document/detail/zh/AscendFAQ/ProduTech/productform/hardwaredesc_0001.html)或[**Atlas A3 训练系列产品**](https://www.hiascend.com/document/detail/zh/AscendFAQ/ProduTech/productform/hardwaredesc_0001.html)的服务器,并安装对应的驱动和固件,具体安装操作请参见《CANN 软件安装指南》中的“[安装NPU驱动和固件](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0005.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit)”章节。 -### 1. 在Megatron-LM中导入MindSpeed适配器 +- 安装**Toolkit开发套件包**、Kernels算子包以及**NNAL神经网络加速库**(可选,NNAL神经网络加速库中提供了ATB加速库),具体安装操作请参见《CANN 软件安装指南》中的“[安装CANN](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0008.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit)”章节。 -在”Megatron-LM“目录下修改**pretrain_gpt.py**文件,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码,即如下修改: +- 安装PyTorch框架、torch_npu插件和APEX模块(可选)**,具体安装操作请参见**《[Ascend Extension for PyTorch 软件安装指南](https://www.hiascend.com/document/detail/zh/Pytorch/710/configandinstg/instg/insg_0001.html)》。 - ```Python - import torch - import mindspeed.megatron_adaptor # 新增代码行 - from functools import partial - from contextlib import nullcontext - import inspect +- 安装MindSpeed Core + + ``` + # 下载MindSpeed源码并切换至2.1.0_core_r0.12.1分支 + git clone https://gitee.com/ascend/MindSpeed.git + cd MindSpeed + git checkout 2.1.0_core_r0.12.1 + + + # 安装MindSpeed + pip install -e MindSpeed + + + # 获取Megatron-LM源码切换 core_v0.12.1 版本 + + git clone https://github.com/NVIDIA/Megatron-LM.git + cd Megatron-LM + git checkout core_v0.12.1 ``` +## 操作步骤 -### 2. 数据准备,参考[Megatron-LM官方文档](https://github.com/NVIDIA/Megatron-LM?tab=readme-ov-file#datasets)准备训练数据 +### 权重下载 -a. 下载[Tokenizer](https://huggingface.co/Xenova/gpt-3.5-turbo/tree/main)。 +下载[Tokenizer](https://gitee.com/link?target=https%3A%2F%2Fhuggingface.co%2FXenova%2Fgpt-3.5-turbo%2Ftree%2Fmain),新建“Megatron-LM/gpt-tokenizer”目录,并将vocab.json和merges.txt文件下载至该目录。 -新建“Megatron-LM/gpt-tokenizer”目录,并将vocab.json和merges.txt文件下载至该目录。 +### 数据集准备及处理 -b. 下载数据集。 -以[Alpaca数据集](https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet)为例。 -> 注:用户需要自行设置代理,以便访问或下载数据集。 +参考[Megatron-LM官方文档](https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FNVIDIA%2FMegatron-LM%3Ftab%3Dreadme-ov-file%23datasets)准备训练数据 -### 3. 配置环境变量 +1. 下载数据集,以[Alpaca数据集](https://gitee.com/link?target=https%3A%2F%2Fhuggingface.co%2Fdatasets%2Ftatsu-lab%2Falpaca%2Fresolve%2Fmain%2Fdata%2Ftrain-00000-of-00001-a09b74b3ef9c3b56.parquet)为例。 -当前以root用户安装后的默认路径为例,请用户根据set_env.sh的实际路径执行如下命令。 + > 注:用户需要自行设置代理,以便访问或下载数据集。 -```shell -source /usr/local/Ascend/ascend-toolkit/set_env.sh -``` +2. 语料格式转换。 -### 4. 数据处理 + 数据处理依赖于多个第三方库,请确保已正确安装如下依赖: -a. 语料格式转换。 + ``` + pip3 install nltk pyarrow pandas + ``` -数据处理依赖于多个第三方库,请确保已正确安装如下依赖: + 以下代码段展示了如何读取Parquet格式的原始语料,并将其转换为JSON格式,以便后续处理。 -```shell -pip3 install nltk pyarrow pandas -``` + ```python + import json + import pandas as pd + + data_df = pd.read_parquet("train-00000-of-00001-a09b74b3ef9c3b56.parquet") + data_df['text'] = data_df['text'].apply(lambda v: json.dumps({"text": v})) + with open("alpaca_json.json", encoding='utf-8', mode='w') as f: + for i, row in data_df.iterrows(): + f.write(row['text']) + f.write('\n') + ``` -以下代码段展示了如何读取Parquet格式的原始语料,并将其转换为JSON格式,以便后续处理。 + 3. 预训练数据集生成 -```python -import json -import pandas as pd + 若在昇腾设备上使用preprocess_data.py脚本处理数据,须在“Megatron-LM”目录下修改“tools/preprocess_data.py”脚本,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码。 + ```python + import torch + import mindspeed.megatron_adaptor + import numpy as np + ``` + 新建“Megatron-LM/gpt_pretrain_data”目录,通过运行preprocess_data.py脚本,可以将转换后的JSON文件进一步处理为适合Megatron-LM预训练的二进制格式。 -data_df = pd.read_parquet("train-00000-of-00001-a09b74b3ef9c3b56.parquet") -data_df['text'] = data_df['text'].apply(lambda v: json.dumps({"text": v})) -with open("alpaca_json.json", encoding='utf-8', mode='w') as f: - for i, row in data_df.iterrows(): - f.write(row['text']) - f.write('\n') -``` + ``` + python tools/preprocess_data.py \ + --input alpaca_json.json \ + --output-prefix ./gpt_pretrain_data/alpaca \ + --tokenizer-type GPT2BPETokenizer \ + --vocab-file ./gpt-tokenizer/vocab.json \ + --merge-file ./gpt-tokenizer/merges.txt \ + --append-eod \ + --log-interval 1000 \ + --workers 8 + ``` + 执行成功后,将在gpt_pretrain_data目录下生成两个文件:alpaca_text_document.bin和alpaca_text_document.idx,代表预处理完成的预训练数据集。 -b. 预训练数据集生成。 -若在昇腾设备上使用preprocess_data.py脚本处理数据,须在“Megatron-LM”目录下修改“tools/preprocess_data.py”脚本,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码。 +### 导入MindSpeed适配器 -```python -import torch -import mindspeed.megatron_adaptor -import numpy as np -``` +在Megatron-LM中导入MindSpeed适配器,在”Megatron-LM“目录下修改**pretrain_gpt.py**文件,在“import torch”下新增一行“import mindspeed.megatron_adaptor”代码,即如下修改: -新建“Megatron-LM/gpt_pretrain_data”目录,通过运行preprocess_data.py脚本,可以将转换后的JSON文件进一步处理为适合Megatron-LM预训练的二进制格式。 - -```python -python tools/preprocess_data.py \ - --input alpaca_json.json \ - --output-prefix ./gpt_pretrain_data/alpaca \ - --tokenizer-type GPT2BPETokenizer \ - --vocab-file ./gpt-tokenizer/vocab.json \ - --merge-file ./gpt-tokenizer/merges.txt \ - --append-eod \ - --log-interval 1000 \ - --workers 8 +``` + import torch + import mindspeed.megatron_adaptor # 新增代码行 + from functools import partial + from contextlib import nullcontext + import inspect ``` -执行成功后,将在gpt_pretrain_data目录下生成两个文件:alpaca_text_document.bin和alpaca_text_document.idx,代表预处理完成的预训练数据集。 +### 配置环境变量 -### 5. 准备预训练脚本 +当前以root用户安装后的默认路径为例,请用户根据set_env.sh的实际路径执行如下命令。 + +``` +source /usr/local/Ascend/ascend-toolkit/set_env.sh +``` +### 准备预训练脚本 在“Megatron-LM”目录下准备预训练脚本train_distributed.sh,脚本示例如下: -```shell + +```Bash #!/bin/bash export CUDA_DEVICE_MAX_CONNECTIONS=1 NPUS_PER_NODE=8 @@ -158,24 +190,33 @@ torchrun $DISTRIBUTED_ARGS pretrain_gpt.py \ $OUTPUT_ARGS \ --distributed-backend nccl set +x - ``` -### 6. 配置路径 +### 配置路径 请编辑示例脚本train_distributed.sh,并设置如下环境变量以指定必要的路径: -```shell + +``` CKPT_DIR=./ckpt VOCAB_FILE=./gpt-tokenizer/vocab.json MERGE_FILE=./gpt-tokenizer/merges.txt DATA_PATH=./gpt_pretrain_data/alpaca_text_document ``` + > 注:上述路径需根据您的实际情况进行适当调整。 -### 7. 运行脚本启动预训练 +### 启动预训练 -```shell +``` bash ./train_distributed.sh ``` > 注:示例脚本train_distributed.sh中的部分参数(如--hidden-size、--num-layers)需根据实际场景进行适配,避免OOM等现象。 + + + + + + + + -- Gitee