CentOS源码编译安装TensorFlow

Jan 9,2018   1861 words   7 min

Tags: DeepLearning

之所以尝试了一下源码编译TF,理由很简单。一是因为每次在运行的时候都会出现如下警告,感觉有点“不爽”。 二是本来电脑就没有GPU,如果CPU的一点点加速都用不了,那就是太慢了。 所以就想着去编译一个优化后的TF安装包。

准备工作

1.查看可优化的信息

直接利用PIP安装普通版的TF,然后随便跑一个程序。如果说没有任何性能优化提示,那么“恭喜你”,下面什么都不用做了。 这已经是你电脑最快状态了。如果有如下提示,说明尚有优化空间,记下警告里说的这些指令集的名字,后面会用到。

2.安装Bazel

Bazel是编译TensorFlow的工具。首先按照这个网页的提示,下载repo文件。 下载地址是这里,如下所示。 然后依次输入命令。

cp vbatts-bazel-epel-7.repo /etc/yum.repos.d/
yum install bazel

期间可能会安装其它的一些依赖,静静等待就好。完成后如下所示。

3.Git TensorFlow

输入命令。

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

上面的命令会在你的当前文件夹中创建一个叫做“tensorflow”的文件夹,下载的文件都存在里面。如下图所示。 如果提示git无效命令,直接yum install git即可。

编译TensorFlow

1.配置编译

输入如下命令,切换当前目录到git的tensorflow下,并运行配置程序。

cd tensorflow/
./configure

可以看到有一堆配置选项,基本上是用默认的就好。

2.开始编译

输入命令。

bazel build -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx  //tensorflow/tools/pip_package:build_pip_package

上面的命令会生成一个叫做build_pip_package的脚本。这一步的参数便是是优化的关键了,那些优化指令就是在这里指定的。 需要注意的是,使用哪些并不是固定的。这里的代码是在我的VPS上提示可以优化的,不代表你的电脑上就适合。例如下面的命令是另一个服务器支持的优化指令。

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

比较好的办法就是之前说的先用pip装一个公版TF,然后随便跑一下,看提示的Warning信息,把这些信息记下来,然后在这里对应配置。 要不然CPU并不支持,但编译了,到时候用的时候有可能会报错。注意这是一个很慢很慢的过程,请耐心等待。编译界面如下。

而且还有可能会中途断掉。如果网络不好的话,建议开个screen编译,不然中途编译好久了结果ssh断开了,不过不用太担心,还是会从断点开始的。 下面是重新开始的样子,有个提示”Found 1 target…“。 编译的时候遇到如下错误,结果网上搜了说是因为内存不足导致的。 增加swap扩展内存即可解决。

按照如下命令运行这个脚本,在/tmp/tensorflow_pkg文件夹中创建pip的安装包,这个生成会很快。

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

到这一步,编译就完成了。

安装TensorFlow

安装这个之前,首先先卸载掉之前用pip装的TF。

pip uninstall tensorflow

然后再用pip安装我们生成的轮子即可。

pip install /tmp/tensorflow_pkg/tensorflow-1.5.0rc0-cp27-cp27mu-linux_x86_64.whl

由于平台的不同,可能软件包的名字是不一样的。这样,安装就大功告成了。

测试TensorFlow

用之前同样的代码进行测试,输出结果如下。 可以看到,再也没有性能优化的提示了。不过,不知道为什么,用自己编译的TF测试耗时反而变长了。不知道是不是因为版本的问题。 用pip装的是1.4.1版本,自己编译的是1.5.0rc版本。

本文作者原创,未经许可不得转载,谢谢配合

返回顶部