使用SSE4.1,SSE4.2和AVX指令构建tensorflow v1.X

时间:2017-04-11 15:27:55

标签: tensorflow bazel protobuf-c

我正在使用tensorflow(没有GPU支持),而且我看到的性能与预期相比有相当大的影响。所以,我认为是时候关注这些警告了:

W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.

我看到有些人声称他们已经接近速度提高了10倍,并按照这些说明进行构建。

我在这方面发现的说明似乎与旧版本的TF(v <1.0)有关。我想知道是否有人能指出我使用更新版本的tf构建正确的bazel命令?

按照此处的说明在Mac OSX上安装python3:https://www.tensorflow.org/install/install_sources并为CUDA支持选择“否”。

并使用bazel命令:

bazel build --linkopt='-lrt' -c opt --copt=-march=native --copt=-mavx --copt=-msse4.2 --copt=-msse4.1 //tensorflow/tools/pip_package:build_pip_package

然而,这导致许多页面的更改/错误...主要是形式:

target '//tensorflow/contrib/learn:learn' depends on deprecated target '//tensorflow/contrib/session_bundle:exporter': Use SavedModel Builder instead.

external/protobuf/python/google/protobuf/pyext/message_factory.cc:78:28: warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]

修改

我会注意到,我只看到从源头开始建立速度的边际增长。

1 个答案:

答案 0 :(得分:1)

如评论中所述,这些警告不会阻止构建TensorFlow。

关于使用bazel构建TensorFlow的命令,如果在配置期间设置了-march=native,则无需显式添加其他优化标志,因为TensorFlow已经使用CPU架构中提供的所有SIMD指令进行编译。

成功配置默认为您的体系结构(-march=native)的优化后,构建TF的命令是:

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

如果您碰巧选择了特定的标志,则需要添加它们,例如:

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma //tensorflow/tools/pip_package:build_pip_package

参考:TensorFlow Docs