运行单算子
- 在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文件中定义的。