一、前言

我们都知道,普通使用pip安装的TensorFlow是万金油版本,当你运行的时候,会提示你不是当前电脑中最优的版本,特别是CPU版本,没有使用指令集优化会让TensorFlow用起来更慢。

但是在编译之中,发现很多坑,由此记录一下。

环境相关:

系统:centos7

python版本:2.7.5

二、准备

1. 安装相关依赖

# 一般会缺失的依赖
yum -y install java-1.8.-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安装TensorFlow并运行随便一个TensorFlow相关程序,如果出现以下内容则需要优化相关指令集:

将这些信息记录下来,后面会用到。

4. 安装Bazel

Bazel是编译TensorFlow的工具,首先下载repo文件:

进入网页 https://copr.fedorainfracloud.org/coprs/vbatts/bazel/ 选择自己系统的版本并下载,我的系统是centos7,直接执行命令:

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

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

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

5. 下载TensorFlow源码

输入命令:

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

如果没安装git,直接安装一下就行了:

yum -y install git

准备工作到此结束。

三、编译

1. 配置编译

进入源码目录并配置:

cd tensorflow/
./configure

刚开始会出现让你选择python的一些路径的,输入正确的安装目录就行了。

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

最后是一堆配置选择,也是直接回车,默认就可以了。

2. 开始编译

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

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

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

不过编译期间当然会出现各种错误,譬如我就遇到找不到python相关的头文件的,最后发现都在/usr/include/python2.7/ 目录里,而代码中指向的是/usr/include/,所以只得把python2.7目录里的头文件复制一份到母目录。此外还有很多错误,这个只能根据自己的系统和环境,一个个去解决了,此处省略一万字。

ps:如果编译一般发现之前的参数错了,先clean一下编译输出文件再编译:

bazel clean

不然会出现很奇怪的问题。

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

3. 创建whl文件

编译完成后在tensorflow下会创建很多符号连接,譬如bazel-bin,运行以下命令创建whl文件:

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

输出如下图所示:

至此,编译并生成whl过程才算完成,最后得到文件tensorflow-1.12.0rc0-cp27-cp27mu-linux_x86_64.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. 测试

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

>>> 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. CentOS源码编译安装Tensor Flow

2. Tensorflow Serving CentOS 7源码编译(CPU 版)

(完)

centos7 源码编译安装TensorFlow CPU 版本的更多相关文章

  1. Mac下使用源码编译安装TensorFlow CPU版本

    1.安装必要的软件 1.1.安装JDK 8 (1)JDK 8 can be downloaded from Oracle's JDK Page: http://www.oracle.com/techn ...

  2. centos7源码编译安装lamp/lnmp

    centos7源码编译安装lamp/lnmp 进程:是包工头(相当于是个门,只管开门关门,不管门内的事儿) 线程:是各种工种(cpu调度的是线程) 进程 是一件事情, 线程 是 同一个时间范围内 同时 ...

  3. Centos7源码编译安装PHP7.2(生产环境)

    安装PHP依赖包,否则在编译的过程中可能会出现各种报错 # Centos 安装epel-release源并将系统包更新到最新版本 $ yum install epel-release-y $ yum ...

  4. Centos7源码编译安装mysql8

    前面介绍了很多关于mysql的文章,下面主要介绍一下mysql8的源码编译安装 一 基本环境 [root@CentOS-7-x86-64-Minimal-1810 ~]# cd /usr/local/ ...

  5. 源码编译安装python2/3版本

    1- 源码编译安装python2.7版本 1.1- 下载源码包 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz 1.2- ...

  6. CentOS7 源码编译安装Nginx

    源码编译安装nginx     1.下载nginx源码包(这里以nginx-1.18.0为例) wget http://nginx.org/download/nginx-1.18.0.tar.gz 2 ...

  7. centos7源码编译安装Subversion 1.9.5

    svn是Subversion的简称,是一个开放源代码的版本控制系统.svn有两种运行方式:1.独立服务器(svn://xxx.xxx/xxx) 2.借助apache(http://svn.xxx.xx ...

  8. windows10下如何进行源码编译安装tensorflow

    1.获取python3.5.x https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe 2.安装python3.5.x,默认安装即 ...

  9. CentOS7 源码编译安装Tengine

    简介 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.它的目的是打造一个高效.安全的Web平台. 发展 Tengine的性能和 ...

随机推荐

  1. 当vcenter是linux版本的时候Sysprep存放路径

    为 VMware vCenter Server Appliance 安装 Microsoft Sysprep 工具在从 Microsoft 网站下载并安装 Microsoft Sysprep 工具之后 ...

  2. PHP 弹出文件下载 原理 代码

    /** * @author      default7<default7@zbphp.com> * @description 演示PHP弹出下载的原理 * * @param $file_n ...

  3. Linux命令详解-Apache网站服务器配置和管理

    1.Apache网站服务器配置和管理 1.源码包安装 2.rpm包安装 rpm –a | grep httpd 3.启动服务 service httpd start 4.配置文件: /etc/http ...

  4. linux下一个监测进程CPU和MEM使用率的shell脚本

    #!/bin/bashPID=$1 cpu=`ps --no-heading --pid=$PID -o pcpu`mem=`ps --no-heading --pid=$PID -o pmem`ec ...

  5. ETL编程模型(场景)

    使用场景: ETL是一个处理过程. 多个数据源之间进行数据同步 1:n:一对多同步数据 n:1:多个数据源到一个目的段 m;n:多个数据源多个目的段 ========================= ...

  6. iOS线程开发小结

    在iOS开发线程操作时,一般方法名决定是否开启新线程(async,sync),队列类型(全局队列,串行队列)决定开启多少条线程 1.快速线程调用 *开启后台线程执行任务 [self performSe ...

  7. PHP MySQL Order By

    ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...

  8. css 元素选择器实例

    一个完整的HTML页面是有很多不同的标签组成,而标签选择器,则是决定哪些标签采用相应的CSS样式.本文章向码农介绍css 标签/元素选择器以及其实例,需要的码农可以参考一下. [标签选择器] 一个完整 ...

  9. 常用模块:os模块,logging模块等

    一    os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...

  10. InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活

    InterlliJ IDEA 2017.3.x / 2017.3.4 License Server激活 1.Lincense Server激活 // 激活IDEA的License Server 地址 ...