Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

picodet交叉编译后部署在arm上四核推理,量化后的模型反而推理速度更慢了 #10626

Open
Hknight514880265 opened this issue Jan 22, 2025 · 17 comments
Assignees

Comments

@Hknight514880265
Copy link

  • 版本、环境信息:
       1)配置版本:paddlelite2.14rc
       2)系统环境:ubuntu交叉编译,arm上部署
  • 模型信息
       1)模型名称:picodet
  • 复现信息:
       1)训练配置:-c configs/picodet/picodet_xs_320_voc_lcnet.yml
       2)训练量化:--slim_config configs/slim/quant/picodet_xs_320_lcnet_quant.yml
       3)转换量化:paddle_lite_opt --model_dir=infer_model_params/picodet_xs_320_lcnet_quant --optimize_out_type=naive_buffer --quant_model=true --quant_type=QUANT_INT8 --valid_targets=arm --optimize_out=lite_model/model_quant
       4)无量化模型部署信息
    model.nb文件大小3.0M
    单核Prediction time: 196.392800 ms
    四核Prediction time: 63.681800 ms
       5)量化后模型部署信息
    model.nb文件大小1.3M
    单核Prediction time: 182.649800 ms
    四核Prediction time: 73.184100 ms
  • 问题描述:
    量化后模型参数量确实缩小了很多,单核的检测速率也有所提升(提升幅度较小,并没有达到说明文档里提速>30%的效果),但四核的检测速率反而下降了很多,希望大佬解答一下是哪个环节出问题了导致量化后速率没有明显提升。
@Hknight514880265 Hknight514880265 changed the title picodet部署在arm上四核推理,量化后的模型反而推理速度更慢了 picodet交叉编译后部署在arm上四核推理,量化后的模型反而推理速度更慢了 Jan 22, 2025
@MuShangCC
Copy link
Collaborator

MuShangCC commented Jan 22, 2025

建议参考文档:https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html。
使用 Profiler 工具分析一下具体耗时情况。

@Hknight514880265
Copy link
Author

建议参考文档:https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html。 使用 Profiler 工具分析一下具体耗时情况。

文档不存在

@MuShangCC
Copy link
Collaborator

建议参考文档:https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html。 使用 Profiler 工具分析一下具体耗时情况。

文档不存在

https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html

@Hknight514880265
Copy link
Author

Hknight514880265 commented Jan 22, 2025

建议参考文档:https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html。 使用 Profiler 工具分析一下具体耗时情况。

文档不存在

https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html

谢谢大佬,这个带Profiler工具的推理库在发布的各版本inference_lite_lib里没有吧,得自己编译?

@MuShangCC
Copy link
Collaborator

建议参考文档:https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html。 使用 Profiler 工具分析一下具体耗时情况。

文档不存在

https://www.paddlepaddle.org.cn/lite/v2.12/user_guides/profiler.html

谢谢大佬,这个带Profiler工具的推理库在发布的各版本inference_lite_lib里没有吧,得自己编译?

默认是不开启的,请参考对应的源码编译文档加上--with_profile=ON选项进行编译。

@Hknight514880265
Copy link
Author

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗

profile.txt

profile_quant.txt

@MuShangCC
Copy link
Collaborator

MuShangCC commented Jan 26, 2025

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗

profile.txt

profile_quant.txt

模型发一下?网络层数没有增加啊
看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。
另外hardswish算子调用变多了,这个你看看模型吧。

@Hknight514880265
Copy link
Author

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet
链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2

量化后模型picodet_xs_320_voc_lcnet_quant
链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592

大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

@MuShangCC
Copy link
Collaborator

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2

量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592

大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image
Image

跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

@Hknight514880265
Copy link
Author

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image

跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

@MuShangCC
Copy link
Collaborator

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

@Hknight514880265
Copy link
Author

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux
4核ARM Cortex-A53 200 MIPS
150FPS参考的picodet官方文档

Image

Image

@MuShangCC
Copy link
Collaborator

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux 4核ARM Cortex-A53 200 MIPS 150FPS参考的picodet官方文档

Image

Image

你这硬件环境也不一样,精度也不一样。。。。

@Hknight514880265
Copy link
Author

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux 4核ARM Cortex-A53 200 MIPS 150FPS参考的picodet官方文档
Image
Image

你这硬件环境也不一样,精度也不一样。。。。

是的,但是不知道为啥差距这么大。。。。快10倍的差距了

@MuShangCC
Copy link
Collaborator

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux 4核ARM Cortex-A53 200 MIPS 150FPS参考的picodet官方文档
Image
Image

你这硬件环境也不一样,精度也不一样。。。。

是的,但是不知道为啥差距这么大。。。。快10倍的差距了

至少精度保持一致再比较啊,跑过 FP16 吗?也设置了4个线程吗?

@Hknight514880265
Copy link
Author

Hknight514880265 commented Jan 26, 2025

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux 4核ARM Cortex-A53 200 MIPS 150FPS参考的picodet官方文档
Image
Image

你这硬件环境也不一样,精度也不一样。。。。

是的,但是不知道为啥差距这么大。。。。快10倍的差距了

至少精度保持一致再比较啊,跑过 FP16 吗?也设置了4个线程吗?

都是4线程,之前paddle_lite_opt转换时设置为fp16几乎没有太多提升

@MuShangCC
Copy link
Collaborator

@MuShangCC 大佬我用profile看了一下测速,不知道为啥量化训练后反而网络层数更多了,而且有相同层耗时还增加了,能麻烦您看一下吗
profile.txt
profile_quant.txt

模型发一下?网络层数没有增加啊 看上去conv2d算子量化后确实有性能提升,但插入的calib算子使得模型推理性能反而变差了。

无量化模型picodet_xs_320_voc_lcnet 链接: https://pan.baidu.com/s/1lNNATSKgAiCb3t-IUVQtgw 提取码: uxa2
量化后模型picodet_xs_320_voc_lcnet_quant 链接: https://pan.baidu.com/s/1A4B2n_tsVjALPT2X8ZNbDg 提取码: c592
大佬这个和部署的平台有关系吗?我模型参数都没调整,只是进行了量化训练而已。

Image Image
跟硬件当然有关系,Lite对A53处理器的conv_3x3s2_direct_fp32有优化实现,从四核的 Profiler 结果看,conv2d 算子的 int8 量化收益已经不明显了。量化插入的 calib 算子以及量化之后不能融合的hard-swish算子导致耗时反倒增加了,建议别做量化了。

大佬那还有什么方式能进行提速呢?目前最小参数模型xs在arm上四核的速度才15FPS,单核才5FPS,距离发布的四核150FPS还差好远

硬件环境说清楚吧,150 FPS 这个是哪来的?

aarch64 GNU/Linux 4核ARM Cortex-A53 200 MIPS 150FPS参考的picodet官方文档
Image
Image

你这硬件环境也不一样,精度也不一样。。。。

是的,但是不知道为啥差距这么大。。。。快10倍的差距了

至少精度保持一致再比较啊,跑过 FP16 吗?也设置了4个线程吗?

都是4线程,之前paddle_lite_opt转换时设置为fp16几乎没有太多提升

可能就硬件上的差距呗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants