PaddlePaddle / Paddle-Lite

PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)
https://www.paddlepaddle.org.cn/lite
Apache License 2.0
6.94k stars 1.61k forks source link

量化后nb模型在A311d上npu结果有误 #10244

Closed deanSunny closed 5 months ago

deanSunny commented 1 year ago

opt导出-valid_targets=verisilicon_timvx,arm,跑npu的结果错误 image

是否timvx有op存在bug望告知,多谢

yingshengBD commented 1 year ago

首先,目前看普通的cnn 来说,timvx本身没有问题,而是 量化 导致了精度问题 有些模型就是对量化非常敏感,会导致精度不可用。特别是芯原timvx这种必须全量化的。 请问你如何使用paddleslim ?采用了何种量化方式? 目前这个模型还没拉下来,下载速度有点慢- -

deanSunny commented 1 year ago

首先,目前看普通的cnn 来说,timvx本身没有问题,而是 量化 导致了精度问题 有些模型就是对量化非常敏感,会导致精度不可用。特别是芯原timvx这种必须全量化的。 请问你如何使用paddleslim ?采用了何种量化方式? 目前这个模型还没拉下来,下载速度有点慢- -

几种algo均尝试了,上传的是hist的 weight_quantize_type=abs_max。channel_wise_abs_max 量化出来的模型在板子上跑的非常慢 round_type=round。adaround跑出来arm的结果都不对 optimize_model=True 其他都是默认

valid_targets=x86上跑的结果与arm和onnx一致。如果是量化问题,那意思是x86上跟arm上只有部分op跑的int8,其他跑的float32?否则就是timvx或者是硬件对op支持的问题了

yingshengBD commented 1 year ago

channel wise可以支持 需要加环境变量 export VIV_VX_ENABLE_GRAPH_TRANSFORM=-pcq:1; export VIV_VX_SET_PER_CHANNEL_ENTROPY=100 export VERISILICON_TIMVX_BATCHNORM_FUSION_MAX_ALLOWED_QUANT_SCALE_DEVIATION=3000000 新版的demo中应该是带了这些变量了 看了下你的model,如果channel wise还是精度不行 ,那就只能换模型了 1,建议不要大量的split之后再concat计算 2,channel调小一点