7,745
社区成员
发帖
与我相关
我的任务
分享在骁龙设备上用 TensorFlow Lite 调用 QNN delegate,模型推理速度反而不如 CPU,可能是哪些原因?
速度不如 CPU,通常不是 HTP 本身慢,而是模型结构、量化方式、输入输出拷贝、算子回退和运行时版本组合导致的。常见原因包括:模型太小,HTP 调度和数据拷贝开销占比过高;算子大量回退到 CPU;输入输出张量没有复用,每次推理都重复分配内存;FP16/INT8 量化效果差,导致部分算子降级;QNN delegate 版本与设备 Runtime 不匹配。
可以先开启 QNN_LOG_LEVEL=6 查看算子卸载情况:
bash
export QNN_LOG_LEVEL=6
然后检查日志中哪些算子跑在 HTP,哪些回退 CPU。建议:对中等以上计算量模型开启 INT8 量化;固定输入 Shape;复用 ByteBuffer 输入输出;避免每帧反复创建 Interpreter。示例:
java
Interpreter.Options options = new Interpreter.Options();
QnnDelegate delegate = new QnnDelegate();
options.addDelegate(delegate);
Interpreter interpreter = new Interpreter(modelBuffer, options);
如果模型确实很小,例如不到 100M FLOPs,有时 CPU 或 Adreno GPU 反而更稳定。参考:https://docs.qualcomm.com/bundle/publicresource/80-63442-10/topics/tensorflow_lite_delegate.html