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

Building tensorflow v1.X with SSE4.1, SSE4.2, and AVX instructions

我正在使用 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 并选择 "No" 以获得 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

但是,这会导致许多页面 warrnings/errors... 主要是以下形式:

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]

编辑

我会注意到,我从源代码中看到构建速度略有提高。

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

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

在为您的架构 (-march=native) 使用默认优化成功配置后,构建 TF 的命令是:

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

如果您碰巧 select 需要添加特定标志,例如:

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

参考:TensorFlow Docs