当前位置: 首页 > 知识库问答 >
问题:

为什么TensorFlow Lite在桌面上比TensorFlow慢?

段曦
2023-03-14

我目前正在研究单图像超分辨率,我设法冻结了一个现有的检查点文件,并将其转换为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()

vs

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个答案

宓跃
2023-03-14

是的,当前的TensorFlow Lite操作内核针对ARM处理器进行了优化(使用NEON指令集)。如果SSE可用,它将尝试使用NEON_2_SSE将NEON调用适应SSE,因此它应该仍然使用某种SIMD运行。但是我们没有花太多精力来优化这个代码路径。

关于线程数。C API中有一个SetNumThread函数,但在Python API中还没有公开。当它未设置时,底层实现可能会尝试探测可用内核的数量。如果您自己构建代码,您可以尝试更改值并查看它是否会影响结果。

希望这些有帮助。

 类似资料:
  • 许多用户认为这是切换到 Pytorch 的原因,但我还没有找到牺牲最重要的实际质量、速度来换取急切执行的理由/解释。 下面是代码基准测试性能,TF1与TF2-TF1的运行速度从47%到276%不等。 我的问题是:在图形或硬件级别,是什么导致了如此显着的减速? 寻找详细的答案-我已经熟悉广泛的概念。相关Git 规格:CUDA 10.0.130、cuDNN 7.4.2、Python 3.7.4、Win

  • 问题内容: 我参加了一次有角度的演讲,会议中提到的一位参加者胜于束缚。 原因之一是将变量放在监视列表中,并且仅当发生模型更改时,才将数据推送到视图中查看;另一方面,每次都会对表达式进行插值(我想这是角周期)并推送值,即使值更改与否。 也有人说,如果屏幕上没有太多数据,则可以使用,并且性能问题将不可见。有人可以帮我阐明一下这个问题吗? 问题答案: 如果您没有使用,则类似以下内容: 您可能会在解决之前

  • 问题内容: 我可以在网上(在Stack Overflow上以及其他方面)找到大量有关使用Python或在Python中进行连接是一种非常低效且不好的做法的信息。 我似乎找不到为什么效率如此低下。在这里没有提到“在某些情况下已针对20%的改进进行了优化”(仍然不清楚这些情况是什么),我找不到任何其他信息。 在比其他Python串联方法更好的技术水平上发生了什么? 问题答案: 假设您有这段代码可以从三

  • 本文向大家介绍CNN为什么比DNN在图像识别上更好相关面试题,主要包含被问及CNN为什么比DNN在图像识别上更好时的应答技巧和注意事项,需要的朋友参考一下 参考回答: DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter

  • 比较这个Lua脚本在Macbook Air (Mac OS 10.9.4,i5-4250U (1.3GHz),8GB RAM)和运行Arch Linux的VM (virtualbox)上的执行时间。 首先,我自己使用clang编译了lua,将其与Mac OS X clang二进制文件进行比较。 现在用与VM中相同的clang命令/选项编译lua。 我试过两个版本。3.4.2和xcode提供的一个。

  • 问题内容: 为什么比Java 慢?换句话说,为什么优于? 当我查看中的实现时,速度似乎应该是相同的: ArrayList.size() ArrayList.isEmpty() 如果我们只编写一个简单的程序来获取两种方法所花费的时间,那么在所有情况下这种情况都将花费更多,为什么会这样呢? 这是我的TestCode; 在所有情况下都在这里。为什么? 问题答案: 您的测试代码有缺陷。 只需颠倒顺序,即先