单算子描述文件是由OpDesc的数组构成的json文件,本章节详细介绍该文件中各参数的含义。
表1 OpDesc参数说明
属性名 |
类型 |
说明 |
是否必填 |
compile_flag |
INT32 |
该参数废弃,不建议使用,后续版本将会删除。 编译类型。取值如下:
- 0:表示进行精确编译。精确编译是指按照用户指定的维度信息、在编译时系统内部不做任何转义直接编译,其中,AI CPU算子不受该标记影响。
- 1:表示进行模糊编译。模糊编译是指对于支持动态Shape的算子,在编译时系统内部对可变维度做了泛化后再进行编译。如果用户无法获取算子的Shape范围,又想编译一次达到多次执行推理的目的时,可以使用模糊编译特性。
默认值为0。 使用约束:当前仅支持transformer网络模型涉及的算子。 |
否 |
op |
string |
算子类型。 |
是 |
name |
string |
单算子模型文件的名称。 如果不设置name参数,则模型文件名的命名规则默认为:序号_opType_输入的描述(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软件包,则安装后文件存储路径为:$HOME/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格式以及对应的枚举如下:
模型转换完毕,上述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)。
|
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
- 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 |
可选,表示输入是否为常量:
|
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不同,属性值不同,举例如下:
|