干货!手把手教你Centos6源码安装最新Tensorflow r1.3 GPU版本

本文主要是针对Centos7以下的老系统(包括内核2.6以下的Linux系统),源码安装Tensorflow的最新版本。其他高版本系统就直接参照官方安装手册进行安装配置就行了,传送门:https://www.tensorflow.org/install/

网上关于Centos6安装GPU版本的Tensorflow的教程基本是找不到的,这也是我千辛万苦摸索出来的,所以如果对你有帮助的话,记得给个Like。如果在安装过程中出现什么问题可以在底下留言,我会尽快回复。想一起讨论交流深度学习的,请关注我 :)

首先我们需要明白软件不是越新越好,兼容才是最好,有些版本在安装Tensorflow的过程中也有bug,所以我先把我的配置环境贴出来,大神就不需要看教程就可以复现了。
配置环境:

Centos 6.5
gcc 4.8.2
bazel 0.5.2
tensorflow r1.3
cuda 8.0
cudnn 5.1.10
Python 3.6.2

第一步:升级GCC到4.8

这一步主要是为了后面源码安装Python3.6、Bazel和Tensorflow提供一个编译环境,太低版本的GCC基本上不行了(注:超过GCC5.0版本的安装不了Tensorflow)。

首先我们导入 CERN's GPG 钥匙:

sudo rpm --import http://ftp.scientificlinux.org/linux/scientific/5x/x86_64/RPM-GPG-KEYs/RPM-GPG-KEY-cern

添加仓库:

wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo

安装dev包:

sudo yum install devtoolset-2

应用到系统环境:

scl enable devtoolset-2 bash

测试:

$ gcc --version
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
...

第二步:安装Python

由于Centos 6预装的只有Python2.6,已经out了。
如果你用的是Python2.X的就升级到Python2.7,用Pyhton3.X的话就安装Python3.6。
都是需要源码安装,请选择自己要的版本,传送门https://www.python.org/downloads/source/
这里拿Python3.6.2做个例子

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz

下载完之后就进行解压

tar xf Python-3.6.2.tgz
cd Python-3.6.2

接下来就是配置安装,分别执行这三个命令(你也可以参考里面README文件):

./configure
make
make install

如果执行完没有报错的话,就成功完成安装Python,有些同学不知道有没有出现错误的,可以在每一步命令执行之后,用以下的命令来查看有无报错(敲黑板):

$ echo $?
0

0代表没有错误,其他数字代表有多少个错误。

第三步:安装虚拟环境

安装虚拟环境能够与系统环境隔离开来,这对于多项目和多用户系统来说是必选。虚拟环境能够保证每个项目之间的环境不受影响,因为每个项目用到的软件版本基本不同,所以有必要安装虚拟环境。

安装软件:

sudo yum install python-virtualenv

部署虚拟环境:

virtualenv --system-site-packages tensorflow #对于Python 2.7的用户
virtualenv --system-site-packages -p python3 tensorflow #对于Python3的用户

激活虚拟环境:

source tensorflow/bin/activate

离开虚拟环境执行deactivate命令即可。

第四步:安装Bazel

安装Bazel是为了把Tensorflow源码编译成可以用pip安装的whl文件,官方的whl安装包是基于更高Glibc版本,而我们需要的是适用本机版本的whl安装包。
在安装Bazel之前需要安装JDK8:

yum install java-1.8.0-openjdk
yum install java-1.8.0-openjdk-devel

然后我们下载Bazel0.5.2的源码进行安装:

wget https://github.com/bazelbuild/bazel/releases/download/0.5.2/bazel-0.5.2-dist.zip

解压到Bazel文件夹里:

unzip bazel-0.5.2-dist.zip -d bazel

编译:

cd bazel/
bash ./compile.sh

编译完成后将output/bazel复制到/usr/local/bin里面

cp output/bazel /usr/local/bin

第五步:安装CUDA8.0和Cudnn5.1

首先你要确认你的电脑显卡是NVIDIA的,因为现在Tensorflow只支持NVIDIA显卡。
检查你的电脑是不是有NVIDIA显卡:

lspci | grep -i nvidia

下载CUDA 8.0:

wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-rhel6-9-0-local-9.0.176-1.x86_64-rpm

执行以下命令进行安装:

sudo rpm -i cuda-repo-rhel6-9-0-local-9.0.176-1.x86_64.rpm
sudo yum clean all
sudo yum install cuda

接下来安装Cudnn 5.1(只是把cudnn的头文件和链接文件放到cuda里面):

wget https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v5.1/prod_20161129/8.0/cudnn-8.0-linux-x64-v5.1-tgz
tar xf cudnn-8.0-linux-x64-v5.1.tgz

sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

第六步:安装Tensorlfow

完成前面的步骤之后我们就要开始安装Tensorflow了,首先把numpy和wheel用pip安装。(我们记得先激活virtualenv进入虚拟环境)

sudo pip install numpy wheel #对于Python2.7
sudo pip3 install numpy wheel #对于Python3.6

如果是Python2.7还需要更新一下pip和setuptools:

sudo pip install pip setuptools --upgrade

TensorFlow官网说还需要安装libcupti-dev。这句话应该是对ubuntu系统来说的,而对redhat系统来说,在安装Cuda时,已经把cupti给装了,可以查看机器的/usr/local/cuda-8.0/extras/CUPTI/这个目录。

接下来是一个比较重要的步骤,修改环境变量:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cudnn/cuda/lib64:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

把它们加到.bashrc 里面就不用每次都重新定义变量。

下载Tensorflow源程序:

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

git checkout r1.3

下载完之后是比较重要的配置,一个非常重要的点就是选Clang是否作为CUDA的compiler的时候选择No。

$ ./configure
Do you wish to build TensorFlow with MKL support? [y/N] 
No MKL support will be enabled for TensorFlow
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] n
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] n
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] n
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] n
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] n
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] y
CUDA support will be enabled for TensorFlow
Do you want to use clang as CUDA compiler? [y/N] n
nvcc will be used as CUDA compiler
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 8.0]: 
Please specify the location where CUDA 8.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: 
Please specify which gcc should be used by nvcc as the host compiler. [Default is /opt/rh/devtoolset-2/root/usr/bin/gcc]: 
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 6.0]: 5.1.10
Please specify the location where cuDNN 5.1.10 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: 
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.
[Default is: "3.5,3.5,3.5,3.5"]: 
Do you wish to build TensorFlow with MPI support? [y/N] n
MPI support will not be enabled for TensorFlow
Configuration finished

接下来就是用Bazel来编译源码还有生成whl文件:

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

最后面就是用pip来安装我们生成的whl文件(每个人的文件名应该都不一样,请查看/tmp/tensorflow_pkg/里面的whl文件):

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.3.0-cp27-cp27m-linux_x86_64.whl

测试(如果能够import说明大功告成):

$ python
import tensorflow as tf

另外,我还在安装Tensorflow r1.2 cpu版本的时候发现一个普遍存在的问题,需要修改源码里面 tensorflow/tensorflow.bzl文件:
将其中tf_extension_linkopts 函数添加参数:

def tf_extension_linkopts():
  return []

to

def tf_extension_linkopts():
  return ["-lrt"]

安装的cpu版本的同学可以参考一下。

参考

最后感谢Google、Stackoverflow、Github社区给我的帮助,谢谢!

注:未经本人允许,禁止转载!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容