# ascend-transformer-boost **Repository Path**: ascend/ascend-transformer-boost ## Basic Information - **Project Name**: ascend-transformer-boost - **Description**: Transformer算子加速库蓝区代码仓 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 32 - **Forks**: 273 - **Created**: 2023-05-20 - **Last Updated**: 2025-09-13 ## Categories & Tags **Categories**: ai **Tags**: None ## README # Ascend Transformer Boost Ascend Transformer Boost加速库(下文简称为ATB加速库)是一款高效、可靠的加速库,基于华为Ascend AI处理器,专门为Transformer模型的训练和推理而设计。 ## 内容总览 1. [学习资源](#学习资源) 2. [什么是ATB](#什么是ATB) 3. [环境构建](#环境构建) 4. [快速上手](#快速上手) 5. [自定义算子开发](#自定义算子开发) 6. [参与贡献](#参与贡献) 7. [参考文档](#参考文档) ## 学习资源 - [编译与构建](docs/编译与构建.md):ATB的编译命令说明。 - [从开发一个简单算子开始](docs/从开发一个简单算子出发.md):以简单的Add算子的增加为例,介绍了ATB算子开发的交付件和开发流程。 - [开发指南](docs/开发指南.md):以一个融合算子为例,详细介绍了ATB算子开发的流程,以及如何对算子进行功能、精度、性能测试。 - [贡献指南](docs/贡献指南.md):介绍了如何向ATB库贡献代码。 - [日志与调试](docs/debug_tour.md):介绍ATB的日志相关环境变量,以及调测方法。 - [API文档](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/API/ascendtbapi/ascendtb_01_0098.html):介绍了ATB库的接口和相关术语。 - [问题报告](https://gitee.com/ascend/ascend-transformer-boost/issues):通过issue提交发现的问题。 ## 什么是ATB ### ATB介绍 Ascend Transformer Boost加速库(下文简称为ATB加速库)是一款高效、可靠的加速库,基于华为Ascend AI处理器,专门为Transformer模型的训练和推理而设计。 ### 软件架构 加速库接口功能主要分成三部分: - 提供基础原生的算子(Operation),用户可以根据需求使用对应的算子完成计算功能。 - 提供图算子机制,用户根据模型设计对应的图算子,使用加速库提供的原生算子和创建的自定义算子创建图算子,完成相应的计算。 - 提供插件(Plugin)机制,用户可以根据自己的需求创建自定义的算子。 ### ATB仓介绍 ATB库的目录结构如下: ``` ascend-transformer-boost ├── 3rdparty //第三方依赖库文件夹 ├── build //可存放构建生成的文件 ├── ci //持续集成相关的配置文件 ├── docs //文档文件 ├── example //算子调用示例代码,包含可直接运行的Demo ├── include //存放公共头文件 ├── ops_configs //存放算子输入输出数据规格约束文件 ├── ops_customize //存放自定义操作相关的文件 ├── output //编译输出文件夹 ├── scripts //脚本文件存放目录 ├── src //主体源代码目录 │ ├── atb │ ├── cinterface //包含 C 接口部分的源代码 │ ├── include │ ├── kernels │ │ ├── configs //支持的配置说明 │ │ ├── document //文档目录 │ │ ├── include │ │ ├── kernels //单算子存放目录 │ │ ├── mixkernels //融合算子存放目录 │ │ ├── tbe_adapter //TBE 适配器相关的源代码 │ │ └── CMakeLists.txt │ ├── ops_common │ ├── ops_infer //推理OP │ ├── ops_train //训练OP │ ├── torch_atb //与PyTorch相关的atb库文件 │ └── CMakeLists.txt ├── tests //测试代码 └── torch_atb ``` ### 为什么选择ATB - 对Transformer模型的高效加速:ATB加速库通过优化矩阵乘法等核心算子和注意力机制的实现方式,实现了对Transformer模型的高效加速。 - 高性能和效率:ATB加速库充分利用了Ascend AI处理器的硬件特性,如算力、存储带宽和内存带宽,通过硬件加速和数据重用等技术,进一步提升了性能和效率。 - 提供了底层基础的高性能算子以及高效的算子组合技术。 - 支持多种模型框架如PyTorch、MindSpore、Paddle。 ## 环境构建 ### 快速安装CANN软件 本节提供快速安装CANN软件的示例命令,更多安装步骤请参考[详细安装指南](#详细安装指南)。 #### 安装前准备 在线安装和离线安装时,需确保已具备Python环境及pip3,当前CANN支持Python3.7.x至3.11.4版本。 离线安装时,请单击[获取链接](https://www.hiascend.com/developer/download/commercial/result?module=cann)下载CANN软件包,并上传到安装环境任意路径。 #### 安装CANN ```shell chmod +x Ascend-cann-toolkit_8.2.RC1_linux-$(arch).run ./Ascend-cann-toolkit_8.2.RC1_linux-$(arch).run --install ``` #### 安装后配置 配置环境变量脚本set_env.sh,当前安装路径以${HOME}/Ascend为例。 ``` source ${HOME}/Ascend/ascend-toolkit/set_env.sh ``` 安装业务运行时依赖的Python第三方库(如果使用root用户安装,请将命令中的--user删除)。 ``` pip3 install attrs cython 'numpy>=1.19.2,<=1.24.0' decorator sympy cffi pyyaml pathlib2 psutil protobuf==3.20.0 scipy requests absl-py --user ``` ### 详细安装指南 开发者可访问[昇腾文档-昇腾社区](https://www.hiascend.com/document)->CANN商用版->软件安装,查看CANN软件安装引导,根据机器环境、操作系统和业务场景选择后阅读详细安装步骤。 ### 基础工具版本要求与安装 安装CANN之后,还需要安装一些工具方便后续开发,参见以下内容: * [CANN依赖列表](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0045.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit) * [CANN安装后操作](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/softwareinst/instg/instg_0094.html?Mode=PmIns&InstallType=local&OS=Debian&Software=cannToolKit) ## 快速上手 ### ATB编译 - 加速库下载 ```sh git clone https://gitee.com/ascend/ascend-transformer-boost.git ``` 您可自行选择需要的分支。 - 加速库编译
编译加速库,设置加速库环境变量: ```sh cd ascend-transformer-boost bash scripts/build.sh source output/atb/set_env.sh ``` 注意:该编译过程涉及①拉取算子库/MKI并编译②加速库的编译两个过程。更多命令介绍可查看ATB仓`scripts/build.sh`文件。 - 无法获取ascend-op-common-lib代码仓时,可通过安装nnal软件包获取对应so文件
- 安装步骤可参考 `run包使用` - 代码及软件包版本对应关系:
nnal软件包需保持和toolkit及kernels软件包版本一致 |CANN|代码分支| |-|-| |CANN 8.1.RC1|br_feature_cann_8.2.RC1_0515POC_20250630| - 执行 ```sh source {install path}/nnal/atb/set_env.sh export ATB_BUILD_DEPENDENCY_PATH=${ATB_HOME_PATH} ``` - run包使用
- run包获取 1. 进入网址:https://www.hiascend.com/developer/download/commercial 2. 产品系列选择服务器,产品型号根据设备型号选择,选择所需解决方案版本,随后在CANN区域选择软件包跟随指引即可获取相关run包 - 软件包名为:Ascend-cann-atb_{version}_linux-{arch}.run
其中,{version}表示软件版本号,{arch}表示CPU架构。 - 安装run包(需要依赖cann环境) ```sh chmod +x 软件包名.run # 增加对软件包的可执行权限 ./软件包名.run --check # 校验软件包安装文件的一致性和完整性 ./软件包名.run --install # 安装软件,可使用--help查询相关安装选项 ``` 出现提示`xxx install success!`则安装成功 - 更多编译命令说明请参考[编译与构建](docs/编译与构建.md) ### 调用示例说明 本节示例代码分别展示了如何通过Python和C++调用算子。 #### Python ```Python import torch import torch_atb#导入ATB Python API模块 #创建参数对象 linear_param = torch_atb.LinearParam() linear_param.has_bias = False #创建算子对象 op = torch_atb.Operation(linear_param) #准备输入数据 x = torch.randn(2, 3, dtype=torch.float16).npu() y = torch.randn(2, 3, dtype=torch.float16).npu() #使用forward方法完成操作,并获取输出 outputs = op.forward([x, y]) torch.npu.synchronize() ``` 代码编写指导可访问[算子使用指导(ATB Python API)-CANN商用版8.2.RC1-昇腾社区](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/acce/ascendtb/ascendtb_0077.html)。 #### C++ 在ATB仓库的`example/op_demo`目录下,存放了多个不依赖测试框架、即编可用的算子调用Demo示例。进入对应目录执行如下命令就可完成一个算子的调用执行。代码完整内容可参考`example\op_demo\faupdate\faupdate_demo.cpp`,下面仅展示其核心内容: ```c++ // 设置卡号、创建context、设置stream atb::Context *context = nullptr; void *stream = nullptr; CHECK_STATUS(aclInit(nullptr)); CHECK_STATUS(aclrtSetDevice(DEVICE_ID)); CHECK_STATUS(atb::CreateContext(&context)); CHECK_STATUS(aclrtCreateStream(&stream)); context->SetExecuteStream(stream); // 创建op atb::Operation *faupdateOp = nullptr; CHECK_STATUS(CreateFaUpdateOperation(&faupdateOp)); // 准备输入tensor atb::VariantPack variantPack; CHECK_STATUS(PrepareInTensor(context, stream, variantPack.inTensors)); // 放入输入tensor // 准备输出tensor atb::Tensor output; CHECK_STATUS(CreateTensor(ACL_FLOAT, aclFormat::ACL_FORMAT_ND, {LOCALOUT_DIM_1, LOCALOUT_DIM_2}, output)); variantPack.outTensors = {output}; // 放入输出tensor uint64_t workspaceSize = 0; // 计算workspaceSize大小 CHECK_STATUS(faupdateOp->Setup(variantPack, workspaceSize, context)); uint8_t *workspacePtr = nullptr; if (workspaceSize > 0) { CHECK_STATUS(aclrtMalloc((void **)(&workspacePtr), workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST)); } // faupdate执行 CHECK_STATUS(faupdateOp->Execute(variantPack, workspacePtr, workspaceSize, context)); CHECK_STATUS(aclrtSynchronizeStream(stream)); // 流同步,等待device侧任务计算完成 // 释放资源 for (atb::Tensor &inTensor : variantPack.inTensors) { CHECK_STATUS(aclrtFree(inTensor.deviceData)); } for (atb::Tensor &outTensor : variantPack.outTensors) { CHECK_STATUS(aclrtFree(outTensor.deviceData)); } if (workspaceSize > 0) { CHECK_STATUS(aclrtFree(workspacePtr)); } CHECK_STATUS(atb::DestroyOperation(faupdateOp)); // operation,对象概念,先释放 CHECK_STATUS(aclrtDestroyStream(stream)); CHECK_STATUS(DestroyContext(context)); // context,全局资源,后释放 CHECK_STATUS(aclFinalize()); ``` 文件编译说明:进入`example/op_demo/faupdate`,执行`bash build.sh`完成编译和执行。 代码编写指导:可访问[单算子-CANN商用版8.2.RC1-昇腾社区](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/acce/ascendtb/ascendtb_0046.html)。 #### 样例安全声明 `example`目录下的样例旨在提供快速上手、开发和调试ATB特性的最小化实现,其核心目标是使用最精简的代码展示ATB核心功能,**而非提供生产级的安全保障**。与成熟的生产级使用方法相比,此样例中的安全功能(如输入校验、边界校验)相对有限。 ATB不推荐用户直接将样例作为业务代码,也不保证此种做法的安全性。若用户将`example`中的示例代码应用在自身的真是业务场景中且发生了安全问题,则由用户自行承担。 ### 日志和环境变量说明 - 加速库日志现在已经部分适配CANN日志,环境变量说明请参考 **[CANN商用版文档/环境变量参考](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/acce/ascendtb/ascendtb_0032.html)**。 - 由于CANN日志暂时没有ATB模块,ASCEND_MODULE_LOG_LEVEL请勿设置ATB ## 自定义算子开发 您可参考以下文档进行自定义算子的开发: - [从开发一个简单算子开始](docs/从开发一个简单算子出发.md):以简单的Add算子的增加为例,介绍了ATB算子开发的交付件和开发流程,适合新入门的选手。 - [开发指南](docs/开发指南.md):以一个融合算子为例,详细介绍了ATB算子开发的流程,以及如何对算子进行功能、精度、性能测试。 **注意**:您在开发过程中遇到的问题,可参考[ATB日志与调试](./debug_tour.md)尝试解决。 ## 参与贡献 1. fork仓库 2. 修改并提交代码 3. 新建 Pull-Request 详细步骤可参考[贡献指南](docs/贡献指南.md) ## 参考文档 **[CANN商用版文档](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/index/index.html)** **[ATB商用版文档](https://www.hiascend.com/document/detail/zh/canncommercial/82RC1/acce/ascendtb/ascendtb_0001.html)**