固定输入/输出顺序的算子json配置
json配置说明
固定输入/输出顺序的算子json配置文件中“inputs”和“outputs”参数按照“输入/输出规则排布”,所以要求Kernel入口函数的参数也是按照该规则排布。
- 输入/输出规则排布(所有输出参数排布在输入参数之后):例如Kernel入口函数的参数排布为extern "C" __global__ __aicore__ void add_custom( GM_ADDR input1, GM_ADDR input2,uint32_t input3, GM_ADDR output)
- 推荐标准自定义算子工程场景的开发人员按此方式配置算子json文件。
以AddCustom算子为例,对应的json配置文件示例如下,配置项说明参见表1。
{
"op_type": "AddCustom",
"data_script": "./add_golden.py",
"gen_data": true,
"inputs": [
{
"name": "x",
"dtype": "int32",
"format": "ND",
"ignore": false,
"shape": [32],
"param_type": "required",
"data_file": "x.bin"
},
{
"name": "y",
"dtype": "int32",
"format": "ND",
"ignore": false,
"shape": [32],
"param_type": "required",
"data_file": "y.bin"
}
],
"outputs": [
{
"name": "z",
"dtype": "int32",
"format": "ND",
"ignore": false,
"shape": [32],
"param_type": "required",
"data_file": "z.bin"
}
],
"attrs": [
{
"name": "mask",
"dtype": "list_int",
"value": [0,0]
},
{
"name": "repeatTimes",
"dtype": "int",
"value": 1
},
{
"name": "dstBlkStride",
"dtype": "int",
"value": 1
},
{
"name": "src0BlkStride",
"dtype": "int",
"value": 1
},
{
"name": "src1BlkStride",
"dtype": "int",
"value": 1
},
{
"name": "dstRepStride",
"dtype": "int",
"value": 8
},
{
"name": "src0RepStride",
"dtype": "int",
"value": 8
},
{
"name": "src1RepStride",
"dtype": "int",
"value": 8
},
{
"name": "calCount",
"dtype": "int",
"value": 3
},
{
"name": "memory",
"dtype": "int",
"value": 0
}
]
}
配置项 |
数据类型 |
参数说明 |
取值说明 |
是否必选 |
|
|---|---|---|---|---|---|
op_type |
string |
算子名。 |
与待调测算子严格匹配。 |
是 |
|
data_script |
string |
数据生成脚本(python),用于生成输入和标杆数据。 |
根据实际情况设置,如"/home/flash_attention_golden.py"。 说明:
若无数据生成脚本,填写空字符或null。 |
否 |
|
gen_data |
bool |
是否根据data_script生成输入和标杆数据。 |
|
是 |
|
inputs / outputs |
name |
string |
核函数输入/输出的参数名。 |
根据实际情况设置(若通过算子二进制模板文件生成,不建议修改)。 |
是 |
dtype |
string |
输入/输出的数据类型。 |
目前支持bool、int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float16、floa32、float64、bfloat16。 |
是 |
|
format |
string |
输入/输出的存储格式。 |
支持的数据格式有ND、NZ。 |
是 |
|
shape |
list |
输入/输出的shape。 |
根据算子实际shape填写,例如[24,20,144,8]。 说明:
当输入为Scalar时,shape填null。 |
是 |
|
ignore |
bool |
是否忽略该输入/输出。 |
|
否 |
|
param_type |
string |
是否必选该输入/输出。 |
|
是 |
|
data_file |
string |
|
根据实际情况设置数据bin文件路径,必须为绝对路径,例如"/home/data.bin"。 说明:
|
否 |
|
data_value |
由dtype确定 |
输入的Scalar值。 |
根据实际情况填写。 说明:
|
否 |
|
attrs |
name |
string |
算子的属性名,是区分每个算子的唯一标识,不可重复。 |
部分场景允许没有attrs,请根据实际情况填写。 |
是 |
dtype |
string |
数据类型。 |
是 |
||
value |
可变 |
属性值。 |
是 |
||
特殊格式输入
- 场景1:支持Scalar格式的输入。
当输入为Scalar格式,json中“inputs”配置项中删除data_file,shape配为null,data_value配为指定的标量值。
{ "op_type": "xxxx", "data_script": "", "gen_data": false, "inputs": [{ "name": "tileNumIn", "dtype": "uint32", "param_type": "required", ...... "shape": null, "data_value": 8 }] ...... } - 场景2:支持TensorList格式的输入。
当输入为TensorList格式,该参数需要用[ ]表示,List中的每一项表示一个Tensor,示例如下:
{ "op_type": "xxxx", "data_script": "", "gen_data": false, "inputs": # 输入为tensor list [{ "name": "key0", "dtype": "float16", "format": "ND", "ignore": false, "shape": [1,5,8192,128], "param_type": "required", "data_file": "/home/data/input/k_0.bin" },{ "name": "key1", "dtype": "float16", "format": "ND", "ignore": false, "shape": [1,5,8192,128], "param_type": "required", "data_file": "/home/data/input/k_1.bin" }], ], ...... }