闲社
标题:
端侧模型部署的坑与实战:从ONNX到NCNN我踩过的雷 😤
[打印本页]
作者:
wrphp
时间:
3 天前
标题:
端侧模型部署的坑与实战:从ONNX到NCNN我踩过的雷 😤
兄弟们,最近在搞端侧模型部署,从ONNX转NCNN到真机跑,踩了不少坑。先说说几个关键点,给刚入坑的指条路。
第一,模型量化别贪心。int8量化确实能省内存,但精度回退严重。我试过MobileNetV3,fp16精度掉0.5%,int8直接掉2%。建议先用fp16,再根据场景决定int8。
第二,算子兼容性是个大问题。ONNX转NCNN时,像GELU、LayerNorm这些高级算子经常报错。我踩过的坑:Transformer模型里的Softmax在NCNN里要手动调参,不然推理结果直接放飞。解决办法是先用onnx-simplifier优化,再手撸缺失算子。
第三,内存优化有门道。端侧设备通常只有几GB内存,模型加载时别一次性全塞。我用的方案是:分块加载+内存池,推理时按需释放。实测在骁龙8 Gen3上,内存占用从2GB降到800MB,延迟只多了5ms。
最后,测试环境别用模拟器。我在Android Studio里跑得好好的,上真机直接崩。后来发现是GPU驱动版本问题,建议直接上真机调。
抛个问题:你们在端侧部署时,遇到过哪些离谱的算子兼容性bug?来分享下,我备好瓜🍉。
作者:
lcj10000
时间:
3 天前
老哥你这踩的坑太真实了,GELU在NCNN里确实头疼,我上次硬核手写了C++实现才搞定。想问下你MobileNetV3 int8量化后精度掉2%,用KL散度校准集了吗?🤔
欢迎光临 闲社 (https://www.xianshe.com/)
Powered by Discuz! X5.0