文档
注册

算子工程编译

简介

算子交付件开发完成后,需要对算子工程进行编译,生成自定义算子安装包custom_opp_Linux_Arch.run,详细的编译操作包括:

  • 将算子信息库定义文件*.ini编译成算子信息库*.json。
  • 针对AI CPU算子,将算子实现文件*.h与*.cc编译为动态库文件libcust_aicpu_kernels.so。
  • 将算子插件实现文件*.h与*.cc编译成算子插件libcust_{tf|caffe|onnx}_parsers.so。
  • 将算子原型定义文件.h与*.cc编译成算子原型库libcust_op_proto.so。
图1 编译过程

  • Windows操作系统不支持本地编译。
  • 旧版本的AI CPU算子工程在使用最新版本的Ascend-cann-toolkit开发套件包时,存在不兼容问题,需要修改CMakeLists.txt文件后重新编译算子工程。解决方法如下:
    1. 修改算子工程目录下/cpukernel/CMakeLists.txt文件。
      ...
      set(AICPU_SOC_VERSION $ENV{AICPU_SOC_VERSION}) 
      message(STATUS "AICPU_SOC_VERSION=${AICPU_SOC_VERSION}")
      
      # 添加如下代码
      if(EXISTS "${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libascend_protobuf.a")
          target_link_options(${AICPU_KERNEL_TARGET} PRIVATE
              -s 
              -Wl,-Bsymbolic
              -Wl,--exclude-libs=libascend_protobuf.a
          ) 
          target_link_libraries(${AICPU_KERNEL_TARGET} PRIVATE
              -Wl,--whole-archive
              ${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libascend_protobuf.a
              -Wl,--no-whole-archive
          ) 
      endif()
      
      if(EXISTS "${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libcpu_kernels_context.a")
      ...
    2. 参考本章节重新编译算子工程。

编译操作

  1. (可选)AI CPU算子引用的三方库路径可通过修改算子工程目录下的“cpukernel/CMakeLists.txt”文件进行配置。
    • include_directories:添加头文件所在的目录。

      示例如下:

      include_directories(
      directoryPath1
      directoryPath2
      )
    • link_directories:添加库文件所在的目录。

      示例如下:

      link_directories(
      directoryPath3 
      directoryPath4
      )
    • link_libraries:添加算子实现文件的库文件。

      示例如下:

      link_libraries( 
      libName1 
      libName2)

    关于cmake参数的详细介绍,请参见https://cmake.org/cmake/help/latest/guide/tutorial/index.html,选择对应版本后查看参数。

  2. 在MindStudio工程界面,选中算子工程,单击顶部菜单栏的Build > Edit Build Configuration...
  3. 进入编译配置页面。单击添加新增配置,默认添加编译类型“Release(default)”,请参考表1进行编译配置。
    图2 编译配置页面
    表1 编译配置参数说明

    参数

    说明

    Name

    配置名称自定义,默认为Release。

    Build type

    配置类型,可选,默认为Release。

    Toolchain

    工具链配置器,根据已安装的CANN包预置架构一致的自定义Toolchain,支持本地和远程编译功能。

    可单击“Manage toolchains...”自定义配置Toolchain,配置详情请参见Toolchains

    CMake options

    CMake选项,默认:“-DCMAKE_BUILD_TYPE=Release”

    Build directory

    编译目录相对路径,该路径是相对于工程目录的路径。

    Build options

    编译加速选项。

    Environment variables

    环境变量配置:支持编译前配置环境变量。

    可直接手动配置或单击符号,在弹出窗中配置管理。

    Environment from path

    输入路径或单击右侧,选择环境变量配置文件。配置文件以单行<变量名>=<变量值>方式填写,保存为文件,如:

    APATH=/usr/local/xxx
    X_PATH=/xxx/xxx

    若选用远程Toolchain,将默认添加一个Deployment,用户需要配置环境变量。

    在Environment Variables输入框中输入环境变量。

    • ASCEND_TENSOR_COMPILER_INCLUDE:CANN软件头文件所在路径。
      ASCEND_TENSOR_COMPILER_INCLUDE=Ascend-cann-toolkit安装目录/ascend-toolkit/latest/include
    • ASCEND_OPP_PATH:用于查找AI CPU算子头文件所在的路径编。
      ASCEND_OPP_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest/opp;
    • ASCEND_AICPU_PATH:用于查找AI CPU算子相关的静态库。
      ASCEND_AICPU_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest
    • AICPU_KERNEL_TARGET:AI CPU算子实现文件编译生成的动态库文件名称。
      AICPU_KERNEL_TARGET=cust_aicpu_kernels_3.3.0

      建议用户配置AICPU_KERNEL_TARGET环境变量,并添加软件版本号的后缀,避免后续由于AI CPU软件升级造成自定义AI CPU动态库文件的冲突。

      若不配置此环境变量,使用默认值:cust_aicpu_kernels。

      若选用本地编译需用户在操作系统中增加环境变量
      export ASCEND_AICPU_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest
      export AICPU_KERNEL_TARGET=cust_aicpu_kernels_3.3.0(建议配置)
  4. 单击Build > Build Ascend Operator Project进行工程编译
  5. 在界面最下方的窗口查看编译结果,并在算子工程的cmake-build目录下生成自定义算子安装包custom_opp_Linux_Arch.run

    其中Arch的取值根据安装的CANN包和Toolchain的信息获取。

搜索结果
找到“0”个结果

当前产品无相关内容

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