昇腾社区首页
中文
注册

创建简易算子工程

msOpGen工具根据用户需要,对简易的AscendC算子工程进行了适配

使用约束

  • 仅适用于单算子API调用场景
  • 当前支持的产品型号为:Atlas A2训练系列产品/Atlas 800I A2推理产品

创建简易算子工程

  1. 编写算子的原型定义json文件,用于生成算子开发工程。具体请参考编写算子的原型定义json文件
  2. 生成简易算子工程。

    以生成AddCustom简易算子工程为例,进入msOpGen工具所在目录执行如下命令,参数说明请参见表2

    ${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i {*.json} -f aclnn -c {Compute Resource} -lan cpp -out {Output Path}
  3. 命令执行完后,会在指定目录下生成简易算子工程目录,工程中包含算子实现的模板文件,编译脚本等。
    简易算子工程目录生成在 -out 所指定的目录下目录结构如下所示:
    ├── build.sh         // 编译入口脚本
    ├── cmake            // 编译文件目录
    ├── CMakeLists.txt   // 算子工程的CMakeLists.txt
    ├── op_host                        // host侧实现文件
    │   ├── add_custom_tiling.h    // 算子tiling定义文件
    │   ├── add_custom.cpp         // 算子原型注册、shape推导、信息库、tiling实现等内容文件
    │   ├── CMakeLists.txt
    ├── op_kernel                      // kernel侧实现文件
    │   ├── CMakeLists.txt   
    │   ├── add_custom.cpp        // 算子代码实现文件 

编译简易算子工程

  1. 工程创建时,会自动填充CANN安装路径以及芯片类型,如需修改,可修改cmake文件夹中config.cmake文件的编译变量。
    set(CMAKE_CXX_FLAGS_DEBUG "")
    set(CMAKE_CXX_FLAGS_RELEASE "")
    
    if (NOT DEFINED CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE Release CACHE STRING "")
    endif()
    if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
        set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/build_out" CACHE PATH "" FORCE)
    endif()
    if (NOT DEFINED ASCEND_CANN_PACKAGE_PATH)
        set(ASCEND_CANN_PACKAGE_PATH /usr/local/Ascend/ascend-toolkit/latest CACHE PATH "")  //请替换为CANN软件包安装后的实际路径
    endif()
    if (NOT DEFINED ASCEND_PYTHON_EXECUTABLE)
        set(ASCEND_PYTHON_EXECUTABLE python3 CACHE STRING "")
    endif()
    if (NOT DEFINED ASCEND_COMPUTE_UNIT)
        set(ASCEND_COMPUTE_UNIT ascendxxxyy CACHE STRING "")   //请替换为实际使用的芯片类型
    endif()
    if (NOT DEFINED ENABLE_TEST)
        set(ENABLE_TEST FALSE CACHE BOOL "")
    endif()
    if (NOT DEFINED ENABLE_CROSS_COMPILE)
        set(ENABLE_CROSS_COMPILE  FALSE CACHE BOOL "")
    endif()
    if (NOT DEFINED CMAKE_CROSS_PLATFORM_COMPILER)
        set(CMAKE_CROSS_PLATFORM_COMPILER "/usr/bin/aarch64-linux-gnu-g++" CACHE PATH "")
    endif()
    set(ASCEND_TENSOR_COMPILER_PATH ${ASCEND_CANN_PACKAGE_PATH}/compiler)
    set(ASCEND_CCEC_COMPILER_PATH ${ASCEND_TENSOR_COMPILER_PATH}/ccec_compiler/bin)
    set(ASCEND_AUTOGEN_PATH ${CMAKE_BINARY_DIR}/autogen)
    file(MAKE_DIRECTORY ${ASCEND_AUTOGEN_PATH})
    set(CUSTOM_COMPILE_OPTIONS "custom_compile_options.ini")
    execute_process(COMMAND rm -rf ${ASCEND_AUTOGEN_PATH}/${CUSTOM_COMPILE_OPTIONS}
                    COMMAND touch ${ASCEND_AUTOGEN_PATH}/${CUSTOM_COMPILE_OPTIONS})
    表1 需要开发者配置的常用参数列表

    参数名称

    参数描述

    默认值

    ASCEND_CANN_PACKAGE_PATH

    CANN软件包安装路径,请根据实际情况进行修改。

    “/usr/local/Ascend/latest”

    CMAKE_BUILD_TYPE

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

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

    “Release”

    CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT

    CMAKE文件的安装路径。

    “build_out”

    ASCEND_PYTHON_EXECUTABLE

    Python3路径。

    “python3”

    ASCEND_COMPUTE_UNIT

    芯片型号。

    自动生成

    ENABLE_TEST

    是否开启测试工程

    关闭

    ENABLE_CROSS_COMPILE

    是否开启交叉编译功能。

    说明:

    简易算子工程暂不支持该功能。

    关闭

    CMAKE_CROSS_PLATFORM_COMPILER

    交叉编译路径,仅开启交叉编译功能时该参数才有效。

    说明:

    简易算子工程暂不支持该功能。

    “/usr/bin/aarch64-linux-gnu-g++”

  2. 支持自定义编译选项,具体请参考8.1.4-2支持自定义编译选项
  3. 在算子工程目录下执行如下命令,进行算子工程编译。
    ./build.sh

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

    ├── CMakeFiles 
    ├── autogen         // 编译自动生成,包含算子信息库文件、单算子API调用头文件以及cpp实现等
    ├── Makefile        
    ├── install_manifest.txt    
    ├── CMakeCache.txt          // cmake相关均为简易算子工程编译过程中生成,无需关注
    ├── CMake_install.cmake  
    ├── op_api                       // 简易算子工程编译时生成,调用时需手动链接
    │   ├── include               
    │   ├── lib         
    ├── op_host                      // host侧编译时生成
    │   ├── CMakefiles
    │   ├── cmake_install.cmake      
    │   ├── libcust_opapi.so         
    │   ├── libcust_opmaster_rt2.0.so   
    │   ├── Makefile
    ├── op_kernel                   // kernel侧编译时生成
    │   ├── CMakefiles
    │   ├── cmake_install.cmake    // 算子二进制.o、静态库等
    │   ├── kernel   
    │   ├── Makefile

使用单算子API调用方式调用简易算子工程

  1. 为了方便使用aclnn直接调用简易算子工程,进行算子工程编译时,需要手动链接build_out/op_api下的libcust_opapi.so和头文件,参考方式如下:
    include_directories(    
        ${INC_PATH}/runtime/include     
        ${INC_PATH}/atc/include     ../inc     
        ${OP_PATH}/build_out/op_api/include )    // OP_PATH为简易算子工程的实际路径
    # add host lib pathlink_directories(    
        ${LIB_PATH}    
        ${LIB_PATH1}    
        ${OP_PATH}/build_out/op_api/lib    // OP_PATH为简易算子工程的实际路径
    )
  2. 配置cann路径后,在operator/MatmulCustomSample/FrameworkLaunch/AclNNInvocation目录下执行run.sh,具体请参见Link
  3. 直接调用算子,执行二进制文件,具体请参见Link