qualcomm - 为什么 SNPE SDK 很慢?
问题描述
我在这里尝试了高通提供的示例:
https://github.com/globaledgesoft/deeplabv3-application-using-neural-processing-sdk
它说在 GPU16 上完成这段代码需要 31 毫秒:
// [31ms on GPU16, 50ms on GPU] execute the inference
outputs = mNeuralnetwork.execute(mInputTensorsMap);
对我来说,同样的例子需要 14 秒。我正在使用open-q 845 hdk 开发套件。
我问了我的教授,他说我正在安装的应用程序不受开发工具包固件的信任,这就是为什么我要花这么多时间来执行。他建议我将我的应用程序安装为系统应用程序来重建固件。还有什么其他原因?
解决方案
是的,这很令人困惑,我遇到了同样的问题。我注意到的是,至少在我的设备(Snapdragon 835)上,ResizeBilinear_2 和 ArgMax 需要大量时间。如果禁用 CPU 回退,您将看到实际上不支持 ResizeBilinear_2,因为在 deeplab 实现中他们使用了 align_corner=true。
如果您选择 ResizeBilinear_1 作为输出层,则推理时间将得到显着改善,而您无需自己实现双线性调整大小层和 argmax。
但即便如此,使用 gpu 我也只能达到大约 200 毫秒的运行时间。使用 DSP,我确实设法获得了大约 100 毫秒。
还要确保您的工具包中包含 opencl 支持,否则 gpu 运行时将无法正常工作。
旁注:我目前仍在使用 deeplab + snpe 测试东西。我注意到比较这个和 TFLITE gpu 委托的输出有一些差异。虽然 SNPE 通常快两倍,但存在许多分割伪影错误,这可能导致模型无法使用。看看这个https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neural-processing-engine-sdk/34844
到目前为止,我发现如果将输出步幅降低到 16,不仅推理速度会提高一倍,而且所述伪影似乎不太明显。当然,这样做会失去一些准确性。祝你好运!
推荐阅读
- java - 如何使用孩子的变量名获取 StackPane 的孩子
- javascript - .each() 中的 setInterval 仅适用于最后一个间隔?
- xslt-2.0 - 使用 XLT2.0 合并来自两个 XML 的数据
- python - 在 Python 中绘制 GP 95% 置信区间
- amazon-web-services - 在 S3 中禁用文件更新
- docker - Docker 容器 UTC 时间按实际 UTC 时间减少 1.5 小时
- javascript - google.script.run 错误,我该如何解决?
- r - 将唯一的主键应用于数据框中的每个自定义组
- python - pyspark 从数据框列中获取年、月、季度和季度月数
- c# - asp.net web 服务器控件中的换行符