本文主要是针对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社区给我的帮助,谢谢!
注:未经本人允许,禁止转载!