# AscendSpeed **Repository Path**: bingobb/AscendSpeed ## Basic Information - **Project Name**: AscendSpeed - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 503 - **Created**: 2024-03-10 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

# 简介 AscendSpeed 是针对华为昇腾设备的大模型加速库。 大模型训练是一种非常复杂的过程,涉及到许多技术和挑战,其中大模型训练需要大量的显存资源是一个难题,对计算卡提出了不小的挑战。 为了在单个计算卡显存资源不足时,可以通过多张计算卡进行计算,业界出现了类似 Megatron、DeepSpeed 等第三方大模型加速库,对模型、输入数据等进行切分并分配到不同的计算卡上,最后在通过集合通信对结果进行汇总。 昇腾提供 AscendSpeed 加速库,使能客户大模型业务快速迁移至昇腾设备,并且支持昇腾专有算法,确保开箱可用。 # 安装 ### 1. 安装依赖 | 依赖软件 | [验证版本](https://www.hiascend.com/zh/) | |-----------|--------------------------------------| | Python | 3.8 | | driver | Ascend HDK 23.0.0 | | firmware | Ascend HDK 23.0.0 | | CANN | CANN 7.0.0 | | kernel | CANN 7.0.0 | | PyTorch | 2.1.0 | | torch_npu | release v5.0.0 | | apex | v5.0.rc3 | ### 2. 安装 AscendSpeed 方式一:从 git 直接安装 ```shell pip install git+https://gitee.com/ascend/AscendSpeed.git ``` 方式二:下载源码安装 ```shell git clone https://gitee.com/ascend/AscendSpeed.git cd AscendSpeed pip install -e . ``` ### 3. 获取 Megatron-LM 并指定 commit id ```shell git clone https://github.com/NVIDIA/Megatron-LM.git cd Megatron-LM git checkout bcce6f54e075e3c3374ea67adefe54f3f2da2b07 ``` # 快速上手 ### Megatron-LM NPU 适配 AscendSpeed 对 Megatron-LM 的基本功能进行了适配,已适配如下特性(特性使用请查看[官方文档](https://github.com/NVIDIA/Megatron-LM)): - 张量并行 - 流水线并行 - 序列并行 - 重计算 - 分布式优化器 - 异步分布式数据并行 使用方式: 1. 在 Megatron-LM 目录下修改`pretrain_gpt.py`文件,在`import torch`下新增一行`import ascendspeed.megatron_adaptor` ```diff import os import torch +import ascendspeed.megatron_adaptor from torch import Tensor from functools import partial from typing import Union ``` 2. 在 Megatron-LM 目录下,准备好训练数据,并在示例脚本中填写对应路径,然后执行。 ```shell bash examples/pretrain_gpt_distributed.sh ``` # 特性介绍 ### TP重计算通信优化 优化重计算中通信算子,提升模型性能。 具体信息请查看:[link](docs/features/recomputation-communication.md) ### 内存碎片优化 通过对不同生命周期的 tensor 进行分别管理,以减少显存碎片。 具体信息请查看:[link](docs/features/memory-fragmentation.md) ### 自适应选择重计算 自动调整训练显存大小,选择重计算策略,提高模型训练的性能。 具体信息请查看:[link](docs/features/adaptive-recompute.md) ### ATB算子 | 算子 | 介绍 | |----------------------------|------------------------------------------------| | flash_attention | [link](docs/ops/flash_attention.md) | | npu_dropout_add_layer_norm | [link](docs/ops/npu_dropout_add_layer_norm.md) | | pad_seqlen | [link](docs/ops/pad_seqlen.md) | | rms_norm | [link](docs/ops/rms_norm.md) | | swiglu | [link](docs/ops/swiglu.md) | | unpad_gen_attention_mask | [link](docs/ops/unpad_gen_attention_mask.md) | | unpad_rope | [link](docs/ops/unpad_rope.md) | | unpad_seqlen | [link](docs/ops/unpad_seqlen.md) | | unpad_softmax | [link](docs/ops/unpad_softmax.md) | | unpad_strided_batch_matmul | [link](docs/ops/unpad_strided_batch_matmul.md) | # 安全声明 ## 系统安全加固 用户可在运行系统配置时开启 ASLR(级别2)以提高系统安全性,保护系统随机化开启。 可参考以下方式进行配置: ``` echo 2 > /proc/sys/kernel/randomize_va_space ``` ## 运行用户建议 基于安全性考虑,建议您在执行任何命令时,都尽量使用非 root 账户执行,遵循权限最小化原则。 ## 文件权限控制 - 建议用户对训练所需文件、训练过程中保存的文件、用户个人的隐私数据、商业资产等敏感文件做好权限控制等安全措施,例如多用户共享数据集场景下的数据集文件写权限控制、profiler 等场景产生数据文件权限控制等,设定的权限建议参考[表1 文件权限参考](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0168.html#ZH-CN_TOPIC_0000001768428486__zh-cn_topic_0000001808103017_table12631223865) 进行设置。 - 原生 Megatron-LM 以及 PyTorch 框架运行中所生成的文件权限依赖系统设定,如 Megatron-LM 生成的数据集索引文件、torch.save 接口保存的文件等。建议当前执行脚本的用户根据自身需要,对生成文件做好权限控制,设定的权限可参考[表1 文件权限参考](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0168.html#ZH-CN_TOPIC_0000001768428486__zh-cn_topic_0000001808103017_table12631223865)。可使用 umask 控制默认权限,避免提权等安全风险,建议用户将主机(包括宿主机)和容器中的 umask 设置为 027 及其以上,提高安全性。 - torch_npu 中 profiler 工具会生成性能记录文件,生成的文件权限为 640 ,文件夹权限为 750 ,用户可根据需要自行对生成后的相关文件进行权限控制。 - 运行时 CANN 可能会缓存算子编译文件,存储在运行目录下的`kernel_meta_*`文件夹内,加快后续训练的运行速度,用户可根据需要自行对生成后的相关文件进行权限控制。 - 用户安装和使用过程需要做好权限控制,建议参考[表1 文件权限参考](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0168.html#ZH-CN_TOPIC_0000001768428486__zh-cn_topic_0000001808103017_table12631223865) 进行设置。如需要保存安装/卸载日志,可在安装/卸载命令后面加上参数 `--log `, 注意对``文件及目录做好权限管控。 建议用户根据自身需要,参考[表1 文件权限参考](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0168.html#ZH-CN_TOPIC_0000001768428486__zh-cn_topic_0000001808103017_table12631223865) 对各类文件进行加固。 ## 数据安全声明 - PyTorch 和 torch_npu 提供的 profiler 性能分析工具和 torch_npu 提供 AOE 性能调优工具都会在本地生成性能拆解数据。 用户需加强对相关数据的保护,需要模型性能调优时使用,调优完成后及时关闭,AOE 和 Profiler 工具具体细节请参考《[PyTorch 模型迁移和训练指南](https://www.hiascend.com/document/detail/zh/canncommercial/700/modeldevpt/ptmigr/AImpug_0001.html)》。 - PyTorch 使用过程中需要加载和保存数据,部分接口使用风险模块 pickle,可能存在数据风险,如 torch.load、torch.distributed.scatter_object_list 等接口,可参考 [torch.load](https://pytorch.org/docs/stable/generated/torch.load.html#torch.load)、[collective-functions](https://pytorch.org/docs/stable/distributed.html#collective-functions) 了解具体风险。 - AscendPyTorch 依赖 CANN 的基础能力实现 AOE 性能调优、算子 dump、日志记录等功能,用户需要关注上述功能生成文件的权限控制。 ## 编译安全声明 AscendSpeed 中各类融合算子通过调用 PyTorch 中的 cpp_extension 特性进行编译,编译结果会默认缓存到 `~/.cache/torch_extensions` 目录下,建议用户根据自身需要,参考[表1 文件权限参考](https://www.hiascend.com/document/detail/zh/canncommercial/700/envdeployment/instg/instg_0168.html#ZH-CN_TOPIC_0000001768428486__zh-cn_topic_0000001808103017_table12631223865) 对生成文件做好权限控制。 ## 运行安全声明 - 建议根据运行环境资源状况编写训练脚本。若训练脚本与资源状况不匹配,如数据集的 size 超出内存容量/ NPU 存储容量等,可能引发错误并导致进程退出。 - AscendSpeed、PyTorch 以及 torch_npu 在运行异常时会退出进程并打印报错信息,建议根据报错提示定位具体错误原因,包括设定算子同步执行、查看 CANN 日志、解析生成的 Core Dump 文件等方式。 ## 通信安全声明 作为计算集群的完全控制者,请务必注意集群节点间的通信安全,比如做好组网设计并采取相关安全措施。建议在内部网络下部署计算集群,从而避免公网环境下的诸多安全风险。 ## 端口安全声明 AscendSpeed 不主动开放端口,对于原生 PyTorch 开放的相关端口,您可以参考其官方文档进行设置。在单机训练的情况下,不建议开放全局端口。具体的通信矩阵可以参考[附录B 通信矩阵](#B-通信矩阵)。 ## 附录 ### 表1 文件权限参考 | 类型 | linux权限参考值 | 备注 | |--------------|-----------------|---------------------------| | 文件夹 / 目录 | 750 (rwxr-x---) | 对于共享目录可为755 | | 数据集文件 | 640 (rw-r-----) | 对于共享数据集文件可为644 | | checkpoint文件 | 640 (rw-r-----) | 对于checkplint等生成文件可以设置为640 | | 程序文件 | 440 (r--r-----) | 除非开发调试场景,正常运行时程序文件不应再次修改 | | 可执行脚本 | 750 (rwxr-x---) | 针对可执行脚本设置750 | ### 表2 通信矩阵 | 源设备 | 源IP | 源端口 | 目的设备 | 目的IP | 目的端口(侦听) | 协议 | 端口说明 | 备注 | |:------------------:|:------:|:------------------------------------------------------------------------:|:------------------:|:------:|:---------------------------------------------------------------------------------------------------------------------------:|:---:|:-------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | 运行torch_npu进程的计算设备 | 设备地址IP | 操作系统自动分配,分配范围由操作系统决定,如ubuntu是采用`/proc/sys/net/ipv4_local_port_range`文件指定 | 运行torch_npu进程的计算设备 | 设备地址IP | 当用户不使用**测试示例脚本**,则默认29500/29400。用户可调用`torch.distributed.launch`函数,通过传入的`--master_port`自由指定1024-65535之间未被占用的端口 | TCP | 源端口与目的端口均用于收发数据。对于静态分布式场景(backend=static)默认端口为29400;对于动态分布式场景(backend=c10d)中默认端口29500 | megatron_npu本身不开启端口,该通信过程由开源软件Pytorch控制,配置方式可参考其官方文档:https://pytorch.org/docs/stable/distributed.html#launch-utility | | 运行torch_npu进程的计算设备 | 设备地址IP | 操作系统自动分配,分配范围由操作系统决定,如ubuntu是采用`/proc/sys/net/ipv4_local_port_range`文件指定 | 运行torch_npu进程的计算设备 | 设备地址IP | 当使用`pretrain_gpt_distributed*`系列测试示例脚本,脚本对`torch.distributed.launch`传入的`--master_port`为**6000**,用户可以自由指定1024-65535之间未被占用的端口 | TCP | 原生Pytorch(调用`torchrun`、`torch.distributed.launch`)通信需要,用于收发数据 | 和第一条记录所述为同一端口,这里特别说明**测试示例脚本**对Pytorch开启的master_port默认配置为6000 | | 运行torch_npu进程的计算设备 | 设备地址IP | 操作系统自动分配,分配范围由操作系统决定,如ubuntu是采用`/proc/sys/net/ipv4_local_port_range`文件指定 | 运行torch_npu进程的计算设备 | 设备地址IP | 当使用`test_gpt_distributed*`系列测试示例脚本,脚本对`torch.distributed.launch`传入的`--master_port`为**60035**,用户可以自由指定1024-65535之间未被占用的端口 | TCP | 原生Pytorch(调用`torchrun`、`torch.distributed.launch`)通信需要,用于收发数据 | 和第一条记录所述为同一端口,这里特别说明**测试示例脚本**对Pytorch开启的master_port默认配置为60035 | | 运行torch_npu进程的计算设备 | 设备地址IP | 请参见备注中的CANN官方文档 | 运行torch_npu进程的计算设备 | 设备地址IP | 请参见备注中的CANN官方文档 | TCP | 请参见备注中的CANN官方文档 | 该通信过程完全由HCCL组件控制,端口范围可参考文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/700alpha001/ref/envref/envref_07_0065.html CANN通信文档:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/700alpha001/ref/hcclapiref/hcclapi_07_0001.html |