指导用户使用msOpST工具生成算子测试用例定义文件(*.json),作为算子ST测试用例的输入。
msOpST工具根据待测host侧算子的实现文件生成算子ST测试用例定义文件,在算子工程文件中host侧算子的实现文件路径如下所示。
可以单击LINK获取文档中对应的host侧算子实现文件add_custom.cpp进行参考。
1 2 3 4 5 6 7 8 | ├── framework/tf_plugin // 算子插件实现文件目录,单算子模型文件的生成不依赖算子适配插件,无需关注 ├── op_host // host侧实现文件 │ ├── add_custom_tiling.h // 算子tiling定义文件 │ ├── add_custom.cpp // 算子原型注册、shape推导、信息库、tiling实现等内容文件 │ ├── CMakeLists.txt ├── op_kernel // kernel侧实现文件 │ ├── CMakeLists.txt │ ├── add_custom.cpp // 算子代码实现文件 |
msopst create -i {operator.cpp file} -out {output path} -m {pb file} -q
请将Op_implementation更换为host侧算子的实现文件所在路径。
命令执行成功后,会在当前路径的output目录下生成算子测试用例定义文件:AddCustom_case_timestamp.json。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | [ { "case_name": "Test_OpType_001", "op": "OpType", "input_desc": [ { "format": [], "type": [], "shape": [], "data_distribute": [ "uniform" ], "value_range": [ [ 0.1, 1.0 ] ] } ], "output_desc": [ { "format": [], "type": [], "shape": [] } ] } ] |
参数 |
说明 |
|
---|---|---|
case_name |
- |
必选。 String类型。 测试用例的名称。 |
op |
- |
必选。 String类型。算子的类型。不允许为空。 |
error_threshold |
- |
可选。 配置自定义精度标准,取值为含两个元素的列表:"[threshold1,threshold2]"
若未设置此参数,默认值为:"[0.01,0.05]"。 取值范围为:"[0.0,1.0]"。 说明:
|
st_mode |
- |
可选。 String类型。 ST测试模式,其值为:"ms_python_train",表示Mindspore的算子工程(仅 |
run_torch_api |
- |
可选。 配置torch_api调用算子的接口,其值为:"torch.square",“square”为接口名称,请根据实际情况配置。 |
expect |
- |
可选。 用户期望的测试结果状态。属性支持以下两种类型,默认值为“success”。
在统计结果中,依据STCaseReport中的status和expect是否一致统计,一致则统计至“success count”,不一致则统计至“failed count”。 |
fuzz_impl |
- |
可选,String类型。 若用户需要生成大量测试用例,可利用fuzz测试参数生成脚本辅助生成。此种场景下,用户需要手工添加此字段,配置fuzz测试参数生成脚本的绝对路径或者相对路径:函数名。 说明:
不建议用户调用其它用户目录下的fuzz测试参数生成脚本,以避免提权风险。 |
fuzz_case_num |
- |
可选。 int类型。 在添加了“fuzz_impl”参数的情况下,需要手工添加此字段,配置利用fuzz测试参数生成脚本生成测试用例数量,范围为1~2000。 |
input_desc |
- |
必选。 算子输入描述。 须知:
所有input_desc中参数取值的个数都要一致,否则测试用例生成会失败。 例如:input1的format支持的类型个数2,则input2的format支持的类型个数也需要为2。 同理,所有inputx中的type、shape、data_distribute和value_range的取值个数也需要保持一致。 |
- |
name |
可选。 算子为动态多输入场景时,“name”为必选配置,请配置为算子信息库中“inputx.name”参数的名称+编号,编号从“0”开始,根据输入的个数按照0,1,2......,依次递增。 例如,算子信息文件中指定的输入个数为4个,则input_desc中需要配置4个输入描述,name分别为“xxx0”、"xxx1"、“xxx2”、“xxx3”,其中xxx为输入参数的名称。 动态多输入场景的配置示例可参见若算子的输入个数不确定(动态多输入场景)。 |
- |
format |
必选。 String或者String的一维数组。 输入tensor数据的排布格式,不允许为空。 常见的数据排布格式如下:
|
- |
ori_format |
可选。 String或者String的一维数组,支持以下两种取值: |
- |
type |
必选。 String或者String的一维数组。 输入数据支持的数据类型。
输入数据类型为复数场景的配置示例可参见若算子的输入输出类型为复数。 |
- |
shape |
必选。
需要注意,配置的shape需要与format相匹配。 |
- |
ori_shape |
可选。 若不配置此字段,默认算子实现的shape与原始shape一致。 |
- |
typical_shape |
可选。
|
- |
shape_range |
可选。 |
- |
is_const |
可选。 bool类型。
输入为常量的配置示例可参见若算子的某个输入为常量。 |
- |
data_distribute |
必选。 String或者String的一维数组。 使用哪种数据分布方式生成测试数据,支持的分布方式有:
|
- |
value_range |
必选。 |
- |
value |
可选。 String或者tensor数组。 若用户需要指定输入数据时,可通过增加“value”字段进行配置。有如下两种配置方式:
|
output_desc |
- |
必选。 算子输出描述。 须知:
output_desc中参数取值的个数都要与input_desc一致,否则测试用例生成会失败。 例如:inputx的format支持的类型个数2,则output的format支持的类型个数也需要为2。 |
- |
name |
可选。String类型。 输出参数名称。 算子为动态多输出场景时,“name”为必选配置,请配置为算子信息库中“outputx.name”参数的名称+编号,编号从“0”开始,根据输出的个数按照0,1,2......,依次递增。 例如,算子信息文件中指定的输出个数为4个,则output_desc中需要配置4个输出描述,name分别为“xxx0”、"xxx1"、“xxx2”、“xxx3”,其中xxx为输出参数的名称。 |
- |
format |
必选。 String或者String的一维数组。 输出tensor数据的排布格式,不允许为空。 支持如下数据排布格式:
|
- |
ori_format |
可选。 String或者String的一维数组。
若不配置此字段,默认算子实现的format与原始format相同。 |
- |
type |
必选。 String或者String的一维数组或“fuzz”。 输出数据支持的数据类型。
|
- |
shape |
必选。 |
- |
ori_shape |
可选。 若不配置此字段,默认算子实现的shape与原始shape一致。 |
attr |
- |
可选。 |
- |
name |
若配置attr,则为必选。 String类型。 属性的名称,不为空。 |
- |
type |
若配置attr,则为必选。 String类型。 属性支持的类型。
|
- |
value |
若配置attr,则为必选。 属性值,根据type的不同,属性值不同。
|
calc_expect_func_file |
- |
可选。 String类型。 算子期望数据生成函数对应的文件路径及算子函数名称,如:"/home/teste/test_*.py:function" 其中,/home/teste/test_*.py为算子期望数据生成函数的实现文件,function为对应的函数名称。 须知:
不建议用户调用其它用户目录下的期望数据生成脚本,以避免提权风险。 |
在Python文件中实现算子期望数据生成函数,文件目录和文件名称可自定义,如“/home/test/test_add_st.py”。
例如Add算子的期望数据生成函数实现如下:
1 2 3 | def calc_expect_func(x1, x2, y): res = x1["value"] + x2["value"] return [res, ] |
用户需根据开发的自定义算子完成算子期望数据生成函数。测试用例定义文件中的全部Input、Output、Attr的name作为算子期望数据生成函数的输入参数,若Input是可选输入,请将该输入指定默认值传参。
例如,某算子输入中的x3为可选输入时,定义该算子的期望数据生成函数如下。
1 | def calc_expect_func(x1, x2, x3=None, y=None) |
[ { "case_name":"Test_AddCustom_001", "op": "AddCustom", "calc_expect_func_file": "/home/test/test_add_st.py:calc_expect_func", //配置生成算子期望输出数据的实现文件 "input_desc": [...] ... ... } ]