下载
中文
注册

算子工程参考示例

使用说明

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

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

ascendc_operator_sample目录结构如下。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
├── 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软件包安装路径。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    {
        "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的配值。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    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. 已完成环境变量的配置,执行如下命令生成/执行测试用例。
    ${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(可选):生成文件所在路径。