centos7 源码编译安装TensorFlow CPU 版本

2022-02-22

我们都知道一般使用pip安装是万能版。运行时会提示不是当前电脑最好的版本,尤其是CPU版本,不使用指令集优化会导致使用速度变慢。

但是在编译的时候发现了很多坑,所以记录一下。

环境相关:

系统:

版本:2.7.5

二、准备1.安装相关依赖

# 一般会缺失的依赖
yum -y install java-1.8.0-openjdk-devel automake autoconf libtool libicu gcc-c++

2. pip 相关库

# python 相关,连接境外源较慢,建议更换成国内源,比如 douban 等
pip install --upgrade pip
pip install numpy grpcio Keras-Applications Keras-Preprocessing h5py requests enum

3.查看可以优化的信息

使用 pip 直接安装和运行任何相关程序。如果出现以下内容,则需要优化相关指令集:

记录此信息以备后用。

4. 安装 Bazel

Bazel是一个编译工具,先下载repo文件:

进入网页选择自己系统的版本并下载,我是系统,直接执行命令:

wget https://copr.fedorainfracloud.org/coprs/vbatts/bazel/repo/epel-7/vbatts-bazel-epel-7.repo

复制到yum.repos.d目录并安装:

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

5.下载源代码

输入命令:

图片[1]-centos7 源码编译安装TensorFlow CPU 版本-唐朝资源网

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

如果没有安装git,直接安装一键即可:

yum -y install git

准备工作到此结束。

三、编译1.配置编译

进入源码目录并配置:

cd tensorflow/
./configure

一开始会有一些路径供你选择,输入正确的安装目录即可。

然后会出现一堆“Do you want to build with…”的提示,安装自己的情况来选择,如果不确定直接回车,但是因为编译的是CPU版本,所以GPU 这里需要选择n,其他根据实际情况选择。

最后还有一堆配置选项,也是直接按。默认就可以了。

2.开始编译

根据pip安装并在运行时提示的优化信息,作为优化参数,根据自己的情况输入命令:

图片[2]-centos7 源码编译安装TensorFlow CPU 版本-唐朝资源网

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

注意这里的优化参数一定要填写正确,否则CPU不支持,但是编译了,使用的时候可能会报错。请注意,这是一个非常缓慢的过程,请耐心等待。编译界面如下。

但是编译过程中当然会出现各种错误。比如我遇到相关头文件找不到,最后发现都在/usr//.7/目录下,而且代码指向/usr//,所以我们只好拷贝头文件在 .7 目录到父目录。另外还有很多错误,只能根据自己的系统和环境一一解决,这里一万字省略。

ps:如果编译器一般发现前面的参数不对,先清理编译输出文件再编译:

bazel clean

否则会出现很奇怪的问题。

如果顺利的话,编译会经历一个极其漫长的过程,你可以先泡一杯茶。

3.创建一个whl文件

编译完成后会创建很多符号链接,比如bazel-bin,运行如下命令创建whl文件:

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

输出如下图所示:

至此,编译生成whl的过程就完成了,最后得到文件-1.12.0rc0-cp27–.whl,名字会根据不同而不同平台。

四、安装1.卸载直接用pip安装的版本

pip uninstall tensorflow

2.使用pip安装前生成的whl文件

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

如无意外,安装完成,输出如下图:

3.测试

运行相关代码,如果没有优化提示,证明一切正常。

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)

Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
>>> exit()

五、参考

1. 编译安装Flow的源代码

2. 7 源码编译(CPU版)

(完)

分类:

技术要点:

相关文章:

© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容