文档
注册

什么是算子原型

本节介绍算子原型的概念以及获取方式。

什么是算子原型

算子原型规定了在昇腾AI处理器上可运行算子的约束,主要体现算子的数学含义,包含定义算子输入、输出、属性。

在算子开发阶段,会使用REG_OP宏,以“.”链接INPUT、OUTPUT、ATTR等接口注册算子的输入、输出和属性信息,最终以OP_END_FACTORY_REG接口结束,完成算子的注册。注册代码实现如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
namespace ge{
    REG_OP(OpType) //算子类型名称
    .INPUT(x1, TensorType({ DT_FLOAT, DT_INT32 }))
    .INPUT(x2, TensorType({ DT_FLOAT, DT_INT32 })) 
    .DYNAMIC_INPUT(x, TensorType{DT_FLOAT, DT_INT32})
    .OPTIONAL_INPUT(b, TensorType{DT_FLOAT})        
    .OUTPUT(y, TensorType({ DT_FLOAT, DT_INT32 })) 
    .DYNAMIC_OUTPUT(y, TensorType{DT_FLOAT, DT_INT32})
    .ATTR(x, Type, DefaultValue)
    .REQUIRED_ATTR(x, Type)
    .OP_END_FACTORY_REG(OpType)
}
  • REG_OP(OpType)

    OpType:注册到昇腾AI处理器的自定义算子库的算子类型。

  • INPUT(x1, TensorType({ DT_FLOAT,DT_UINT8,... }))
    注册算子的输入信息。
    • x:宏参数,算子的输入名称。
    • TensorType({ DT_FLOAT,DT_UINT8,... }):“{ }”中为此输入支持的数据类型的列表。

    若算子有多个输入,每个输入需要使用一条INPUT(x, TensorType({ DT_FLOAT,DT_UINT8,... }))语句进行描述。

  • DYNAMIC_INPUT(x, TensorType{DT_FLOAT, DT_INT32, ...})
    算子为动态多输入场景下的输入信息注册。
    • x:宏参数,算子的输入名称,图运行时,会根据输入的个数自动生成x0、x1、x2……,序号依次递增。
    • TensorType({ DT_FLOAT,DT_UINT8,... }):“{ }”中为此输入支持的数据类型的列表。
  • OPTIONAL_INPUT(x, TensorType{DT_FLOAT, ...})
    若算子输入为可选输入,可使用此接口进行算子输入的注册。
    • x:宏参数,算子输入的名称。
    • TensorType{DT_FLOAT, ...}:“{ }”中为此输入支持的数据类型的列表。
  • OUTPUT(y, TensorType({ DT_FLOAT,DT_UINT8,... }))
    注册算子的输出信息。
    • y:宏参数,算子的输出名称。
    • TensorType({ DT_FLOAT,DT_UINT8,... }):“{ }”中为此输出支持的数据类型的列表。

    若算子有多个输出,每个输出需要使用一条OUTPUT(x, TensorType({ DT_FLOAT,DT_UINT8,... }))语句进行注册。

  • DYNAMIC_OUTPUT(y, TensorType{DT_FLOAT, DT_INT32})
    算子为动态多输出场景下的输出信息注册。
    • y:宏参数,算子的输出名称,图运行时,会根据输出的个数自动生成y0、y1、y2……,序号依次递增。
    • TensorType({ DT_FLOAT,DT_UINT8,... }):“{ }”中为此输出支持的数据类型的列表。
  • ATTR(x, Type,DefaultValue)

    注册算子的属性,包括算子的属性名称,属性类型以及属性值的默认值,当开发者不设置算子对象的属性值时使用默认值。

    例如:ATTR(mode, Int, 1),注册属性mode,属性类型为int64_t,默认值为1。

    若算子有多个属性,每个属性需要使用一条ATTR(x, Type,DefaultValue)语句或者REQUIRED_ATTR(x, Type)语句进行注册。

  • REQUIRED_ATTR(x, Type)

    注册算子的属性,包括算子的属性名称与属性类型,无默认值,开发者必须设置算子对象的属性值。

    若算子有多个属性,每个属性需要使用一条ATTR(x, Type,DefaultValue)语句或者REQUIRED_ATTR(x, Type)语句进行注册。

  • OP_END_FACTORY_REG(OpType):结束算子注册。OpType与REG_OP(OpType)中的OpType保持一致。

DT_FLOAT,DT_UINT8等数据类型对应关系请参见DataType,关于该文件中的DT_BF16数据类型,仅在以下产品型号支持:

Atlas A2训练系列产品/Atlas 800I A2推理产品

如何获取算子原型

在模型构建时,用户需要了解算子原型,包括输入、输出和属性信息,从而创建算子实例,构建自己的Graph。

  • 对于用户自定义算子,请自行获取自定义算子的算子原型定义头文件,了解算子的原型定义。
    从“Ascend-cann-toolkit安装目录/ascend-toolkit/latest/opp/vendors/<vendor_name>/op_proto/inc”算子原型定义的头文件中获取,例如:
    1
    2
    3
    4
    5
    6
    REG_OP(SubMConv3dCube) 
        .INPUT(x, TensorType({DT_FLOAT16})) 
        .INPUT(filter, TensorType({DT_FLOAT16}))
        .OUTPUT(y, TensorType({DT_FLOAT16}))
        .ATTR(is_first, Bool, false)
        .OP_END_FACTORY_REG(SubMConv3dCube)
    
  • 对于内置算子,用户可以通过如下两种方式获取算子原型:
    • 算子清单获取,如图1所示。
      图1 查看算子原型信息
    • “Ascend-cann-toolkit安装目录/ascend-toolkit/latest/opp/built-in/op_proto/inc”算子原型定义的头文件中获取,例如:
      REG_OP(SoftmaxV2)
          .INPUT(x, TensorType({ DT_DOUBLE, DT_FLOAT16, DT_BF16, DT_FLOAT }))
          .OUTPUT(y, TensorType({ DT_DOUBLE, DT_FLOAT16, DT_BF16, DT_FLOAT }))
          .ATTR(axes, ListInt, {-1})
          .ATTR(half_to_float, Bool, false)
          .OP_END_FACTORY_REG(SoftmaxV2)
搜索结果
找到“0”个结果

当前产品无相关内容

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