文档
注册

创建算子工程

CANN开发套件包中提供了自定义算子工程生成工具msOpGen,可基于算子原型定义输出算子工程:包括算子host侧代码实现文件算子kernel侧实现文件以及工程编译配置文件等

使用msOpGen工具创建算子开发工程的步骤如下:

  1. 编写算子的原型定义json文件,用于生成算子开发工程。
    例如,AddCustom算子的json文件命名为add_custom.json,文件内容如下:
    [
        {
            "op": "AddCustom",
            "input_desc": [
                {
                    "name": "x",
                    "param_type": "required",
                    "format": [
                        "ND",
                        "ND",
                        "ND"
                    ],
                    "type": [
                        "fp16",
                        "float",
                        "int32"
                    ]
                },
                {
                    "name": "y",
                    "param_type": "required",
                    "format": [
                        "ND",
                        "ND",
                        "ND"
                    ],
                    "type": [
                        "fp16",
                        "float",
                        "int32"
                    ]
                }
            ],
            "output_desc": [
                {
                    "name": "z",
                    "param_type": "required",
                    "format": [
                        "ND",
                        "ND",
                        "ND"
                    ],
                    "type": [
                        "fp16",
                        "float",
                        "int32"
                    ]
                }
            ]
        }
    ]
    例如,ReduceMaxCustom算子(包含属性)的json文件命名为reduce_max_custom.json,文件内容如下:
    [
        {
            "op": "ReduceMaxCustom",
             "input_desc": [
                {
                    "name": "x",
                    "param_type": "required",
                    "format": ["ND"],
                    "type": ["float16"]
                }
            ],
            "output_desc": [
                {
                    "name": "y",
                    "param_type": "required",
                    "format": ["ND"],
                    "type": ["float16"]
                },
                {
                    "name": "idx",
                    "param_type": "required",
                    "format": ["ND"],
                    "type": ["int32"]
                }
            ],
            "attr": [                                                                   
                {
                    "name": "reduceDim",
                    "param_type": "required",
                    "type": "int"
                },
                {
                    "name": "isKeepDim",
                    "param_type": "optional",
                    "type": "int",
                    "default_value": 1
                }
            ]
        }
    ]
  2. 使用msOpGen工具生成算子的开发工程。以生成AddCustom的算子工程为例,下文仅针对关键参数进行解释,详细参数说明请参见算子工程创建(msOpGen)
    ${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i $HOME/sample/add_custom.json -c ai_core-<soc_version> -lan cpp -out $HOME/sample/AddCustom
    • ${INSTALL_DIR}为CANN软件安装后文件存储路径,请根据实际环境进行替换。
    • -i:指定算子原型定义文件add_custom.json所在路径,请根据实际情况修改。
    • -c:ai_core-<soc_version>代表算子在AI Core上执行,<soc_version>昇腾AI处理器的型号。
      • 如果无法确定具体的<soc_version>,则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy
      • 基于同系列的AI处理器型号创建的算子工程,其基础功能(基于该工程进行算子开发、编译和部署)通用。比如soc_version设置为Ascend310P1,创建的算子工程,也可以用于开发运行于Ascend310P3上的算子。
    • -lan: 参数cpp代表算子基于Ascend C编程框架,使用C/C++编程语言开发。
    • -out:生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户对路径具有可读写权限。若不配置,则默认生成在执行命令的当前路径。
  3. 命令执行完后,会在-out指定目录或者默认路径下生成算子工程目录,工程中包含算子实现的模板文件,编译脚本等,以AddCustom算子为例,目录结构如下所示:
    AddCustom
    ├── build.sh         // 编译入口脚本
    ├── cmake 
    │   ├── config.cmake
    │   ├── func.cmake
    │   ├── intf.cmake
    │   ├── makeself.cmake
    │   └── util        // 算子工程编译所需脚本及公共编译文件存放目录
    ├── CMakeLists.txt    // 算子工程的CMakeLists.txt
    ├── CMakePresets.json    // 编译配置项
    ├── framework        // 算子插件实现文件目录,单算子模型文件的生成不依赖算子适配插件,无需关注
    ├── op_host                      // host侧实现文件
    │   ├── add_custom_tiling.h    // 算子tiling定义文件
    │   ├── add_custom.cpp         // 算子原型注册、shape推导、信息库、tiling实现等内容文件
    │   ├── CMakeLists.txt
    ├── op_kernel                   // kernel侧实现文件
    │   ├── CMakeLists.txt   
    │   ├── add_custom.cpp        // 算子代码实现文件 
    └── scripts                     // 自定义算子工程打包相关脚本所在目录

    上述目录结构中的粗体文件为后续算子开发过程中需要修改的文件,其他文件无需修改。

工程目录中的op_kernel和op_host包含了算子的核心实现文件。op_kernel下存放kernel侧算子实现。op_host下存放host侧代码实现,包括算子原型定义host侧tiling实现。其中kernel侧算子实现和host侧tiling实现在算子实现章节已经介绍了其核心的实现方法,在该章节会侧重于介绍接入CANN框架后的编程模式和API的使用。工程目录中的CMakePresets.json,用于开发者完成工程编译相关配置,之后即可进行编译部署。

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

当前产品无相关内容

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