【发布时间】: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