带你掌握如何使用CANN 算子ST测试工具msopst
摘要:本期带您了解如何使用msopst工具。
本文分享自华为云社区《 【CANN文档速递13期】算子ST测试工具【msopst】 》,作者: 昇腾CANN 。
如何获取msopst工具
msopst工具存储在Ascend-cann-toolkit安装目录的“toolkit/python/site-packages/bin”路径下。支持对TBE算子以及AI CPU算子进行ST测试。
CANN软件安装完成并生效环境变量配置脚本后,即可直接使用此工具,您可以在任意路径下执行如下命令查看工具相关参数:
总体使用流程
自定义算子部署到OPP算子库后,开发者可使用msopst工具验证算子在昇腾AI处理器上执行的正确性,总体流程较简单,如下所示:
下面我们分别介绍以上每一个步骤是干什么的?该如何做?
生成测试用例定义文件
测试用例定义文件,顾名思义,就是用来生成测试用例的,其内容包含了测试用例所需的基本信息,例如:测试用例名称,所要测试的算子类型,算子的输入输出描述信息(形状、数据类型、数据排布格式等)、算子属性相关信息(包含属性名称、类型、属性值)、数据生成算法等。以Add算子为例,通过msopst工具生成测试用例定义文件的命令如下:
上述命令执行完成后,会在当前路径的output目录下生成Add算子的测试用例定义文件:Add_case_{timestamp}.json。
当然,您也可以不使用msopst create命令,直接拷贝已有算子的测试用例定义文件进行修改亦可,使用算子信息库生成的优势是会自动填充测试用例定义文件中的相关字段,例如case_name,op,input_desc与output_desc中的name、format、type等。OpType_case_xxx.json文件的模板如下:
配置测试用例定义文件
测试用例定义文件的配置为整个ST测试流程的核心,直接决定了生成的测试用例个数、数据生成算法、测试覆盖率等,下面描述测试用例定义文件的参数含义及配置方法。
输入输出描述配置
输入输出描述信息包含的关键配置如下表所示:
测试用例采用将以上配置进行正交组合的方式生成,如下图所示,format取值为[“ND”,“NCHW”, “NHWC”];type的取值为[“int32”,“float32”];shape的取值范围为[32,16];data_distribute的取值为[“uniform”],value_range的取值为[0.1, 1.0],则生成的测试用例个数为 3 * 2 * 1 * 1 * 1 = 6。
算子属性配置
若算子包含属性,还需要配置如下表所示参数:
大批量生成测试用例
若开发者需要生成大量测试用例,可利用fuzz测试参数生成脚本辅助生成,并在测试用例定义文件( *.json )中配置fuzz脚本路径、所需生成的测试用例数目,同时输入输出描述中相关参数的取值配置为“fuzz”。操作步骤示例如下:
1、配置fuzz测试参数生成脚本,假设脚本命名“fuzz_shape.py”,实现如下所示:
2、配置测试用例定义文件;
3、在测试用例定义文件(*.json)中配置fuzz测试参数生成脚本的路径,所需生成的测试用例个数,并将需要自动生成的字段配置为固定值“fuzz”,如下所示:
定义期望数据生成函数
若用户需要得到实际输出与期望输出的比对结果,可使用Python语言自定义实现期望数据生成函数,并在ST测试用例定义文件中增加此函数入口。例如,Add算子的期望数据生成函数为“/home/test/test_add.py”,实现如下所示:
然后在ST测试用例定义文件中增加“calc_expect_func_file”参数,配置为“期望数据生成函数的文件:函数名”,如下所示:
生成并执行测试用例
配置完相关环境变量后,您就可以通过如下命令执行ST测试用例:
查看执行结果
ST测试用例执行完后,您可以通过打屏信息查看用例执行结果,若下所示,共运行9个用例,9个用例全部执行成功。
开发者也可以查看生成的报表“st_report.json”,此报表中记录了测试结果及各阶段的运行情况,ST测试用例运行异常时,可以基于此信息进行问题定位。
至此,ST测试工具“msopst”的使用全流程已介绍完毕,您是否对此工具有了初步的认知呢?若您需要进行自定义算子的开发,别忘了使用此工具进行算子的ST测试噢~关于此工具的更多使用样例,可参见昇腾社区中的《TBE自定义算子开发指南》或《AI CPU自定义算子开发指南》。 ( http://www.hiascend.com/document?tag=community-developer )
昇腾CANN文档中心致力于为开发者提供更优质的内容和更便捷的开发体验,助力CANN开发者共建AI生态。任何意见和建议都可以在昇腾社区反馈,您的每一份关注都是我们前进的动力。
- 设计模式之状态模式
- 如何实现数据库读一致性
- 我是怎么入行做风控的
- C 11精要:部分语言特性
- 吴恩达来信:人工智能领域的求职小 tips
- EasyCV带你复现更好更快的自监督算法-FastConvMAE
- 某车联网App 通讯协议加密分析(四) Trace Code
- 带你了解CANN的目标检测与识别一站式方案
- EasyNLP玩转文本摘要(新闻标题)生成
- PostgreSQL逻辑复制解密
- 基于 CoreDNS 和 K8s 构建云原生场景下的企业级 DNS
- 循环神经网络(RNN)可是在语音识别、自然语言处理等其他领域中引起了变革!
- 技术分享| 分布式系统中服务注册发现组件的原理及比较
- 利用谷歌地图采集外贸客户的电话和手机号码
- 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样
- 带你掌握如何使用CANN 算子ST测试工具msopst
- 一招教你如何高效批量导入与更新数据
- 一步步搞懂MySQL元数据锁(MDL)
- 你知道如何用 PHP 实现多进程吗?
- KubeSphere 网关的设计与实现(解读)