算子工程参考示例

使用说明

CANN工具提供了Ascend C算子工程样例,供用户学习和参考。

算子工程样例所在路径为:CANN软件安装后文件存储路径中的“tools/msopgen/template/operator_demo_projects/ascendc_operator_sample”。

ascendc_operator_sample目录结构如下。
├── build.sh       // 编译入口脚本
├── cmake
│   ├── config.cmake      // 编译配置文件
│   ├── func.cmake
│   ├── intf.cmake
│   ├── makeself.cmake
│   └── util
├── CMakeLists.txt
├── CMakePresets.json     // 编译配置项
├── framework
├── op_host        // host侧实现文件
├── op_kernel      // kernel侧实现文件
├── scripts
└── testcase
     ├── CMakeLists.txt
     └── st
          ├── Wkv_case_dynamic.json      //动态shape的ST测试用例定义文件
          └── Wkv_case.json       //静态shape的ST测试用例定义文件

操作步骤

  1. 执行如下命令将样例工程拷贝至用户自定义工程存放目录,如$HOME/sample。

    cp -r $HOME/Ascend/ascend-toolkit/latest/tools/msopgen/template/operator_demo_projects/ascendc_operator_sample  $HOME/sample
    chmod -R 750 $HOME/sample/ascendc_operator_sample

  2. 进入样例工程所在目录,修改CMakePresets.json中ASCEND_CANN_PACKAGE_PATH为CANN软件包安装路径。

    {
        "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": "__ASCEND_COMPUTE_UNIT__"        //请替换为Atlas 训练系列产品Atlas A2训练系列产品/Atlas 800I A2推理产品的具体型号
                    },
                    "ENABLE_TEST": {
                        "type": "BOOL",
                        "value": "True"
                    },
                    "vendor_name": {
                        "type": "STRING",
                        "value": "customize"
                    },
                    "ASCEND_CANN_PACKAGE_PATH": {
                        "type": "PATH",
                        "value": "/usr/local/Ascend/latest"        //请替换为toolkit包安装后的实际路径
                    },
                    "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++"
                    }
                }
            }
        ]
    }

  3. 进入样例工程的cmake目录,修改config.cmake中ASCEND_COMPUTE_UNIT的配值。

    set(CMAKE_CXX_FLAGS_DEBUG "")
    set(CMAKE_CXX_FLAGS_RELEASE "")
    
    if (NOT DEFINED vendor_name)
        set(vendor_name customize CACHE STRING "")
    endif()
    if (NOT DEFINED ASCEND_CANN_PACKAGE_PATH)
        set(ASCEND_CANN_PACKAGE_PATH /usr/local/Ascend/latest 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)
    set(ASCEND_COMPUTE_UNIT ascendxxxyy)        //配值需与CMakePresets.json文件中的一致
    set(ASCEND_FRAMEWORK_TYPE tensorflow)
    file(MAKE_DIRECTORY ${ASCEND_AUTOGEN_PATH})

  4. 在样例工程目录下执行如下命令,进行算子工程编译。

    ./build.sh

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

  5. 在自定义算子包所在路径下,执行如下命令,安装自定义算子包。

    ./custom_opp_<target os>_<target architecture>.run

    命令执行成功后,自定义算子包中的相关文件将部署至当前环境中。

  6. 已完成环境变量的配置,进入msOpST工具所在目录,执行如下命令生成/执行测试用例。

    ${INSTALL_DIR}/python/site-packages/bin/msopst run -i {**.json}  -soc {Soc Version}  -out {output path} 
    • run(必选):用于执行算子的ST测试用例。
    • -i,--input(必选):算子测试用例定义文件Wkv_case_dynamic.json或Wkv_case.json的路径,可配置为绝对路径或者相对路径。
    • -soc,--soc_version(必选):昇腾AI处理器的型号,请根据实际环境进行替换。
      • 在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,获取Chip Name信息。实际配置值为AscendChip Name,例如Chip Name取值为xxxyy,实际配置值为Ascendxxxyy
    • -out,--output(可选):生成文件所在路径。