使用cmake编译时,build目录下的产物也包含测试使用的工具集,下面逐项说明。

MNNV2Basic.out

功能

测试性能、输出结果,可检查与Caffe / Tensorflow的预期结果是否匹配。
注意:对非CPU后端来说,只有总耗时是准确的,单个op耗时和op耗时占比都是不准确的

参数

  1. ./MNNV2Basic.out temp.mnn 10 0 0 4 1x3x224x224
  • 第一个参数指定 待测试模型的二进制文件。
  • 第二个参数指定 性能测试的循环次数,10就表示循环推理10次。
  • 第三个参数指定 是否输出推理中间结果,0为不输出,1为只输出每个算子的输出结果({opname}.txt),2为输出每个算子的输入(Input{op_name}.txt)和输出({op_name}.txt)结果; 默认输出当前目录的output目录下(使用工具之前要自己建好output目录)。
  • 第四个参数指定 执行推理的计算设备,有效值为 0(CPU)、1(Metal)、2(CUDA)、3(OpenCL)、6(OpenGL),7(Vulkan) ,9 (TensorRT)
  • 第五个参数为线程数,默认为4,仅对CPU有效
  • 第六个参数指定 输入tensor的大小,一般不需要指定。
  • 其他

默认输入与输出

只支持单一输入、单一输出。输入为运行目录下的input_0.txt;输出为推理完成后的第一个输出tensor,转换为文本后,输出到output.txt中。

ModuleBasic.out

功能

类似 MNNV2Basic.out ,对于带控制流模型,或者多输入多输出的模型,建议采用这个工具

参数

./ModuleBasic.out ${test.mnn} ${Dir} [dump] [forwardType] [runLoops] [numberThread] [precision] [cacheFile]

  • 第一个参数指定 待测试模型的二进制文件。
  • 第二个参数指定 输入输出信息文件夹,可使用 fastTestOnnx.py / fastTestTf.py / fastTestTflite.py 等脚本生成,参考模型转换的正确性校验部分。
  • 第三个参数指定 是否输出推理中间结果,0为不输出,1为输出每个算子的输出结果({op_name}.txt), 默认输出当前目录的output目录下(使用工具之前要自己建好output目录)。
  • 第四个参数指定 执行推理的计算设备,有效值为 0(CPU)、1(Metal)、2(CUDA)、3(OpenCL)、6(OpenGL),7(Vulkan) ,9 (TensorRT)
  • 第五个参数指定性能测试的循环次数默认为 0 ,即不做性能测试
  • 第六个参数为线程数或GPU的mode,默认为1
  • 第七个参数指定精度类似,0 为 normal, 1 为high ,2 为 low。

    默认输出

  • 在当前目录 output 文件夹下,依次打印输出为 0.txt , 1.txt , 2.txt , etc

Example:

  1. ./ModuleBasic.out transformer.mnn tr 0 0 10
  2. Test transformer.mnn from input info: tr
  3. NmtModel/Placeholder
  4. NmtModel/Placeholder_1
  5. output: NmtModel/transpose_2
  6. Use extra forward type: 0
  7. NmtModel/transpose_2: (7, 1, 1, )
  8. Write NmtModel/transpose_2 output to output/0.txt
  9. Avg= 30.970499 ms, min= 30.288002 ms, max= 33.014000 ms

SequenceModuleTest.out

功能

类似 ModuleBasic.out ,适用于多份输入输出数据的校验

参数

./SequenceModuleTest.out ${test.mnn} [forwardType] [shapeMutable] ${Dir} ${Dir1} ……

  • 第一个参数指定 待测试模型的二进制文件。
  • 第三个参数指定 执行推理的计算设备,有效值为 0(CPU)、1(Metal)、2(CUDA)、3(OpenCL)、6(OpenGL),7(Vulkan) ,9 (TensorRT)
  • 第四个参数指定 输入输出信息文件夹,可使用 fastTestOnnx.py / fastTestTf.py / fastTestTflite.py 等脚本生成,参考模型转换的正确性校验部分。
  • 后续参数类型同第四个参数,指定需要测试的其他文件夹

    示例

    ./SequenceModuleTest.out transformer.mnn 0 1 tr tr1 tr2 tr3 tr4 > error.txt

然后打开 error.txt 观察是否出现结果错误

checkFile.out

功能

检查两个tensor文本文件是否一致。

参数

  1. ./checkFile.out XXX.txt YYY.txt 0.1
  • 0.1 表示绝对阈值,不输入则为 0.0001
  • 比对值超过绝对阈值时,会直接输出到控制台

checkDir.out

功能

比对两个文件夹下同名文件是否一致。

参数

  1. ./checkDir.out output android_output 1
  • 1 表示绝对阈值,不输入则为 0.0001
  • 比对值超过绝对阈值时,会直接输出到控制台

timeProfile.out

功能

Op 总耗时统计工具和模型运算量估计。
注意:不要用这个工具测非CPU后端的性能,需要的话请用MNNV2Basic工具

参数

  1. ./timeProfile.out temp.mnn 10 0 1x3x448x448 4
  • 第一个参数 指定模型文件名
  • 第二个参数 指定运行次数,默认 100
  • 第三个参数 指定 执行推理的计算设备,有效值为 0(浮点 CPU)、1(Metal)、3(浮点OpenCL)、6(OpenGL),7(Vulkan)。(当执行推理的计算设备不为 CPU 时,Op 平均耗时和耗时占比可能不准)
  • 第四个参数 指定输入大小,可不设
  • 第五个参数 指定线程数,可不设,默认为 4

输出

  • 第一列为 Op类型
  • 第二列为 平均耗时
  • 第三列为 耗时占比
  • 示例:
    1. Node Type Avg(ms) % Called times
    2. Softmax 0.018100 0.022775 1.000000
    3. Pooling 0.080800 0.101671 1.000000
    4. ConvolutionDepthwise 14.968399 18.834826 13.000000
    5. Convolution 64.404617 81.040726 15.000000
    6. total time : 79.471924 ms, total mflops : 2271.889404

backendTest.out

功能

这个工具可以对比指定计算设备和CPU执行推理的结果。

参数

  1. ./backendTest.out temp.mnn 3 0.15 1
  • 该工具默认读取当前目录下的 input_0.txt 作为输入
  • 第一个参数:模型文件
  • 第二个参数:执行推理的计算设备
  • 第三个参数:误差容忍率
  • 第四个参数:精度,0 表示 normal ,1 为high,2 为low

Android 中使用

先编译相关的库和可执行文件,然后 push 到 Android 手机上,用 adb 执行命令,参考 project/android/testCommon.sh
参考方式:
1、cd project/android
2、mkdir build_64
3、cd build_64 && ../build_64.sh
4、../updateTest.sh
5、../testCommon.sh ./backendTest.out temp.mnn 3 0.15 1