下载
中文
注册

什么是单算子描述文件

单算子描述文件是基于Ascend IR定义的单个算子的定义文件,包括算子的输入、输出及属性等信息。借助该文件转换成适配昇腾AI处理器的离线模型后,可以验证单算子的功能。

单算子描述文件是由OpDesc数组构成的json文件,参数构成以及解释如下:

表1 OpDesc参数说明

属性名

类型

说明

是否必填

compile_flag

INT32

该参数废弃,不建议使用,后续版本将会删除。

编译类型。取值如下:

  • 0:表示进行精确编译。精确编译是指按照用户指定的维度信息、在编译时系统内部不做任何转义直接编译,其中,AI CPU算子不受该标记影响。
  • 1:表示进行模糊编译。模糊编译是指对于支持动态Shape的算子,在编译时系统内部对可变维度做了泛化后再进行编译。如果用户无法获取算子的Shape范围,又想编译一次达到多次执行推理的目的时,可以使用模糊编译特性。

默认值为0。

使用约束:当前仅支持transformer网络模型涉及的算子。

op

string

算子类型。

name

string

单算子模型文件的名称。

如果不设置name参数,则模型文件名的命名规则默认为:序号_算子类型_输入的描述(dataType_format_shape)_输出的描述(dataType_format_shape),例如,0_Add_3_2_3_3_3_2_3_3_3_2_3_3.om。

dataType以及format对应枚举值请从${INSTALL_DIR}/include/graph/types.h文件中查看,枚举值依次递增。其中,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Ascend-cann-toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/ascend-toolkit/latest。

input_desc

TensorDesc数组

算子输入描述。

output_desc

TensorDesc数组

算子输出描述。

attr

Attr数组

算子属性。

表2 TensorDesc数组参数说明

属性名

类型

说明

dynamic_input

string

可选。动态输入,取值必须和算子信息库中该算子定义的输入name相同。

该参数用于设置算子动态输入的分组与动态输入的个数,例如算子原型定义中某算子的动态输入为:

.DYNAMIC_INPUT(x,...)

.DYNAMIC_INPUT(y,...)

则表示动态输入有两组,分别为x,y。每一组的输入个数,根据dynamic_input的个数确定。具体设置原则可以参见TensorDesc数组中name参数的说明。

  • 如果构造的单算子描述文件中已经设置过name参数,则该参数可选。
  • 如果构造的单算子描述文件中没有name参数,则该参数必填。
  • 如果同时存在dynamic_input和name参数,则以name参数设置的为准。

format

string

必填。Tensor的排布格式,配置为算子原始框架支持的format。

当前支持的format格式以及对应的枚举如下:

  • NCHW: 0
  • NHWC: 1
  • ND: 2,表示支持任意格式。
  • NC1HWC0: 3,5维数据格式。
  • FRACTAL_Z: 4,用于定义卷积权重的数据格式。
  • FRACTAL_NZ: 29,分形格式。关于上述Format详细解释请参见关键概念(备份)
  • RESERVED: 40,当存在可选输入,且可选输入没有输入数据时,则必须将可选输入的format配置为RESERVED,同时将type配置为UNDEFINED;若可选输入有输入数据时,则按其输入数据的format、type配置即可。

模型转换完毕,上述format在对应om文件名中以对应的枚举呈现,例如若输入为NHWC格式,则展示为1。

origin_format

string

可选。Tensor的原始format。

不带此字段时,默认Tensor的实现format与原始format一致。

name

string

可选。Tensor的名称。算子的输入为动态输入时,需要设置该字段。

该参数用于设置每一组动态输入中,具体输入的名称,每一个输入名称为算子原型中定义的输入名称+编号,编号根据dynamic_input的个数确定,从0开始依次递增。

  • 如果构造的单算子描述文件中已经设置过dynamic_input参数,则该参数可选。
  • 如果构造的单算子描述文件中没有dynamic_input参数,则该参数必填。
  • 如果同时存在dynamic_input和name参数,则以name参数设置的为准。

shape

int数组

必填。Tensor的shape,例如[1, 224, 224, 3],实际shape乘积不能超过int32最大值(2147483647)。

  • 静态shape场景:

    shape维度以及取值都为固定值,该场景下不需要再配置shape_range参数。

  • shape为常量场景:

    如果希望指定算子输入、输出shape为标量,则该参数需要设置为"[]"形式,比如"shape": []。该场景下不需要再配置shape_range参数。

  • 动态shape场景,shape取值有如下场景:
    • shape维度确定,但是某一维度的取值不确定,则该不确定的维度取值设置为“-1”,例如[16,-1,20,-1],该场景下还需要与shape_range参数配合使用,用于给出“-1”维度的取值范围。例如:
              "shape": [-1,16],
              "shape_range": [[0,32]],
    • shape维度也不确定,该场景下shape取值为“-2”,例如"shape": [-2],该场景下不需要配置shape_range参数(当前版本暂不支持)

    动态shape算子执行场景下,算子执行环境中的算子库包安装版本需与算子模型编译环境的版本一致,否则在加载算子时会报错。详情可参见算子库包版本问题导致加载单算子失败

origin_shape

string

可选。Tensor的原始shape。

不带此字段时,默认Tensor的实现shape与原始shape一致。

type

string

必填。Tensor的数据类型,支持的type以及对应的枚举如下:

  • bool: 12
  • int8: 2
  • uint8: 4
  • int16: 6
  • uint16: 7
  • int32: 3
  • uint32: 8
  • int64: 9
  • uint64: 10
  • float16/fp16/half: 1
  • float/float32: 0
  • double: 11
  • complex32: 33
  • complex64: 16
  • complex128: 17
  • uint1: 30
  • bfloat16: 27
  • int4: 29
  • UNDEFINED: 28,当存在可选输入,且可选输入没有输入数据时,则必须将可选输入的type配置为UNDEFINED,同时将format配置为RESERVED;若可选输入有输入数据时,则按其输入数据的format、type配置即可。

模型转换完毕,上述type在对应om文件名中以对应的枚举呈现,例如若输入为int8类型,则展示为2。

shape_range

int[2]数组

可选。shape为动态时(不包括-2场景),unknow shape的取值范围。

例如,若shape取值为[16,-1,20,-1]:其中的-1表示unknow shape。

shape_range取值为[1,128],[1,-1]:[1,128]表示从1到128的取值范围,对应shape参数中第一个-1;[1,-1]表示从1到无穷大的取值范围,对应shape参数中第二个-1。

is_const

bool

可选,表示输入是否为常量:

  • true:常量。
  • false:默认值,非常量。

const_value

list

可选,常量取值。

当前仅支持一维list配置,list中具体配置个数由shape取值决定。例如,shape取值为2,则const_value中列表个数为2。

取值类型由type决定,假设type取值为float16,则单算子编译时会自动将const_value中的取值转换为float16格式的取值。

表3 Attr数组参数说明

属性名

类型

说明

name

string

必填。属性名。

type

string

必填。属性值的类型,支持的类型有:

  • bool
  • int
  • float
  • string
  • list_bool
  • list_int
  • list_float
  • list_string
  • list_list_int
  • data_type

value

由type的取值决定

必填。属性值,根据type不同,属性值不同,举例如下:

  • bool: true/false
  • int: 10
  • float: 1.0
  • string:“NCHW”
  • list_bool: [false, true]
  • list_int: [1, 224, 224, 3]
  • list_float: [1.0, 0.0]
  • list_string: ["str1","str2"]
  • list_list_int: [[1, 3, 5, 7], [2, 4, 6, 8]]
  • data_type: "DT_FLOAT"或该枚举值对应的数字,例如0。

    其他取值请参见types.h中DataType的枚举值或枚举值对应的数字。