算子运行验证
算子编译
对算子代码进行编译,生成算子的二进制文件及算子描述文件。
- 算子编译依赖DDK的版本号,所以编译算子前需要获取当前使用的DDK的版本号。
在“$HOME/tools/che/ddk/ddk/ddk_info”文件中查看DDK版本号。
如图12-8所示,VERSION字段即为当前DDK版本。
- 执行如下命令设置版本号信息、编译算子。
- 在customop_te/operator目录下执行如下命令进入python交互模式。
python
- 在python交互模式下依次执行如下命令设置DDK的版本号。
from topi.cce import te_set_version
import subprocess
te_set_version("1.3.T18.B850")
执行示例如图12-9所示。
- 执行如下命令编译reduction.py文件,生成算子二进制文件与描述文件。
subprocess.call("python reduction.py",shell=True)
图12-10 编译算子文件 - 退出python交互模式。
quit(0)
- 在customop_te/operator目录下执行如下命令进入python交互模式。
- 算子编译完成后,会在当前operator目录下生成kernel_meta文件夹,kernel_meta文件夹下为编译生成的算子二进制文件*.o文件(运行目标为AI Core的算子)或者*.so文件(运行目标为AI CPU的算子)及算子描述文件*.json文件。
- *.o或者*.so是算子的二进制文件。
- .json文件是对应的算子描述文件,用于定义算子属性及运行时所需要的资源。
json文件解析如下所示:
{ "binFileName":"Reduction", //生成的算子的二进制文件名称 "binFileSuffix":".o", //生成的算子的二进制文件后缀,运行目标为AI CPU时后缀为".so" "blockDim":1, //计算时用到的AI Core的数量 "kernelName":"Reduction__kernel0", //算子的kernel函数名 "magic":"RT_DEV_BINARY_MAGIC_ELF", //代表算子运行目标为AI Core,若magic值为RT_DEV_BINARY_MAGIC_ELF_AICPU,代表运行目标是AI CPU "sha256":"d5158df2ff2e64743eec7f527ddd9078b99c1d670f5adbd8b789224657ab0f91" //对.o文件进行加密得到的值 }
构造输入数据文件
运行单算子需要构造算子输入数据,并以二进制格式保存到算子工程下。
- 以DDK安装用户进入自定义算子工程的算子代码目录下。
cd $HOME/tools/projects/customop_te/operator/
- 执行样例数据生成脚本,生成reduction算子的样例数据文件。
python data_gen.py reduction
在算子工程中会生成如图12-11所示数据文件。
数据文件说明如表12-7所示。
表12-7 数据文件说明数据文件
说明
Reduction_input_2_3_4_sum_axis_1.data
reduction算子的二进制格式输入数据文件。
Reduction_input_2_3_4_sum_axis_1.txt
将reduction算子的二进制格式文件以txt文件的方式显示出来,方便用户查看结果。
Reduction_output_2_3_4_sum_axis_1.data
reduction算子二进制格式输出数据验证文件,用于验证算子运行后的输出结果是否正确。
Reduction_output_2_3_4_sum_axis_1.txt
将reduction算子的二进制格式输出数据文件以txt文件的方式显示出来,方便用户查看结果。
运行单算子
- 在DDK 样例customop_runner中生成单算子编译二进制文件。
- 给customop_runner工程样例赋予写权限。
chmod -R +w $HOME/tools/che/ddk/ddk/sample/customop/customop_runner/
- 进入DDK样例customop_runner工程的build目录。
cd $HOME/tools/che/ddk/ddk/sample/customop/customop_runner/build
- 设置DDK_PATH的环境变量。
export DDK_PATH=$HOME/tools/che/ddk/ddk
- 执行如下命令生成Makefile文件。
- 对于Atlas 200 DK开发者板环境,执行如下命令。
cmake -Dtarget=OI .
- 对于设备类型为ASIC的环境,执行如下命令。
cmake .
- 对于Atlas 200 DK开发者板环境,执行如下命令。
- 执行make命令,编译生成二进制文件。
make
在 “$HOME/tools/che/ddk/ddk/sample/customop/customop_runner/out/”目录下会生成可执行文件main和动态库libcustom_engine.so
- 给customop_runner工程样例赋予写权限。
- 把out目录拷贝到TE自定义算子工程目录。
cp -rf $HOME/tools/che/ddk/ddk/sample/customop/customop_runner/out $HOME/tools/projects/customop_te/
- 配置输入数据、输出数据及验证描述文件。
进入TE自定义算子工程目录中的out文件夹。
cd $HOME/tools/projects/customop_te/out- 在input.txt文件中配置输入数据文件路径及文件名。
例如:
dataPath=../operator/Reduction_input_2_3_4_sum_axis_1.data
如果自定义算子有多个输入数据,需要自定义多个输入数据的txt文件,例如input1.txt、input2.txt等,分别按照input.txt的格式进行定义。
- 在output.txt中配置输出数据的相关信息
例如:
size=4 dataPath=./output/out0.data dtype=1
- size:预期的输出数据文件大小,单位字节。
- dataPath:输出数据的路径及文件名。
- dtype:输出数据类型,其中1代表float16,2代表float32。
- 在expect.txt文件中配置期望生成数据的路径及文件名。
例如:
dataPath=../operator/Reduction_output_2_3_4_sum_axis_1.data
- 在input.txt文件中配置输入数据文件路径及文件名。
- 将operator文件夹与out文件夹以HwHiAiUser用户拷贝到开发者板或者ASIC设备的Host侧,operator与out文件夹应放置在同一目录下。
例如拷贝到“/home/HwHiAiUser/projects”目录下。
- 运行算子
以HwHiAiUser用户登录开发者板或者ASIC类型设备的Host侧,并进入out目录, 例如“/home/HwHiAiUser/projects/out” 。
- 在当前目录下创建output文件夹,用于存储生成的数据文件。此文件路径及名称为output.txt文件中定义的。
mkdir output
- 执行如下命令为main文件添加可执行权限。
chmod +x main
- 执行如下命令,运行单算子并进行算子比对。
./main -i input.txt -o output.txt -e expect.txt -b ../operator/kernel_meta/Reduction.o -p 0.2 -d 0.2 -k Reduction__kernel0 -t 0
其中:
- -i:输入数据配置文件,配置了输入数据的路径及文件名。
如果自定义算子有多个输入数据,需要自定义多个输入数据的txt文件,例如input1.txt、input2.txt等,分别按照input.txt的格式进行定义。
- -o:输出数据配置文件,配置了输出数据的大小、路径及文件名,输出数据的类型。
- -e:期望数据配置文件,配置了期望输出数据的路径及文件名,用于做结果比对。
- -b:算子实现的二进制文件*.o(运行目标为AI Core的算子)或者*.so(运行目标为AI CPU的算子)。
- -p:精度偏差,表示数据相对误差的允许范围,取值为[0,1),精度偏差越小表示精度越高。
- -d:统计偏差,整个数据集中精度偏差不满足门限的数据量占比,数值范围(0,1),统计偏差越小表示精度越高。
- -k:核函数名称,TE算子的核函数名称需要与.json文件中的kernelName保持一致;C++算子的内核名称需要与算子在Framework注册的opetype的名称保持一致。
- -t:有三种取值,0代表TE_AI Core算子,1代表TE_AI CPU算子,2代表C++的自定义算子(AI CPU算子)。
对于TE算子,是运行在AI Core上还是运行在AI CPU上可以通过算子编译完成后生成的**.json文件中的“magic”参数值进行查看。
执行成功后,会在当前目录的output文件夹下会生成名称为out0.data结果文件及名称为vertifyResult.txt的验证数据比对结果文件。
vertifyResult.txt文件样例如下,代表实际输出数据与期望输出数据内容比对一致。
Output file ./output/out0.data compare result true
- -i:输入数据配置文件,配置了输入数据的路径及文件名。
- 在当前目录下创建output文件夹,用于存储生成的数据文件。此文件路径及名称为output.txt文件中定义的。