编译安装tensorflow 过程记录

前言

使用pip方式安装的tensorflow在cpu下运行提示:

Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

查阅相关资料之后,发现是目前版本的tensorflow不能很好的支持这些CPU指令集,然而我又极度想提高程序的速度,所以开始解决这个问题,顺便做个记录,方便自己以后查阅。

环境

Ubuntu14.04
python3.5

目标安装版本,不过应该区别不大

tensorflow1.4

源码安装tensorflow

一、 安装版本构建工具 bazel

google的版本构建工具
**注意:**如果要编译比较老版本的tensorflow最好安装比较老版本的bazel不然可能会有错误

(1) 安装JDK 8
如果环境是Ubuntu15.10,跳过此步骤。但在Ubuntu14.04,执行此步骤,安装Oracle JDK 8.这步我是已经完成的,网上很多教程。

(2) 添加bazel包源(安装了老版本直接看(5))

$ 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 -

(3)安装bazel:

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

(4)测试下bazel是否安装成功:
a:创建WORKSPACE文件:

$ touch WORKSPACE

b:创建一个BUILD文件:

$ vim BUILD 
genrule(
  name = "hello",
  outs = ["hello_world.txt"],
  cmd = "echo Hello World > $@",
)

c: 执行

$  bazel build :hello

(5)安装老版本:
上https://github.com/bazelbuild/bazel/releases下载老版本的deb文件,里头有各个版本的压缩包,选适合自己的,在我尝试了0.11.1/0.4.5/0.5.4/0.90之后,终于找到了可以正常编译tensorflow1.4的0.8.1
下载完成以后,进入到bazel安装包所在目录,执行命令:

sudo dpkg -i bazel_0.8.1-linux-x86_64.deb  

二、安装其他依赖
(1)安装numpy等:

$ sudo apt install python-numpy swig python-wheel
$ sudo apt-get install python3.5-dev

(2)安装MKL(可选,实测效果并不好,建议不选,看最后评测)
MKL是一款商用函数库,提供C、Fortran 和 Fortran 95的支持,但仅支持Intel自家旗下的CPU。
在这里插入图片描述
下载链接注册完免费下载MKL 后解压(下载时间有点小久)

$ tar -zxvf l_mkl_2018.4.274.tgz

运行./install.sh即可,完成后添加环境变量:

export MKL_HOME=/opt/intel/mkl/lib/intel64                                  
export PATH=$SCALA_HOME/bin:$MKL_HOME:$PATH  

三、 下载TensorFlow源码
网上给了两种比较常用的下载方式
第一种去tensorflow官方的github上直接下载,额,我选的是这种,因为貌似有博主用血与泪的教训得出这种比较不容易报错

第二种:直接git下载:终端里面输入,我需要选择版本,这种感觉还挺方便的。

如果没有安装git需要先安装

$ sudo apt-get install git
$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow

经过漫长的等待…终于下好了

四、 配置 TensorFlow

$ cd tensorflow
$ git pull
$ git checkout r1.10 #此处可以将1.10换成您想安装的任意版本

比如我想切换成1.4,运行结果如下

root@ubuntu:~/tensorflow$ git checkout r1.4 Branch r1.4 set up to
track remote branch r1.4 from origin. Switched to a new branch ‘r1.4’

开始编译配置

./configure

CPU版基本按推荐选择Yes/No就可以了,如果安装了MKL那么这里输入,否者直接回车

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: --config=mkl

五、 编译 TensorFlow

1)生成build_pip_package的脚本
默认操作执行以下代码会自动适配cpu指令

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

如果下了MKL 并且CPU支持SSE4.1 SSE4.2 AVX AVX2 FMA,没有GPU所以没弄cuda。

$ bazel build -c opt --config=mkl --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma -k //tensorflow/tools/pip_package:build_pip_package

错误记录
0.11.1老版本bazel执行编译后可能报如下错误,这貌似是个bug,高版本的tensorflow已经修复这个问题了。

Closure Rules requires Bazel >=0.4.5 but was 0.11.1

https://github.com/tensorflow/tensorflow/issues/16654 可以参考这个链接,然后就是不断试版本的过程,在我尝试了0.11.1/0.4.5/0.5.4/0.90之后,终于找到了可以正常编译tensorflow1.4的0.8.1。

成功之后就会提示这个

INFO: Elapsed time: 767.302s, Critical Path: 138.56s
INFO: Build completed successfully, 5965 total actions

2)完成编译后,运行脚本,在文件夹中创建pip的安装包:

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

错误记录
中间有出现如下错误

Traceback (most recent call last):
File “setup.py”, line 240, in
keywords=‘tensorflow tensor machine learning’,)
File “/usr/local/lib/python3.5/dist-packages/setuptools/init.py”, line 143, in setup
return distutils.core.setup(**attrs)
File “/usr/lib/python3.5/distutils/core.py”, line 148, in setup
dist.run_commands()
File “/usr/lib/python3.5/distutils/dist.py”, line 955, in run_commands
self.run_command(cmd)
File “/usr/lib/python3.5/distutils/dist.py”, line 974, in run_command
cmd_obj.run()
File “/usr/lib/python3/dist-packages/wheel/bdist_wheel.py”, line 213, in run
archive_basename = self.get_archive_basename()
File “/usr/lib/python3/dist-packages/wheel/bdist_wheel.py”, line 161, in get_archive_basename
impl_tag, abi_tag, plat_tag = self.get_tag()
File “/usr/lib/python3/dist-packages/wheel/bdist_wheel.py”, line 155, in get_tag
assert tag == supported_tags[0]
AssertionError

更新wheel的版本

$ pip3 install wheel

然后继续正常编译

六、 安装并配置环境变量

安装tensorflow

$ sudo pip install /tmp/tensorflow_pkg/tensorflow-1.4.2-cp35-cp35m-linux_x86_64.whl
//whl文件名可能会有区别,根据生成的版本.tensorflow1.4.2,python3.5

然后就成功啦!!!终于!!!

结果比较

PIP安装版
首先是直接pip安装的tensorflow,就是会报警告
CPU占用率,耗时:
在这里插入图片描述

在这里插入图片描述
加MKL编译版
选择MKL优化后的CPU占用率,耗时:
在这里插入图片描述
在这里插入图片描述
可以看到,CPU并行化确实是提高了,不过速度反而变慢了,这可能和我用来做测试有关系。
自动适配编译版
默认自动适配的CPU占用率,耗时:
在这里插入图片描述
在这里插入图片描述
还是有一些提升的,不过效果也并没有网上描述的那么明显,可能和代码有关,我的代码并不是纯用网络。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值