【问题标题】:Tensorflow C++ API is slow compared to Python与 Python 相比,Tensorflow C++ API 速度较慢
【发布时间】:2018-07-01 05:44:34
【问题描述】:

我是 Tensorflow 爱好者,我正在尝试导出一个模型(用 Python 开发,然后使用 Tensorflow 工具进行冻结和优化)以供在 C++ 项目中使用(仅用于推理)。 我所经历的是,即使遵循其他用户已经打开的其他问题中的所有规定,我在编译源代码后获得的 C++ 可执行文件在推理操作(我的意思是会话->运行)中要慢得多10 与 Python 推理代码中的相同操作相比。

我知道有关此主题的不同问题。在这些之后,我使用以下命令构建了 C++ 项目:

bazel build -c opt  --copt=-mfma --copt=-mfpmath=both //tensorflow/project:project

我还尝试对推理张量使用与训练相同的批量大小,但在 session->run 操作的时间性能上,我仍然遇到相同的 10 级恶化。

我知道原则上,C++ 实现应该比 Python 更快(只是因为 Python 比 C++ 更高级别),所以在我看来这种效果是违反直觉的。我的问题是我做错了什么,或者这只是 Tensorflow 的一个特性。

另一个问题:在网上搜索,我发现冻结图会减慢推理过程(我可能错了),但我想不出另一种加载图的方法在 C++ 代码中而不是冻结的代码中(无论如何,冻结或不冻结图形对 Python 的性能没有影响)。也许有人也可以解释一下目前是否还有其他选择。

非常感谢您提前提出的所有友好建议,并感谢您在 Tensorflow 上所做的出色工作。

【问题讨论】:

  • 从技术上讲,这与语言的快慢无关,而是它们做了多少事情。 Python 通常使用动态类型,这往往会导致大量类型查找,而在 C++ 中,默认情况下您会获得没有类型查找的静态类型。区别不在于语言有多高级,而在于它们做了多少。在这种情况下,C++ 正在做一些 Python 没有做的事情。弄清楚那是什么以及如何摆脱它。
  • 你试过--copt=-msse4.2 --copt=-mavx2吗?
  • 是的,我也试过了,没有效果..
  • 10 次听起来很多......你有一个 Python 版本使用但没有 C++ 的 GPU 吗?

标签: python c++ tensorflow compiler-optimization compiler-options


【解决方案1】:

我发现问题与冻结图有关。在 python 中,我发现我在 python 案例中使用了检查点保存的模型,而我在 c++ 代码中使用了冻结的模型(我的错误,抱歉)。无论如何,冻结图形似乎大大减慢了推理过程。以 C++ 方式切换到冻结模型后,python 推理代码也需要相同的 C++ 推理时间。

【讨论】:

  • 顺便问一下,速度的最终状态是什么? C++ vs Python 中的冻结图 vs 检查点?
  • 我知道使用检查点更快,但后来我也知道了 optimize_for_inferecne 脚本。这有助于提高性能。
猜你喜欢
  • 2015-08-14
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多