nncase icon indicating copy to clipboard operation
nncase copied to clipboard

分别使用nncase1.6和nncase0.2beta4版本编译tflite,在k210上跑通,但是nncase1.6的kmodel比nncase0.2beta4的kmodel慢2倍多

Open wei8171023 opened this issue 2 years ago • 3 comments

Describe the bug 分别使用nncase1.6和nncase0.2beta4版本编译tflite,在k210上都能跑通, 但是nncase1.6的kmodel耗时约为400ms,而nncase0.2beta4的kmodel大约150ms。

To Reproduce 为什么新版本的模型的运行时间会这么长呢?

Origin model and code 原始tflite模型为MobileFaceNet.tflite

Environment (please complete the following information):

  • OS: Ubuntu20.04]
  • nncase 1.6/0.2beta4
  • DL Framework TensorFlow1.14

Additional context nncase1.6使用的编译转化脚本:tflite2kmodel.py nncase0.2beta使用的编译命令: \ncc.exe compile .\Models\MobileFaceNet.tflite MobileFaceNet.kmodel -i tflite -o kmodel -t k210 --inference-type uint8 --dataset .\datasets\face_recognition_images --input-mean 127.5 --input-std 128 --input-type uint8

wei8171023 avatar May 17 '22 06:05 wei8171023

同问呀

ptklx avatar Jun 21 '22 03:06 ptklx

  • [ ] nncase v1 缺少kpu 调用后的自动transpose

    1. v0.2的时候并没有对输入layout进行选择, 如果是tflite模型,本身输入为nhwc的话,都会改成nchw的形式.
    2. 但是v1之后可选input layout会导致添加额外的transpose, 同时这里还不能打开pre process选项,打开之后会添加额外的sub div节点, 实际上应该是把min std参数透传到后面的量化节点. (这个问题比较麻烦, 除非是内部人员, 外部的用户会自然的认为需要加前处理.)
  • [x] nncase V1 pad多出了dequant节点

    1. v0.2的时候从fake kpu conv2d lower下去的时候就没有显式的dequant + pad, 但是pad 之后还是有quant节点的.
    2. v1 的时候行为不一致.

解决方案: 1. 因为dequat + pad 的motion没有被其他地方使用过, 所以直接改成老的方式进行匹配, 并且只添加在k210中.

  • [ ] nncase V1 没有生产quantize binary
    1. v0.2 的时候会把左右先进行look up 1d,然后重新quant后进行quant binary
    2. v1的时候会先dequant到f32, 做完binary之后再quant. 

zhen8838 avatar Jul 18 '22 03:07 zhen8838

@wei8171023 1.6版本你跑的是510的么

curioyang avatar Jul 21 '22 08:07 curioyang

  • [ ] nncase v1 缺少kpu 调用后的自动transpose

    1. v0.2的时候并没有对输入layout进行选择, 如果是tflite模型,本身输入为nhwc的话,都会改成nchw的形式.
    2. 但是v1之后可选input layout会导致添加额外的transpose, 同时这里还不能打开pre process选项,打开之后会添加额外的sub div节点, 实际上应该是把min std参数透传到后面的量化节点. (这个问题比较麻烦, 除非是内部人员, 外部的用户会自然的认为需要加前处理.)
  • [ ] nncase V1 pad多出了dequant节点

    1. v0.2的时候从fake kpu conv2d lower下去的时候就没有显式的dequant + pad, 但是pad 之后还是有quant节点的.
    2. v1 的时候行为不一致.

解决方案: 1. 因为dequat + pad 的motion没有被其他地方使用过, 所以直接改成老的方式进行匹配, 并且只添加在k210中.

  • [ ] nncase V1 没有生产quantize binary

    1. v0.2 的时候会把左右先进行look up 1d,然后重新quant后进行quant binary
    2. v1的时候会先dequant到f32, 做完binary之后再quant. 

没太明白你说的是什么意思,最终的解决方案是改用nncase0.2老版本吗?

wei8171023 avatar Nov 19 '22 17:11 wei8171023

@wei8171023 1.6版本你跑的是510的么

K210

wei8171023 avatar Nov 19 '22 17:11 wei8171023