TensorFlow CPU环境 SSE/AVX/FMA 指令集编译

sess.run()出现如下Warning

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.
 W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 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 FMA instructions, but these are available on your machine and could speed up CPU computations.
# 通过pip install tensorflow 来安装tf在 sess.run() 的时候可能会出现
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.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 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 FMA instructions, but these are available on your machine and could speed up CPU computations.

这说明你的machine支持这些指令集但是TensorFlow在编译的时候并没有加入这些指令集,需要手动编译才能够介入这些指令集。

# 1. 下载最新的 TensorFlow
$ git clone https://github.com/tensorflow/tensorflow

# 2. 安装 bazel
# mac os 
$ brew install bazel

# ubuntu 
$ sudo apt-get update && sudo apt-get install bazel

# Windows
$ choco install bazel

# 3. Install TensorFlow Python dependencies
# 如果使用的是Anaconda这部可以跳过

# mac os
$ pip install six numpy wheel 
$ brew install coreutils # 安装coreutils for cuda
$ sudo xcode-select -s /Applications/Xcode.app # set build tools

# ubuntu
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
sudo apt-get install libcupti-dev

# 4. 开始编译TensorFlow

# 4.1 configure
$ cd tensorflow # cd to the top-level directory created
# configure 的时候要选择一些东西是否支持,这里建议都选N,不然后面会包错,如果支持显卡,就在cuda的时候选择y
$ ./configure # configure

# 4.2 bazel build
# CUP-only 
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

# GPU support
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

# 4.3生成whl文件
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

# 5 安装刚刚编译好的pip 包
# 这里安装的时候官方文档使用的是sudo命令,如果是个人电脑,不建议使用sudo, 直接pip即可。
$ pip install /tmp/tensorflow_pkg/tensorflow-{version}-none-any.whl

# 6 接下来就是验证你是否已经安装成功
$ python -c "import tensorflow as tf; print(tf.Session().run(tf.constant('Hello, TensorFlow')))"
# 然后你就会看到如下输出
b'Hello, TensorFlow'

# 恭喜你,成功编译了tensorflow,Warning也都解决了!

报错解决

Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] y
Darwin is unsupported yet
# 这里MKL不支持Darwin(MAC),因此要选择N

ERROR: /Users/***/Documents/tensorflow/tensorflow/core/BUILD:1331:1: C++ compilation of rule '//tensorflow/core:lib_hash_crc32c_accelerate_internal' failed: cc_wrapper.sh failed: error executing command external/local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -fcolor-diagnostics -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG ... (remaining 32 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
clang: error: no such file or directory: 'y'
clang: error: no such file or directory: 'y'

# 这里是因为在configure的时候有些包不支持但是选择了y,因此记住一点所有的都选n

Reference

[1]: https://www.tensorflow.org/install/install_sources

 

先概述下问题:之前是在终端中使用 pip install tensorflow==1.1.0 命令来完成安装的,在eclipse中能够运行,但是却会提示报错,在控制台输出一串未使用SSE4.1,SSE4,2等字样的信息,本人有强迫症无法容忍项目中各种报错提示的存在,然后花了半天功夫解决了这个问题,步骤如下:

   这个问题的出现主要是和tensorflow的安装方式有关系,使用pip安装就会出现对代码编译优化的问题,使得你电脑有SSE4.1等命令,却无法调用来加速训练,所以最好是安装时候多费点事,能够解决这个报错提示的问题,同时也能在以后的项目中发挥本机CPU的性能进行加速训练

第一步:卸载已经安装的tensorflow   命令: sudo pip uninstall tensorflow  (一定要先卸载,不然之后所有工作都是白费)

第二步:创建文件夹并下载源码          命令: git clone --recurse-submodules https://github.com/tensorflow/tensorflow

第三步: 安装bazel工具(提示最后两条命令,别忘记输入sudo,否则会出错)  命令如下:

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
         curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
         sudo apt-get update && sudo apt-get install bazel
         sudo apt-get upgrade bazel

第四步:安装tensorflow所需的各种包  命令:sudo apt-get install python-numpy python-dev python-pip python-wheel

第五步:配置tensorflow   命令如下:

cd tensorflow/    (进入第二步中创建的tensorflow文件夹)
       ./configure

此时会弹出一些配置需要你填写,首先弹出的是选择python的路径和版本,在提示信息中会给出defult信息,我们就完全填写defult中的信息就行(避免出错和麻烦)

完成之后会让你输入Y/N选择tensorflow是否支持google cloud,Hadoop等,建议Hadoop选Y其他选择N即可(如果都选Y又需要额外下载很多东西)

第六步:生成pip安装包   命令:bazel build -c opt --copt=-msse3 --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma //tensorflow/tools/pip_package:build_pip_package  (时间较长,请耐心等待) (其中msse3,msse4.1 mavx等表示cpu支持的指令集,不同机器会有差异,如果你电脑的CPU不支持AVX指令,但在此处却输出了--copt=-mavx 最后还是会报错提示:你的机器不支持此指令,所以在写这条命令时候,建议大家下载CPU-Z看看本机CPU支持的指令,然后对应写此指令)

第七步: 安装  命令如下:

 

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
      sudo pip install /tmp/tensorflow_pkg/tensorflow-1.1.0rc1-cp27-cp27mu-linux_x86_64.whl  (最后是生成的软件包名,会有不同,根据自己生成的包名填写)

补充:如何查看生成的包名    在/目录下进入tmp再进入tensorflow_pkg文件   里面只有一个.whl的文件,即可查看包名,用于替换上述第二条命令中的最后一部分即可

完成上述命令后 等待一会下载即可完成
-