为啥 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 Lite简单分析

将保存的tensorflow模型转换为tensorflow Lite的正确方法是啥

Google I/O 2017推出的Tensorflow Lite有啥意义

为啥我的卷积实现比 Tensorflow 的慢?

为啥 TensorFlow matmul() 比 NumPy multiply() 慢得多?

为啥tensorflow训练用GPU比CPU更慢了