PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
22.2k stars 5.58k forks source link

Paddle Inference 的 tensorrt int8 推理报错 #58674

Open Wanglongzhi2001 opened 11 months ago

Wanglongzhi2001 commented 11 months ago

bug描述 Describe the Bug

在 PaddleSlim PTQ量化后导出的模型在进行 Paddle Inference 的 int8 推理的时候会报如下所示的错误: image

其他补充信息 Additional Supplementary Information

复现步骤:

download 我的这个 repo :https://github.com/Wanglongzhi2001/repo-for-reproduction 运行 custom_infer 文件夹里的 infer.py 进行推理,代码是 paddle-inference-demo 里的示例

量化后的模型提供在 output_ptq 文件夹里,是运行 repo 里的 ptq_alexnet.py 文件夹而来,想要复现的话得自行配置好数据集,不想的话就直接用我提供的,代码参考自 PaddleSlim 的示例

6clc commented 11 months ago

可以提供一下paddle的版本吗,我这里直接跑你代码会有接口兼容问题?另外还有pdiparams文件也提供一下。

Wanglongzhi2001 commented 11 months ago

可以提供一下paddle的版本吗,我这里直接跑你代码会有接口兼容问题?另外还有pdiparams文件也提供一下。

抱歉,pdiparams文件有200多M,github 上传不了那么大的文件,之前没发现这个文件上传失败了。

请使用下面这个链接下载对应的模型和权重文件:

https://workdrive.zohopublic.com.cn/external/c00cacf9880dafd2ff3f8a5e0f331c2e35d070461549d6eec88df302cb3d219e/download

环境

使用的是 paddle 的 docker 镜像 2.5.2-gpu-cuda12.0-cudnn8.9-trt8.6 进行编译的。事实上在 windows 上我也用过之前好像是 2.5.0 还是 2.5.2 版本的 paddle,依然有这个报错,因为这个报错是从一个 pass 里传出的,而这个 pass 似乎不是最近修改的。

Wangzheee commented 11 months ago

这个错误是tensor的 实际输入和模型描述的数据类型不匹配,错误的log上提示了错误的原因和解决方法,可以照着改一下输入

Wanglongzhi2001 commented 11 months ago

这个错误是tensor的 实际输入和模型描述的数据类型不匹配,错误的log上提示了错误的原因和解决方法,可以照着改一下输入

能指出代码中我的模型输入哪里有问题吗? 复现代码我放在这个repo了。模型输入应该没有问题,模型输入就是paddle-inference-demo的示例代码(读取一张图片,float32类型)没有动过。

Wangzheee commented 11 months ago

看到您的pr了,这个确实这里的tensor的type不匹配。可能是slim的量化逻辑更新忽略了这个,应该是int8的权重,save成了float的权重(标准量化权重是int8),已经同步给slim的同学让他们查看、修改了

Wanglongzhi2001 commented 11 months ago

看到您的pr了,这个确实这里的tensor的type不匹配。可能是slim的量化逻辑更新忽略了这个,应该是int8的权重,save成了float的权重(标准量化权重是int8),已经同步给slim的同学让他们查看、修改了

好的,谢谢~