Code Monkey home page Code Monkey logo

Comments (6)

hong19860320 avatar hong19860320 commented on June 7, 2024

看起来是需要通过 android_nnapi 部署量化模型?从错误日志看,应该不是一个全量化模型,导致子图中仍存在 calib 算子,原因可能是部分算子的量化信息缺失,之前有跑通过 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/android_nnapi.html 文档提供的模型吗?

from paddle-lite.

SEIREIECHO avatar SEIREIECHO commented on June 7, 2024

和上面提问的是同一个人

推理程序跑过mobilenet_v1_int8_224_per_layer,可以正常推理
模型转换是用的 onnx ----x2paddle---> paddle ----paddleslim-----> paddle(quant) -----paddleliteopt----> paddlelite 路线
量化使用的是PostTrainingQuantization,具体参数如下
PostTrainingQuantization(
executor=exe,
model_dir=os.path.join(model_path, "inference_model"),
model_filename='model.pdmodel',
params_filename='model.pdiparams',
data_loader=loader,
algo='hist',
round_type='round',
hist_percent=0.9999,
weight_bits=8,
activation_bits=8,
is_full_quantize=True,
activation_quantize_type='range_abs_max',
weight_quantize_type='channel_wise_abs_max',
quantizable_op_type=[
"conv2d", "depthwise_conv2d", "conv2d_transpose", "elementwise_add",
"mul", "matmul", "matmul_v2"
],
optimize_model=False,
onnx_format=True,
batch_nums=calib_num)

同样的转换和推理代码转另一个模型可以正常推理

推理代码是仿照PaddleLite-generic-demo.tar.gz 里面的例子做的,用了libandroid_nnapi.so,libnnadapter.so,libpaddle_full_api_shared.so,libc++_shared.so, 从这个demo压缩包里提供的

模型转换环境使用 pip安装,具体如下
paddle-bfloat 0.1.7
paddlelite 2.12
paddlepaddle-gpu 2.4.2.post112
paddleslim 2.4.0
x2paddle 1.4.1

有几个疑问:

  1. paddle里 全量化模型 和 非全量化模型 区别在哪里,如何区分是不是全量化模型
  2. 调用android_nnapi做推理后端时,如何确认android_nnapi调用的具体实现是哪个(如何判断是否用了推理加速硬件而非cpu原生实现)
  3. 尝试使用https://www.paddlepaddle.org.cn/lite/v2.12/quick_start/release_lib.html 页面提供的opt工具代替pip安装的paddleliteopt工具进行模型转换,那个能跑通的模型在转换时会报 [F 12/13 15:56: 3.251 ...ptimizer/mir/type_precision_cast_pass.cc:326 AddCastInst] Check failed: is_found: Can't find a 'calib' kernel to trans: Tensor<any,int8_t,NCHW,0>:bilinear_interp_v2_0.tmp_0 -> Tensor<arm,uint8_t,NCHW,0>:arg_max导致转换失败,想确认一下转换工具,推理库之间版本和兼容关系

from paddle-lite.

SEIREIECHO avatar SEIREIECHO commented on June 7, 2024

看起来是需要通过 android_nnapi 部署量化模型?从错误日志看,应该不是一个全量化模型,导致子图中仍存在 calib 算子,原因可能是部分算子的量化信息缺失,之前有跑通过 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/android_nnapi.html 文档提供的模型吗?

通过把模型保存为protobuf用netron打开确实发现子图里有calib算子,子图结构大概是这样的
image
paddle好像会把conv的weight和bias分开变成 无bias的Conv + ElementwiseAdd,这个calib算子出现在每个output之前一个conv层被切开的地方,模型一共18个output,所以日志里不支持DEQUANTIZE算子出现了18次
想问一下为什么这个地方会有calib算子,有什么解决办法吗

from paddle-lite.

hong19860320 avatar hong19860320 commented on June 7, 2024

看起来是需要通过 android_nnapi 部署量化模型?从错误日志看,应该不是一个全量化模型,导致子图中仍存在 calib 算子,原因可能是部分算子的量化信息缺失,之前有跑通过 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/android_nnapi.html 文档提供的模型吗?

通过把模型保存为protobuf用netron打开确实发现子图里有calib算子,子图结构大概是这样的 image paddle好像会把conv的weight和bias分开变成 无bias的Conv + ElementwiseAdd,这个calib算子出现在每个output之前一个conv层被切开的地方,模型一共18个output,所以日志里不支持DEQUANTIZE算子出现了18次 想问一下为什么这个地方会有calib算子,有什么解决办法吗

嗯,不应该在 conv2d+add 之间插入 calib 算子的,你把 PaddleSlim 产出的 Paddle 模型上传一下,我看看。

from paddle-lite.

SEIREIECHO avatar SEIREIECHO commented on June 7, 2024

看起来是需要通过 android_nnapi 部署量化模型?从错误日志看,应该不是一个全量化模型,导致子图中仍存在 calib 算子,原因可能是部分算子的量化信息缺失,之前有跑通过 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/android_nnapi.html 文档提供的模型吗?

通过把模型保存为protobuf用netron打开确实发现子图里有calib算子,子图结构大概是这样的 image paddle好像会把conv的weight和bias分开变成 无bias的Conv + ElementwiseAdd,这个calib算子出现在每个output之前一个conv层被切开的地方,模型一共18个output,所以日志里不支持DEQUANTIZE算子出现了18次 想问一下为什么这个地方会有calib算子,有什么解决办法吗

嗯,不应该在 conv2d+add 之间插入 calib 算子的,你把 PaddleSlim 产出的 Paddle 模型上传一下,我看看。

已经解决了,问题出在PostTrainingQuantization里设置了onnx_format=True, 改成False就好了

from paddle-lite.

hong19860320 avatar hong19860320 commented on June 7, 2024

看起来是需要通过 android_nnapi 部署量化模型?从错误日志看,应该不是一个全量化模型,导致子图中仍存在 calib 算子,原因可能是部分算子的量化信息缺失,之前有跑通过 https://www.paddlepaddle.org.cn/lite/v2.12/demo_guides/android_nnapi.html 文档提供的模型吗?

通过把模型保存为protobuf用netron打开确实发现子图里有calib算子,子图结构大概是这样的 image paddle好像会把conv的weight和bias分开变成 无bias的Conv + ElementwiseAdd,这个calib算子出现在每个output之前一个conv层被切开的地方,模型一共18个output,所以日志里不支持DEQUANTIZE算子出现了18次 想问一下为什么这个地方会有calib算子,有什么解决办法吗

嗯,不应该在 conv2d+add 之间插入 calib 算子的,你把 PaddleSlim 产出的 Paddle 模型上传一下,我看看。

已经解决了,问题出在PostTrainingQuantization里设置了onnx_format=True, 改成False就好了

赞赞,那这个 issue 关了,有问题再建新的 issue 哈~

from paddle-lite.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.