【2023 · CANN训练营第一季】高阶班 TIK C++算子端到端测试验证与性能采集
1 测试验证
1.1 环境安装
昇腾社区
https : //www.hiascend.com/ software/cann/community
依赖条件:
- 最新版本的昇腾社区toolit安装包环境,使用root用户默认会安装到/usrilocalVAscand/ascand-toolkitlatest
- 最新版本的昇腾社区Community SDK软件包,解压到Ascend安装目录下/ustrlocallAscend/ascend-toolkitlatest/opens
1.2 UT测试
为TIK C++算子添加UT测试的步骤:
- cann_op_contrib/community/ops中新建用例目录并添加代码实现文件
- 实现文件包含tiling源文件和算子核函数源文件,分别对应op_host目录下的add_tik2_tiling.h和op_kernel下的add_tik2.cpp
- cann_op_contrib/community/tests中新建用例目录并添加代码测试文件
- 测试文件包含算子调用文件和真值脚本生成文件,分别对应着main.cpp和add_tik2.py
3.在cann_op_contrib目录下执行./build.sh -u tik2
1.3 ST测试
ST测试步骤
1.下载gitee生态仓: git clone https://gitee.com/ascend/cann_op_contrib.git
2.设置安装路径: exportASCEND_CUSTOM_PATH=/usr/local/Ascend/ascend-toolkit/latest
3.设置环境变量(昇腾实际安装的位置): source $ASCEND_CUSTOM_PATH/. ./set_env.sh
4.在cann_op_contrib目录下执行: ./pack.sh,将TIK C++算子打包成自定义算子包
5.在cann_op_contrib目录下执行: (cd output;./CAMl_OP_CONTRIB_linux-x86_64.run --install),安装部署自定义算子包
6.在cann_op_contrib目录下执行: (cd community/tests/add_tik2/st;./run_case.sh),运行ST测试用例
注:如果之前安装过算子包,第二步应该先卸载,执行(cd output; . [CAMN_oP _CONTRLB_1inux-x86_64.run --uninstall),另外WumPy版本不高于1.24
为TIK C++算子添加ST测试的步骤:
- cann_op_contrib/community/ops中新建用例目录并添加代码实现文件
- 实现文件包含: host则(op_host) tiling源文件、主机侧算子源文件和kerne侧(op_kernel)算子核函数实现源文件,分别对应op_host目录下的add_tik2_tiling.h、add_tik2.cpp,和op_kernel下的add_tik2.cpp
- cann_op_contrib/community/tests中新建用例目录并添加代码
测试文件
- 测试文件包含算子测试用例定义文件、真值脚本生成文件和测试用例调用脚本,分别对应add_tik2.json,test_add_tik2_data.py
3.在cann_op_contrib目录下执行后续打包算子,安装部署算子包和编译并执行测试用例的操作
2 ST测试验证介绍
2.1 ST实现 - host侧算子
host侧算子实现开发,包括算子原型注册、Shape推导等函数实现与注册、Tiling实现与注册和信息库配置
2.1.1 算子原型注册
算子原型描述了算子的输入输出,属性等信息,算子原型注册用于将算子注册到算子原型库中
2.1.2 Shape推导等函数实现与注册
根据算子的输入张量描述、算子逻辑及算子属性,推理出算子的输出张量描述,包括张量的Shape、数据类型及数据排布格式等信息。这样算子构图准备阶段就可以为所有的张量静态分配内存,避免动态内存分配带来的开销
2.1.3 Tiling实现与注册
计算数据切分过程相关的参数,比如每次计算的数据量大小
2.1.4 信息库配置(根据运行平台进行配置)
算子开发者需要通过配置算子信息库文件,将算子在昇腾A处理器上相关实现信息注册到算子信息库中
2.2 ST测试 - run_case.sh与test_add_tik2_data.py
CANN开发套件包中提供了ST测试工具: msopst,支持生成算子的ST测试用例并在硬件环境中执行·根据算子信息库定义文件(*.ini)生成算子测试用例定义文件(*json),作为算子ST测试用例的输入
·根据算子测试用例定义文件生成ST测试数据及测试用例执行代码,在硬件环境上执行算子测试用例。自动生成运行报表(st report.json)功能,报表记录了测试用例信息及各阶段运行情况
·根据用户定义并配置的算子期望数据生成函数,回显期望算子输出和实际算子输出的对比测试结果
2.2.1 run_case.sh
2.2.2 test_add_tik2_data.py
2.2.3 算子测试用例定义文件
2.2.4 生成测试用例和报告
3 性能采集工具msprof
当使用内核调用符时,会生成相应的二进制可执行文件,可以使用性能采集工具运行NPU模式下生成的可执行文件从而采集TIK C++ 算子在昇腾平台上执行的性能数据
性能采集步骤:
- 设置环境变量(昇腾实际安装的位置): source /usr/local/Ascend/ascend-toolkit/ …/ set_env.sh
- 测试NPU模式下的TIKC++算子,保证其精度正确,生成对应的二进制可执行文件: bash run.sh add_tik2 ascend910 AiCore npu
- 使用msprof工具采集性能,详细的介绍请参考社区文档——性能分析工具
- 使用命令(用户可以根据自身的需要灵活组合性能分析指令):msprof --application=“./add_tik2_npu”–output=“./out”–ai-core=on --aic-metrics=“Pipeltilization”
- 在当前目录会生成out文件夹,在device_0/summary/op_summary_0_1.csv能够看到一些具体的数据
. mte2类型指令(DDR->AICORE搬运类指令)的cycle数在所有指令的cycle数中的占用比