为啥 TensorFlow Lite 比桌面版 TensorFlow 慢?
Posted
技术标签:
【中文标题】为啥 TensorFlow Lite 比桌面版 TensorFlow 慢?【英文标题】:Why is TensorFlow Lite slower than TensorFlow on desktop?为什么 TensorFlow Lite 比桌面版 TensorFlow 慢? 【发布时间】:2019-06-03 05:47:50 【问题描述】:我目前正在研究单图像超分辨率,并且我设法冻结了现有的检查点文件并将其转换为 tensorflow lite。但是,使用 .tflite 文件进行推理时,对一张图像进行上采样所需的时间至少是使用 .ckpt 文件恢复模型时的 4 倍。
使用 .ckpt 文件的推理是使用 session.run() 完成的,而使用 .tflite 文件的推理是使用interpreter.invoke() 完成的。这两项操作都是在典型 PC 上运行的 Ubuntu 18 VM 上完成的。
为了了解更多有关该问题的信息,我在单独的终端中运行 top
以查看执行任一操作时的 CPU 利用率。 .ckpt 文件的利用率达到 270%,但 .tflite 文件的利用率保持在 100% 左右。
interpreter.set_tensor(input_details[0]['index'], input_image_reshaped)
interpreter.set_tensor(input_details[1]['index'], input_bicubic_image_reshaped)
start = time.time()
interpreter.invoke()
end = time.time()
对
y = self.sess.run(self.y_, feed_dict=self.x: image.reshape(1, image.shape[0], image.shape[1], ch), self.x2: bicubic_image.reshape(1, self.scale * image.shape[0], self.scale * image.shape[1], ch), self.dropout: 1.0, self.is_training: 0)
一个假设是 tensorflow lite 未配置为多线程,另一个假设是 tensorflow lite 针对 ARM 处理器(而不是我的计算机运行的 Intel 处理器)进行了优化,因此速度较慢。但是,我无法确定,我也不知道如何追查问题的根源 - 希望那里的人对此有更多的了解?
【问题讨论】:
【参考方案1】:是的,当前的 TensorFlow Lite 运算内核针对 ARM 处理器进行了优化(使用 NEON 指令集)。 如果 SSE 可用,它将尝试使用 NEON_2_SSE 将 NEON 调用调整为 SSE,因此它应该仍然使用某种 SIMD 运行。然而,我们并没有花太多精力来优化这个代码路径。
关于线程数。 C++ API 中有一个SetNumThreads 函数,但它还没有在 Python API 中公开。如果未设置,底层实现可能会尝试探测可用内核的数量。如果您自己构建代码,您可以尝试更改该值,看看它是否会影响结果。
希望这些有所帮助。
【讨论】:
是的,这些帮助很大,感谢您如此全面地回答问题! 您能否分享您的经验,如果 SSD Mobilenet 在性能一般的 android 设备上是实时的,即它可以运行多少 FPS(使用 tflite 版本后)?我无法找到这些信息,因此,我不确定花时间为需要实时响应的 Android 开发此类对象检测应用程序是否合适。 @hafiz031 不是回答者,但从我目前发现的情况来看,SSD Mobilenet 在具有 224x224 输入的普通 Android 设备上将以 2 到 3 FPS 的速度运行。您也可以使用 Google 提供的示例应用再次检查! github.com/tensorflow/examples/blob/master/lite/examples/…以上是关于为啥 TensorFlow Lite 比桌面版 TensorFlow 慢?的主要内容,如果未能解决你的问题,请参考以下文章
将保存的tensorflow模型转换为tensorflow Lite的正确方法是啥
Google I/O 2017推出的Tensorflow Lite有啥意义