单算子描述文件配置
配置文件样例
单算子描述文件配置
本章节中的单算子是基于Ascend IR定义的,描述文件为Json格式。关于单算子的定义请参见《CANN算子清单 (推理)》。
单算子生成的离线模型文件命名规则为:序号_opType_输入的描述(dataType_format_shape)_输出的描述(dataType_format_shape)。
dataType以及format对应枚举值请从${install_path}/atc/include/graph/types.h文件中查看,枚举值从0开始依次递增。
- format为ND:
[ { "op": "GEMM", "input_desc": [ { "format": "ND", "shape": [16, 16], "type": "float16" }, { "format": "ND", "shape": [16, 16], "type": "float16" }, { "format": "ND", "shape": [16, 16], "type": "float16" }, { "format": "ND", "shape": [], "type": "float16" }, { "format": "ND", "shape": [], "type": "float16" } ], "output_desc": [ { "format": "ND", "shape": [16, 16], "type": "float16" } ], "attr": [ { "name": "transpose_a", "type": "bool", "value": false }, { "name": "transpose_b", "type": "bool", "value": false } ] } ]
- format为NCHW:
[ { "op": "Conv2D", "input_desc": [ { "format": "NCHW", "shape": [1, 3, 16, 16], "type": "float16" }, { "format": "NCHW", "shape": [3, 3, 3, 3], "type": "float16" } ], "output_desc": [ { "format": "NCHW", "shape": [1, 3, 16, 16], "type": "float16" } ], "attr": [ { "name": "strides", "type": "list_int", "value": [1, 1, 1, 1] }, { "name": "pads", "type": "list_int", "value": [1, 1, 1, 1] }, { "name": "dilations", "type": "list_int", "value": [1, 1, 1, 1] } ] } ]
多组算子描述文件配置
描述文件支持定义多组算子Json文件配置,一组配置包括算子类型、算子输入和输出信息、视算子情况决定是否包括属性信息,举例如下(用户请根据实际情况进行修改)。
[ { "op": "MatMul", "input_desc": [ { "format": "ND", "shape": [ 16, 16 ], "type": "float16" }, ... ], "output_desc": [ { "format": "ND", "shape": [ 16, 16 ], "type": "float16" } ], "attr": [ { "name": "alpha", "type": "float", "value": 1.0 }, ... ] }, { "op": "MatMul", "input_desc": [ { "format": "ND", "shape": [ 256, 256 ], "type": "float16" }, ... ], "output_desc": [ { "format": "ND", "shape": [ 256, 256 ], "type": "float16" } ], "attr": [ { "name": "alpha", "type": "float", "value": 1.0 }, ... ] } ]
动态shape单算子描述文件配置
该场景下的单算子分为几种类型:
- 模型编译时不指定shape,模型执行时根据输入固定shape,能推导出具体输出shape:
[ { "op": "Add", "input_desc": [ { "format": "ND", "shape": [-1,16], "shape_range": [[0, 32]], "type": "int64" }, { "format": "ND", "shape": [-1,16], "shape_range": [[0, 32]], "type": "int64" } ], "output_desc": [ { "format": "ND", "shape": [-1,16], "shape_range": [[0, 32]], "type": "int64" } ] } ]
- 模型编译时不指定shape,模型执行时根据输入固定shape和常量,能推导出具体输出shape:
[ { "op": "TopK", "input_desc": [ { "format": "ND", "shape": [-1], "shape_range": [[1,-1]], "type": "int32" }, { "format": "ND", "shape": [], "type": "int32" } ], "output_desc": [ { "format": "ND", "shape": [-1], "shape_range": [[1,-1]], "type": "int32" }, { "format": "ND", "shape": [-1], "shape_range": [[1,-1]], "type": "int32" }], "attr": [ { "name": "sorted", "type": "bool", "value": true } ] } ]
- 模型编译时不指定shape,模型执行时根据输入固定Shape,无法得到算子的准确输出Shape,但可以得到输出Shape的范围:
[ { "op": "Where", "input_desc": [ { "format": "ND", "shape": [-1], "shape_range": [[1,-1]], "type": "int32" } ], "output_desc": [ { "format": "ND", "shape": [-1, 1], "shape_range": [[1,-1]], "type": "int64" } ] } ]
参数说明
Json文件由OpDesc的数组构成,参数解释如下:
属性名 |
类型 |
说明 |
是否必填 |
---|---|---|---|
op |
string |
算子类型。 |
是 |
input_desc |
TensorDesc数组 |
算子输入描述。 |
是 |
output_desc |
TensorDesc数组 |
算子输出描述。 |
是 |
attr |
Attr数组 |
算子属性。 |
否 |
属性名 |
类型 |
说明 |
---|---|---|
format |
string |
必填。Tensor的排布格式,配置为算子原始框架支持的format。 当前支持的format格式如下:
|
type |
string |
必填。Tensor的数据格式,支持的type如下:
|
shape |
int数组 |
必填。Tensor的shape,例如[1, 224, 224, 3]。 实际shape乘积不能超过int32最大值(214748364)。 |
name |
string |
可选。Tensor的名称。 如果算子的输入为动态输入,则需要设置该字段。如ConcatD算子在算子原型中,其动态输入定义为: DYNAMIC_INPUT(input_values, …),则此处需要设置为”input_values0”, “input_values1”,…。 |
shape_range |
int[2]数组 |
可选。shape为动态时,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。 |
属性名 |
类型 |
说明 |
---|---|---|
name |
string |
必填。属性名。 |
type |
string |
必填。属性值的类型,支持的类型有:
|
value |
由type的取值决定 |
必填。属性值,根据type不同,属性值不同:
|