MindStudio提供了新的ST(System Test)测试框架,可以自动生成测试用例,在真实的硬件环境中,验证算子功能的正确性和计算结果准确性,并生成运行测试报告,包括:
如下图所示。
用户也可以在“Input Nodes Shape”中修改首层输入的shape信息。单击“OK”后,工具会自动根据首层shape信息dump出选择算子的shape信息,生成对应的算子测试用例定义文件。
此文件用于生成测试数据及测试用例,可以参见TBE算子ST测试用例定义文件参数解释进行相关字段的修改。
该功能需要在运行环境中安装第三方框架(PyTorch使用该功能需要在运行环境中安装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/{SoC Version}”文件夹下,命名为OpType_case_timestamp.json。
请勿更改算子测试用例定义文件命名格式,以及请勿将其他文件的以该命名格式保存在算子工程根目录下的“testcases/st/OpType/{SoC Version}”文件夹下,否则会导致文件解析错误。
参数 |
说明 |
---|---|
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文件,文件所在目录为“testcases/st/out/OpType/run/out/test_data/data/st_error_reports”。单个csv文件保存数据的上限为5万行,超过则依次生成新的.csv文件,文件命名如:{case.name}_error_report0.csv。 使用“Generate error report”功能前,需要指定算子期望数据生成函数自定义脚本,请参见3。 |
Enable System Profier |
使能profiling,获取算子在昇腾AI处理器上的性能数据。该功能需要将运行环境中的msprof工具所在路径配置到PATH环境变量中,msprof工具所在路径为:toolkit工具路径下的toolkit/tools/profiler/bin/msprof。 该选项默认关闭,打开情况下会出现下拉框,可下拉选择AI Core性能指标采集项,采集项如下:
|
Host侧运行用户需在deployment中添加,并且该用户必须为HwHiAiUser属组。配置deployment请参见Deployment。
针对Ascend EP,需要在硬件设备的Host侧配置安装组件路径的环境变量。
以Host侧运行用户在~/.bashrc文件中配置runtime或compiler、driver组件的安装路径。若没有配置,请参考以下操作。
# Ascend-cann-toolkit环境变量(请根据实际路径修改)
source $HOME/Ascend/ascend-toolkit/set_env.sh
source ~/.bashrc
在1中运行的窗口中Environment Variables参数进行环境变量配置。
ASCEND_DRIVER_PATH=/usr/local/Ascend/driver; ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/latest; #若远程设备为推理环境: 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>”下生成测试数据和测试代码,并编译出可执行文件,在指定的硬件设备上执行测试用例。运行成功后会打印对比报告及保存运行信息。
max_diff_thd:最大误差阈值,若存在预期结果与真实结果误差超出该阈值,直接判定该测试用例失败。
Index(对比元素序号)、ExpectOut(期望输出)、RealOut(实际输出)、FpDiff(精度误差)、RateDiff(误差比)。
预期结果与真实结果误差小于DiffThd(误差阈值)的数量占比高于PctThd(准确率阈值)则Result(比对结果)为通过,否则失败,同时会打印出PctRlt(实际准确率)。
在1开启“Enable System Profier”开关,配置采集项后才会以表格形式输出system_profiler信息及结果。具体字段含义请参见《性能分析工具使用指南》。
字段 |
说明 |
||
---|---|---|---|
run_cmd |
- |
- |
命令行命令。 |
report_list |
- |
- |
报告列表,该列表中可包含多个测试用例的报告。 |
trace_detail |
- |
运行细节。 |
|
st_case_info |
测试信息,包含如下内容。
|
||
stage_result |
运行各阶段结果信息,包含如下内容。
|
||
case_name |
- |
测试名称。 |
|
status |
- |
测试结果状态,表示运行成功或者失败。 |
|
expect |
- |
期望的测试结果状态,表示期望运行成功或者失败。 |
|
summary |
- |
- |
统计测试用例的结果状态与期望结果状态对比的结果。 |
test case count |
- |
测试用例个数。 |
|
success count |
- |
测试用例的结果状态与期望结果状态一致的个数。 |
|
failed count |
- |
测试用例的结果状态与期望结果状态不一致的个数。 |