MindStudio提供了新的ST(System Test)测试框架,可以自动生成测试用例,在真实的硬件环境中,验证算子功能的正确性和计算结果准确性,并生成运行测试报告,包括:
用户也可以在“Input Nodes Shape”中修改首层输入的shape信息。单击“OK”后,工具会自动根据首层shape信息dump出选择算子的shape信息,生成对应的算子测试用例定义文件。
此文件用于生成测试数据及测试用例,可以参见AI CPU算子ST测试用例定义文件参数解释进行相关字段的修改。
该功能需要在运行环境中安装TensorFlow框架和onnx库。若为Windows操作系统则需要在Windsows本地安装TensorFlow框架和onnx库。
算子期望数据生成函数需要开发者使用Python语言自行实现,用于在CPU上运行生成标杆数据。例如,开发者可以使用numpy等接口实现与自定义算子功能相同的函数。标杆数据用来与自定义算子生成数据进行对比,根据对比结果确定自定义算子精度。算子期望数据生成函数用python语言实现,在一个python文件中可以实现多个算子期望数据生成函数。该函数的输入、输出、属性与自定义算子的输入、输出、属性的Format、Type、Shape保持一致。
在算子测试用例文件中配置算子期望数据生成函数。有两种场景,分别为“Design”视图和“Text”视图下进行配置。
“Script Function”中可以输入算子期望数据生成函数的函数名,也可以为空。
"calc_expect_func_file": "/home/teste/test_*.py:function", //配置期望算子文件
其中,/home/teste/test_*.py为算子期望数据生成函数的实现文件,function为对应的函数名称。算子期望数据生成函数文件路径和函数名称用冒号隔开。
示例:test_add.py文件为add算子期望数据生成文件,函数实现如下:
def calc_expect_func(input_x, input_y, out): res = input_x["value"] + input_y["value"] return [res, ]
用户需根据开发的自定义算子完成算子期望数据生成函数。测试用例定义文件中的全部Input、Output、Attr的name作为算子期望数据生成函数的输入参数。
import numpy as np
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随机生成x1、x2的value fuzz_value_x1 = np.random.randint(1, 10, size=shape) fuzz_value_x2 = np.random.randint(1, 10, size=shape) # 用字典数据结构返回shape值,将生成的shape值返回给input_desc的x1、x2和output_desc的y的shape参数。其中x1、x2、y测试用例定义文件输入、输出的name。 return {"input_desc": {"x1": {"shape": shape,"value": fuzz_value_x1}, "x2": {"shape": shape,"value": fuzz_value_x2}}, "output_desc": {"y": {"shape": shape}}}
此时显示K-Level Test Cases配置项,包含Fuzz Script Path和Fuzz Case Num选项。
算子测试用例定义文件存储目录为算子工程根目录下的“testcases/st/OpType/aicpu_kernel”文件夹下,命名为OpType_case_timestamp.json
请勿更改算子测试用例定义文件命名格式和将其他文件的以该命名格式保存在算子工程根目录下的“testcases/st/OpType/aicpu_kernel”文件夹下。否则会导致文件解析错误。
参数 |
说明 |
---|---|
Name |
运行配置名称,用户可以自定义。 |
Test Type |
选择st_cases 。 |
Execute Mode |
|
Deployment |
当Execute Mode选择Remote Execute时,deployment功能,详细请参见Deployment,可以将指定项目中的文件、文件夹同步到远程指定机器的指定目录。 |
CANN Machine |
CANN工具所在设备deployment信息。
说明:
该参数仅支持Windows操作系统。 |
Environment Variables |
勾选Instead system environment variables可以显示系统环境变量。 |
Operator Name |
选择需要运行的算子。 |
SoC Version |
配置 昇腾AI处理器的类型。
说明:
昇腾AI处理器类型为Atlas 推理系列产品系列时,请用户根据实际情况选择具体的类型。 |
Executable File Name |
下拉选择需要执行的测试用例定义文件。 若对AI CPU算子进行ST测试,测试用例文件前有(AI CPU)标识。 |
Toolchain |
工具链配置器,根据已安装的CANN包预置架构一致的自定义Toolchain,支持本地和远程编译功能。 可单击“Manage toolchains……”自定义配置Toolchain,配置详情请参见Toolchains。 |
Case Names |
选择运行的Case Name。
说明:
默认全选所有用例,可以去除勾选部分不需要运行的用例。 |
Enable Auto Build&Deploy |
选择是否在ST运行过程中执行编译和部署。 |
Advanced Options |
高级选项。 |
ATC Log Level |
选择ATC 日志级别。
|
Precision Mode |
精度模式。
|
Device Id |
设备ID,设置运行ST测试的芯片ID。用户根据使用的AI芯片ID填写。 |
Error Threshold |
配置自定义精度标准,取值为含两个元素的列表:[val1,val2]
取值范围为[0.0,1.0]。 |
Generate Error Report |
生成比对不一致数据的报表。 该选项默认开启,针对比对失败的用例,将算子期望数据与实际用例执行结果不一致的数据保存在{case.name}_error_report.csv文件中。使用“Generate error report”功能前,需要指定算子期望数据生成函数自定义脚本,请参见3。 |
Host侧运行用户需在deployment中添加,并且该用户必须为HwHiAiUser属组。配置deployment请参见Deployment。
针对Ascend EP,需要在硬件设备的Host侧配置安装组件路径的环境变量。
# Ascend-cann-toolkit环境变量(请根据实际路径修改)
source $HOME/Ascend/ascend-toolkit/set_env.sh
source ~/.bashrc
在运行ST测试用例中运行的窗口中Environment Variables参数进行环境变量配置。
ASCEND_DRIVER_PATH=/usr/local/Ascend/driver; ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/latest; ASCEND_AICPU_PATH=${ASCEND_HOME}/<target architecture>-linux; 若远程设备为推理环境: LD_LIBRARY_PATH=${ASCEND_DRIVER_PATH}/lib64:${ASCEND_HOME}/lib64:$LD_LIBRARY_PATH; 若远程设备为训练环境: LD_LIBRARY_PATH=${ASCEND_DRIVER_PATH}/lib64/driver:${ASCEND_DRIVER_PATH}/lib64/common:${ASCEND_HOME}/lib64:$LD_LIBRARY_PATH;
请根据driver和CANN的实际安装路径,远程操作系统的使用架构修改环境变量内容。
分别在Name中输入环境变量名称,在Value中输入环境变量值。
MindStudio会根据算子测试用例定义文件在算子根目录“testcases/st/out/<operator name>”下生成测试数据和测试代码,并编译出可执行文件,在指定的硬件设备上执行测试用例。运行成功后会打印对比报告及保存运行信息。
字段 |
说明 |
||
---|---|---|---|
run_cmd |
- |
- |
命令行命令。 |
report_list |
- |
- |
报告列表,该列表中可包含多个测试用例的报告。 |
trace_detail |
- |
运行细节。 |
|
st_case_info |
测试信息,包含如下内容。
|
||
stage_result |
运行各阶段结果信息,包含如下内容。
|
||
case_name |
- |
测试名称。 |
|
status |
- |
测试结果状态,表示运行成功或者失败。 |
|
expect |
- |
期望的测试结果状态,表示期望运行成功或者失败。 |
|
summary |
- |
- |
统计测试用例的结果状态与期望结果状态对比的结果。 |
test case count |
- |
测试用例个数。 |
|
success count |
- |
测试用例的结果状态与期望结果状态一致的个数。 |
|
failed count |
- |
测试用例的结果状态与期望结果状态不一致的个数。 |