下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

创建算子工程

  1. 编写算子的原型定义json文件,用于生成算子开发工程。
    假设AddCustom算子的原型定义文件命名为add_custom.json,文件内容如下:
    [
        {
            "op": "AddCustom",
            "input_desc": [
                {
                    "name": "x",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "float16"
                    ]
                },
                {
                    "name": "y",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "float16"
                    ]
                }
            ],
            "output_desc": [
                {
                    "name": "z",
                    "param_type": "required",
                    "format": [
                        "ND"
                    ],
                    "type": [
                        "float16"
                    ]
                }
            ]
        }
    ]
    表1 json文件配置参数说明

    配置字段

    类型

    含义

    是否必选

    op

    -

    字符串

    算子的Operator Type。

    input_desc

    -

    列表

    输入参数描述。

    name

    字符串

    算子输入参数的名称。

    param_type

    字符串

    参数类型:

    • required
    • optional
    • dynamic

    未配置默认为required。

    format

    列表

    包含如下取值:

    ND,NHWC,NCHW,HWCN,NC1HWC0,FRACTAL_Z等。

    format与type的数量需保持一致。

    type

    列表

    算子参数的类型。

    取值范围:float16(fp16), float32(fp32), int8, int16, int32, uint8, uint16, bool, bfloat16(bf16)等。

    说明:

    不同计算操作支持的数据类型不同,详细请参见API参考

    format与type的数量需保持一致。

    output_desc

    -

    列表

    输出参数描述。

    name

    字符串

    算子输出参数的名称。

    param_type

    字符串

    参数类型:

    • required
    • optional
    • dynamic

    未配置默认为required。

    format

    列表

    包含如下取值:

    ND,NHWC,NCHW,HWCN,NC1HWC0,FRACTAL_Z等。

    format与type的数量需保持一致。

    type

    列表

    算子参数的类型。

    取值范围:float16(fp16), float32(fp32), int8, int16, int32, uint8, uint16, bool, bfloat16(bf16)等。

    说明:

    不同计算操作支持的数据类型不同,详细请参见API参考

    format与type的数量需保持一致。

    attr

    -

    列表

    属性描述。

    name

    字符串

    算子属性参数的名称。

    param_type

    字符串

    参数类型:

    • required
    • optional

    未配置默认为required。

    type

    字符串

    算子参数的类型。

    包含如下取值:

    int、bool、float、string、list_int、list_float等。

    default_value

    -

    默认值

    • json文件可以配置多个算子,json文件为列表,列表中每一个元素为一个算子。
    • 若input_desc或output_desc中的name参数相同,则后一个会覆盖前一参数。
    • input_desc,output_desc中的type需按顺序一一对应匹配,format也需按顺序一一对应匹配。

      例如,第一个输入x的type配置为[“int8”,“int32”],第二个输入y的type配置为[“fp16”,“fp32”],输出z的type配置为[“int32”,“int64”],最终这个算子支持输入(“int8”,“fp16”)生成int32,或者(“int32”,“fp32”)生成int64,即输入和输出的type是垂直对应的,类型不能交叉。

    • input_desc,output_desc中的type与format需一一对应匹配,数量保持一致。type的数据类型为以下取值("numbertype"、"realnumbertype"、"quantizedtype"、"BasicType"、"IndexNumberType"、"all")时,需识别实际的type数量是否与format数量保持一致,若数量不一致,创建工程会收到报错提示,同时format按照type的个数进行补齐,继续生成算子工程。若type的取值为基本数据类型(如:“int32”),且与format无法一一对应时,创建工程会收到报错提示,并停止运行。
    • json文件可对“attr”算子属性进行配置,具体请参考编写原型定义文件
  2. 创建算子工程。

    进入msopgen工具所在目录执行如下命令,参数说明请参见表2

    ./msopgen gen -i {*.json} -f {framework type} -c {Compute Resource} -lan cpp -out {Output Path}

    表2 参数说明

    参数名称

    参数描述

    是否必选

    gen

    用于生成算子开发交付件。

    -i,--input

    算子原型定义文件(.json)路径,可配置为绝对路径或者相对路径。工具执行用户需要有此路径的可读权限。

    -f,--framework

    框架类型。

    • TensorFlow框架,参数值:tf或者tensorflow
    • Caffe框架,参数值:caffe
    • PyTorch框架,参数值:pytorch
    • MindSpore框架,参数值:ms或者mindspore
    • ONNX框架,参数值:onnx
    说明:

    所有参数值大小写不敏感。

    -c,--compute_unit

    算子使用的计算资源。

    配置格式为:ai_core-{soc version},ai_core与{soc version}之间用中划线“-”连接。

    请根据实际昇腾AI处理器版本进行选择。

    说明:
    • 如果无法确定具体的<soc_version>,则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy

    -out,--output

    生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户具有可读写权限。

    若不配置,则默认生成在执行命令的当前路径。

    -m,--mode

    生成交付件模式。

    • 0:创建新的算子工程,若指定的路径下已存在算子工程,则会报错退出。
    • 1:在已有的算子工程中追加算子。

    默认值:0。

    -op,--operator

    配置算子的类型,如:Conv2DTik。

    若不配置此参数,当算子原型定义文件中存在多个算子时,工具会提示用户选择算子。

    -lan,--language

    算子编码语言。

    • py:基于DSL和TIK算子编程框架,使用Python编程语言进行开发。
    • cpp:基于Ascend C编程框架,使用C++编程语言进行开发。

    默认值:py。

    示例:

    1. 进入msopgen工具所在目录创建算子工程,执行如下命令:
      ./msopgen gen -i json_path/add_custom.json -f tf -c ai_core-{Soc Version} -out ./output_data -lan cpp
      • -i:指定算子原型定义文件add_custom.json所在路径。
      • -c:参数中{Soc Version}为昇腾AI处理器的型号。
      • -lan:参数cpp代表算子基于Ascend C编程框架,使用C++编程语言开发。
    2. 选择算子(可选):
      • 若输入add_custom.json文件只有一个算子原型定义或使用-op参数指定算子类型请跳过此步骤。
      • 若输入add_custom.json文件中包含多个原型定义,且没有使用-op参数指定算子类型工具会提示输入选择的算子序号,选择算子。

        工具会提示输入选择的算子序号,输入:1。

        There is more than one operator in the .json file:  
        1 Op_1
        2 Op_2
        Input the number of the op: 1

        当命令行提示:Generation completed,则完成Op_1算子工程的创建。Op_1为文件中"op"的值。

  3. 命令执行完后,会在指定目录下生成算子工程目录,工程中包含算子实现的模板文件,编译脚本等,如下所示:
    算子工程目录生成在 -out 所指定的目录下:./output_data,目录结构如下所示:
    output_data
    ├── build.sh         // 编译入口脚本
    ├── cmake 
    │   ├── config.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                     // 自定义算子工程打包相关脚本所在目录
  4. 可选:在算子工程中追加算子。

    若需要在已存在的算子工程目录下追加其他自定义算子,命令行需配置“-m 1”参数。

    进入msopgen工具所在目录执行如下命令:

    ./msopgen gen -i json_path/**.json -f tf -c ai_core-{Soc Version} -out ./output_data -m 1
    • -i:指定算子原型定义文件add_custom.json所在路径。
    • -c:参数中{Soc Version}为昇腾AI处理器的型号。

    在算子工程目录下追加**.json中的算子。MindSpore算子工程不能够添加非MindSpore框架的算子。

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

当前产品无相关内容

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