MindSpore框架算子ST测试用例生成工具目前只支持Atlas 训练系列产品。
通过可执行文件“msopst”进行ST测试,其功能和安装路径如下。
文件名 |
功能 |
路径 |
---|---|---|
msopst |
ST测试工具。 |
CANN软件安装后文件存储路径中的“python/site-packages/bin”。 |
CANN组合包提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。执行命令参考如下,以下示例均为root或非root用户默认安装路径,请以实际安装路径为准。
# 以root用户安装toolkit包 . /usr/local/Ascend/ascend-toolkit/set_env.sh # 以非root用户安装toolkit包 . ${HOME}/Ascend/ascend-toolkit/set_env.sh
export mindspore_op_path=/home/username/AscendProject/operator export PYTHONPATH=${mindspore_op_path}/mindspore/impl:${mindspore_op_path}/op_proto:$PYTHONPATH
mindspore_op_path请修改为MindSpore算子工程目录。
例如,当MindSpore安装在“/usr/local/python3.7.5/lib/python3.7/site-packages/mindspore”时,so文件需要拷贝至“/usr/local/python3.7.5/lib/python3.7/site-packages/mindspore/lib”下。
ST测试用例生成工具的使用方法如下:
./msopst create -i {**_impl.py} -out {output path}
其他可选参数请参见表2。
参数名称 |
参数描述 |
是否必选 |
---|---|---|
create |
用于生成算子测试用例定义文件(*.json)。 |
是 |
-i,--input |
工具的输入。 此处需输入算子实现和算子信息文件路径(.py文件),可配置为绝对路径或者相对路径。 算子实现和算子信息文件(.py文件)实现请参见MindSpore教程>自定义算子。 |
是 |
-out,--output |
生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户具有可读写权限。 若不配置,则默认生成在执行命令的当前路径。 |
否 |
例如进入msopst工具所在目录,执行如下命令:
./msopst create -i OpInfoDefine/square_impl.py -out ./output
-i 参数请修改为square_impl.py文件的实际路径。
命令执行成功后,会在当前路径的output目录下生成算子测试用例定义文件:Square_case_timestamp.json。
算子测试用例定义文件(*.json)样例如下所示:
[ { "case_name": "Test_Square_001", //测试用例名称 "st_mode": "ms_python_train", //MindSpore框架测试模式 "op": "Square", // 算子的Type,唯一 "input_desc": [ // 算子的输入描述 { "name":"x" "type": [ // 输入数据支持的数据类型 "float32", "float16" ], "shape": [], // 输入tensor的shape,用户需要自行修改 "data_distribute": [ "uniform" ], "value_range": [ // 输入数据值的取值范围 [ 0.1, 1.0 ] ] } ], "output_desc": [ // 算子的输出描述 { "name":"y" "type": [ // 输出数据支持的数据类型 "float32", "float16" ], "shape": [] // 输出tensor的shape,用户需要自行修改 } ] } ]
当算子实现和算子信息文件中input参数支持dynamic时,用户可以添加多个“input_desc”字段作为动态输入。
参数 |
说明 |
|
---|---|---|
case_name |
- |
必选。 String类型。 测试用例的名称。 |
st_mode |
- |
必选。 String类型。 ST测试模式,其值为:"ms_python_train",表示Mindspore的算子工程。 |
fuzz_impl |
- |
可选。 String类型。 若用户需要生成大量测试用例,可利用fuzz测试参数生成脚本辅助生成。此种场景下,用户需要手工添加此字段,配置fuzz测试参数生成脚本的绝对路径或者相对路径:函数名。
说明:
不建议用户调用其它用户目录下的fuzz测试参数生成脚本,以避免提权风险。 |
fuzz_case_num |
- |
可选。 int类型。 若添加fuzz_impl参数的情况下,需要手工添加此字段,配置利用fuzz测试参数生成脚本生成测试用例数量,范围为1-2000。 |
op |
- |
必选。 String类型。 算子的类型。 不允许为空。 |
input_desc |
- |
必选。 算子输入描述。
须知:
所有input_desc中参数取值的个数都要一致,否则测试用例生成会失败。 例如:input1的format支持的类型个数2,则input2的format支持的类型个数也需要为2。 同理,所有inputx中的type、shape、data_distribute和value_range的取值个数也需要保持一致。 |
- |
name |
可选。 输入参数名称。 |
- |
type |
必选。 String或者String的一维数组。 输入数据支持的数据类型。
|
- |
shape |
int类型。 一维或者二维数组或“fuzz”。 输入tensor支持的形状或“fuzz”。 |
- |
data_distribute |
必选。 String或者String的一维数组。
使用哪种数据分布方式生成测试数据,支持的分布方式有:
|
- |
value_range |
必选。 int类型或者float类型。 一维或者二维数组或“fuzz”。 取值范围,不能为空。 为[min_value, max_value]且min_value <=max_value。 |
- |
value |
可选。 String或者tensor数组或“fuzz”。
若用户需要指定输入数据时,可通过增加此字段进行配置。有如下两种配置方式:
|
output_desc |
- |
必选。 算子输出描述。
须知:
output_desc中参数取值的个数都要与input_desc一致,否则测试用例生成会失败。 例如:inputx的format支持的类型个数2,则output的format支持的类型个数也需要为2。 |
- |
name |
可选。 String类型。 输入参数名称。 |
- |
type |
必选。 String或者String的一维数组。 输出数据支持的数据类型。
|
- |
shape |
必选。 int类型。 一维或者二维数组或“fuzz”。 输出tensor支持的形状或“fuzz”。 |
attr |
- |
- |
- |
name |
若配置attr,则为必选。 String类型。 属性的名称,不为空。 |
- |
type |
若配置attr,则为必选。 String类型。 属性支持的类型。
|
- |
value |
若配置attr,则为必选,且不允许为null。 String类型。 属性值,根据type的不同,属性值不同。
|
后续执行msopst run xxx命令时,会根据此json文件生成算子测试数据及测试用例,生成的测试用例的个数等于“data_distribute”、“shape”、“type”与“value_range”的取值个数的乘积。
import random
def fuzz_branch(): # 生成测试参数shape值 dim = random.randint(1, 4) x_shape_0 = random.randint(1, 64) x_shape_1 = random.randint(1, 64) x_shape_2 = random.randint(1, 64) x_shape_3 = random.randint(1, 64) if dim == 1: shape = [x_shape_0] if dim == 2: shape = [x_shape_0, x_shape_1] if dim == 3: shape = [x_shape_0, x_shape_1, x_shape_2] if dim == 4: shape = [x_shape_0, x_shape_1, x_shape_2, x_shape_3] # 用字典数据结构返回shape值,将生成的shape值返回给input_desc的x1、x2和output_desc的y的shape参数。其中x1、x2、y测试用例定义文件输入、输出的name。 return {"input_desc": {"x": {"shape": shape}}, "output_desc": {"y": {"shape": shape}}}
[ { "case_name": "Test_Square_001", //测试用例名称 "st_mode": "ms_python_train", //MindSpore框架测试模式 "op": "Square", // 算子的Type,唯一 "fuzz_impl": "./fuzz_shape.py:fuzz_branch", //配置fuzz测试参数生成脚本路径:函数名 "fuzz_case_num": 2000, //配置自动生成参数数量值为1-2000 "input_desc": [ // 算子的输入描述 { //算子的第一个输入 "name": "x", "type": [ "float16" //删除多余值,保留一个与自动生成shape参数相匹配的值 ], "shape":"fuzz", // 修改自定生成参数的值为“fuzz” "data_distribute": [ "uniform" ], "value_range": [ [ 0.1, 1.0 ] ], "output_desc": [ //算子的输出描述,必选,含义同输入tensor描述 { "name": "y", "type": [ "float16" //删除多余值,保留一个与自动生成shape参数相匹配的值 ], "shape":"fuzz", // 修改自定生成参数的值为“fuzz” } ]
进入msopst工具所在目录,执行如下命令生成测试用例并运行,参数说明请参见表4。
./msopst run -i {**.json} -soc {Soc Version} -out {output path}
参数名称 |
参数描述 |
是否必选 |
---|---|---|
run |
用于执行算子网络的AscendCL测试用例。 |
是 |
-i,--input |
工具的输入。 此处需要输入算子测试用例定义文件(*.json)的路径,可配置为绝对路径或者相对路径。 此处的json文件为执行msopst create命令后的输出,算子测试用例定义文件的详细说明请参见表3。 |
是 |
-soc,--soc_version |
此参数仅适用于输入命令为run时的场景。 配置为昇腾AI处理器的类型。
说明:
如果无法确定具体的<soc_version>,则在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy。 |
是 |
-out,--output |
生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户具有可读写权限。 若不配置,则默认生成在执行命令的当前路径。 |
否 |
-c,--case_name |
此参数仅适用于输入命令为run时的场景。
|
否 |
-d,--device_id |
设备ID,设置运行ST测试的芯片ID。用户根据使用的AI芯片ID填写。 若未设置此参数,默认为:0。 |
否 |
例如进入msopst工具所在目录,执行如下命令:
./msopst run -i xx/Square_case_timestamp.json -soc {Soc Version} -out ./output
-i 需修改为Square_case_timestamp.json的实际路径。
{time_stamp} ├── run // 测试用例执行相关文件存储目录 │ ├── out │ └── test_data //测试数据相关文件存储目录 │ ├── CMakeLists.txt │ ├── data //构造的测试数据 │ ├── expect //期望生成数据,目前为空 │ └── Test_xxxx.bin //测试数据的二进制文件 ├── src │ ├── CMakeLists.txt │ ├── kernel_meta │ ├── xxx.info │ ├── xxx.json │ └── xxx.o │ ├──pycache │ └── xxx.pyc │ ├── pytest.ini //pytest配置 │ ├── test_{op_name}.py //用例测试脚本