下载
EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

算子工程编译

算子kernel侧和host侧实现开发完成后,需要对算子工程进行编译,生成自定义算子安装包*.run,详细的编译操作包括:

  • 编译Ascend C算子kernel侧代码实现文件*.cpp,分为源码发布和二进制发布两种方式。
    • 源码发布:不对算子kernel侧实现进行编译,保留算子kernel源码文件*.cpp。该方式可以支持算子的在线编译、通过ATC模型转换的方式编译算子的场景。
    • 二进制发布:对算子kernel侧实现进行编译,生成描述算子相关信息的json文件*.json和算子二进制文件*.o。算子调用时,如果需要直接调用算子二进制,则使用该编译方式,比如通过单算子API调用的方式完成单算子的调用,PyTorch框架中单算子调用的场景,动态网络中调用算子的场景。
  • 编译Ascend C算子host侧代码实现文件*.cpp、*.h。
    • 将原型定义和shape推导实现编译成算子原型定义动态库libcust_opsproto_*.so,并生成算子原型对外接口op_proto.h。
    • 将算子信息库定义编译成信息库定义文件*.json。
    • 将Tiling实现编译成Tiling动态库liboptiling.so等。
    • 自动生成单算子API调用代码和头文件aclnn_*.h,并编译生成单算子API调用的动态库libcust_opapi.so。
上述编译过程示意图如下:
图1 算子工程编译示意图

编译步骤

  1. 完成工程编译相关配置。
    • 修改工程目录下的CMakePresets.json cacheVariables的配置项。CMakePresets.json文件内容如下:
      {
          "version": 1,
          "cmakeMinimumRequired": {
              "major": 3,
              "minor": 19,
              "patch": 0
          },
          "configurePresets": [
              {
                  "name": "default",
                  "displayName": "Default Config",
                  "description": "Default build using Unix Makefiles generator",
                  "generator": "Unix Makefiles",
                  "binaryDir": "${sourceDir}/build_out",
                  "cacheVariables": {
                      "CMAKE_BUILD_TYPE": {
                          "type": "STRING",
                          "value": "Release"
                      },
                      "ENABLE_SOURCE_PACKAGE": {
                          "type": "BOOL",
                          "value": "True"
                      },
                      "ENABLE_BINARY_PACKAGE": {
                          "type": "BOOL",
                          "value": "True"
                      },
                      "ASCEND_COMPUTE_UNIT": {
                          "type": "STRING",
                          "value": "ascendxxx"
                      },
                      "ENABLE_TEST": {
                          "type": "BOOL",
                          "value": "True"
                      },
                      "vendor_name": {
                          "type": "STRING",
                          "value": "customize"
                      },
                      "ASCEND_CANN_PACKAGE_PATH": {
                          "type": "PATH",
                          "value": "/usr/local/Ascend/latest"
                      },
                      "ASCEND_PYTHON_EXECUTABLE": {
                          "type": "STRING",
                          "value": "python3"
                      },
                      "CMAKE_INSTALL_PREFIX": {
                          "type": "PATH",
                          "value": "${sourceDir}/build_out"
                      },
                      "ENABLE_CROSS_COMPILE": {
                          "type": "BOOL",
                          "value": "False"
                      },
                      "CMAKE_CROSS_PLATFORM_COMPILER": {
                          "type": "PATH",
                          "value": "/usr/bin/aarch64-linux-gnu-g++"
                      }
                  }
              }
          ]
      }
      表1 需要开发者配置的常用参数列表

      参数名称

      参数描述

      默认值

      ASCEND_CANN_PACKAGE_PATH

      CANN软件的安装目录,请根据实际情况进行修改,例如:/usr/local/Ascend/ascend-toolkit/latest。

      “/usr/local/Ascend/latest”

      CMAKE_BUILD_TYPE

      编译模式选项,可配置为:

      • “Release”,Release版本,不包含调试信息,编译最终发布的版本。
      • “Debug”,“Debug”版本,包含调试信息,便于开发者开发和调试。

      “Release”

      ENABLE_SOURCE_PACKAGE

      是否开启源码编译

      “True”

      ENABLE_BINARY_PACKAGE

      是否开启二进制编译

      “True”

      vendor_name

      标识自定义算子所属厂商的名称。建议开发者自行指定所属厂商名称,避免和其他厂商提供的算子包冲突。

      “customize”

    • 配置编译相关环境变量(可选)
      表2 环境变量说明

      环境变量

      配置说明

      CMAKE_CXX_COMPILER_LAUNCHER

      用于配置C++语言编译器(如g++)、毕昇编译器的启动器程序为ccache,配置后即可开启cache缓存编译,加速重复编译并提高构建效率。用法如下,在对应的CMakeLists.txt进行设置:

      set(CMAKE_CXX_COMPILER_LAUNCHER <launcher_program>)

      其中<launcher_program>是ccache的安装路径,比如ccache的安装路径为/usr/bin/ccache,示例如下:

      set(CMAKE_CXX_COMPILER_LAUNCHER /usr/bin/ccache)
  2. 在算子工程目录下执行如下命令,进行算子工程编译。

    ./build.sh

    编译成功后,会在当前目录下创建build_out目录,并在build_out目录下生成自定义算子安装包custom_opp_<target os>_<target architecture>.run

    用户如果需要编译过程日志存盘,可以使用环境变量ASCENDC_BUILD_LOG_DIR来控制存储路径。用户设置该选项之后,如果编译过程中无错误产生,则对应的log文件后缀会添加"_success",若编译过程有错误产生,则会在屏幕打印对应的报错信息,以及指示用户log文件的具体路径与文件名,同时,对应log文件后缀会添加“_error”。

    # 如希望编译日志存储在/home/build_log/,则可以按照如下设置,默认不打开日志存储
    export ASCENDC_BUILD_LOG_DIR=/home/build_log/

算子包交叉编译

完成算子代码实现后,如果当前平台架构和运行环境一致则参考上一节的内容进行编译即可,如果需要实现算子包的交叉编译,您可以参考如下流程。

  1. 交叉编译工具下载,下表以Ubuntu系列操作系统为例,展示了编译工具下载命令的样例。其他操作系统,请替换为实际的下载命令。
    表3 Ubuntu系列操作系统交叉编译工具下载命令样例

    当前平台架构

    运行环境平台架构

    编译工具下载命令

    x86_64

    aarch64

    sudo apt-get install -y g++-aarch64-linux-gnu

    aarch64

    x86_64

    sudo apt-get install g++-x86-64-linux-gnu

  2. 自定义算子工程交叉编译,构建生成自定义算子包。
    1. 完成交叉编译前,需要修改CMakePresets.json中ASCEND_CANN_PACKAGE_PATH为CANN软件包安装路径。
    2. 二进制包编译不支持交叉编译,需要修改CMakePresets.json中ENABLE_BINARY_PACKAGE为False。
    1. 修改CMakePresets.json中ENABLE_CROSS_COMPILE为True,使能交叉编译。
      "ENABLE_CROSS_COMPILE": {
          "type": "BOOL",
          "value": "True"
       }
    2. 修改CMakePresets.json中CMAKE_CROSS_PLATFORM_COMPILER为安装后的交叉编译工具路径。
      "CMAKE_CROSS_PLATFORM_COMPILER": {
          "type": "PATH",
          "value": "/usr/bin/aarch64-linux-gnu-g++"
      }
    3. 在算子工程目录下执行如下命令,进行算子工程交叉编译。

      ./build.sh

      编译成功后,会在当前目录下创建build_out目录,并在build_out目录下生成自定义算子安装包custom_opp_<target os>_<target architecture>.run

支持自定义编译选项

在算子工程中,如果开发者想对算子kernel侧代码增加一些自定义的编译选项,可以参考如下内容进行编译选项的定制。

修改算子工程op_kernel目录下的CMakeLists.txt,使用add_ops_compile_options来增加编译选项,方法如下:

add_ops_compile_options(OpType COMPUTE_UNIT soc_version1 soc_version2 ... OPTIONS option1 option2 ...)

具体参数的介绍如下:

表4 具体参数介绍

参数名称

可选/必选

参数描述

OpType(算子类型)

必选

第一个参数应传入算子类型,如果需要对算子工程中的所有算子生效,需要配置为ALL。

COMPUTE_UNIT

可选

标识编译选项在哪些AI处理器型号上生效,多个型号之间通过空格间隔。不配置时表示对所有AI处理器型号生效。

说明:

COMPUTE_UNIT具体配置如下:

  • 在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,获取Chip Name信息。实际配置值为AscendChip Name,例如Chip Name取值为xxxyy,实际配置值为Ascendxxxyy

OPTIONS

必选

自定义的编译选项。多个编译选项之间通过空格间隔。

  • 增加-D编译选项,用于在编译时定义宏。
    OPTIONS -Dname=definition
  • 增加-g -O0等调试用编译选项。
  • 增加Ascend C框架提供的调试用编译选项-DASCENDC_DUMP、-DASCENDC_DEBUG
    • -DASCENDC_DUMP用于控制Dump开关,默认开关打开,开发者调用printf/DumpTensor/assert后会有信息打印;设置为0后,表示开关关闭。
      OPTIONS -DASCENDC_DUMP=0
    • -DASCENDC_DEBUG用于控制Ascend C API的调测开关,默认开关关闭;增加该编译选项后,表示开关打开,此时接口内部的assert校验生效,校验不通过会有assert日志打屏。开启该功能会对算子实际运行的性能带来一定影响,通常在调测阶段使用。
      OPTIONS -DASCENDC_DEBUG

      当前-DASCENDC_DEBUG功能支持的产品型号为:

      Atlas 推理系列产品

      Atlas A2训练系列产品/Atlas 800I A2推理产品

    • --tiling_key,设置该选项后,只编译指定的TilingKey相关的kernel代码,用于加速编译过程。若不指定TilingKey编译,则默认编译所有的TilingKey。配置多个TilingKey时,TilingKey之间不能有空格。示例如下,其中1、2为tiling_key。
      --tiling_key=1,2
  • 编译选项是基于“算子类型+AI处理器型号系列”进行配置的,也就是说不同的“算子类型+AI处理器型号系列”可以配置不同的编译选项。
    add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxx ... OPTIONS -DNEW_MACRO1=xx)
    add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxx ... OPTIONS -DNEW_MACRO2=xx)
    add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxx ... OPTIONS -DNEW_MACRO3=xx)
  • 对相同算子类型+AI处理器型号系列,做多次编译选项配置,以后配置的为准。
  • 对ALL生效的编译选项和对单一算子生效的编译选项如果没有冲突,同时生效,如果有冲突,以单一算子的编译选项为准。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词