干货!手把手教你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版本的同学可以参考一下。

参考

  • Tensorflow官方源码安装教程

  • 以源码方式在Linux安装TensorFlow记录

  • Bazel官方源码安装教程

  • Cuda官方教程

  • Cudnn官方教程

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

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

你可能感兴趣的:(干货!手把手教你Centos6源码安装最新Tensorflow r1.3 GPU版本)