3

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

 2 years ago
source link: http://vividfree.github.io/%E5%B7%A5%E5%85%B7%E5%AE%89%E8%A3%85/2017/04/13/install-tensorflow-on-linux-from-sources
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

TensorFlow (官网地址) 是Google开源出的一个用于各种感知和语言理解任务的机器学习软件库。TensorFlow可以安装在Linux, Mac OS X, Windows等操作系统上。为了省去大家自行编译TensorFlow,TensorFlow为各个操作系统都准备了编译好的TensorFlow二进制文件,大家只要安装即可。当然TensorFlow也可以由我们自行编译,然后再安装。后者需要更多的一些准备工作,比如需要安装Bazel (官网地址) 软件构建工具等,安装流程稍微会繁琐些。本文就介绍以源码方式在Linux系统上安装TensorFlow。官方文档介绍得很详细,可谓是“滴水不漏”,这里可能会多介绍下准备工作,权且当做一份补充材料或者对照材料。

1. 基础知识

首先,需要了解机器装的是哪个Linux操作系统。Linux有很多种发行版,比如Redhat, Ubuntu等。想大概了解不同发行版的区别联系,可以看这个网页 http://blog.csdn.net/ithomer/article/details/9729933 。查看Linux内核版本或者Linux操作系统版本等信息的命令有:

cat /proc/version

uname -a

cat /etc/*release*

如果是Redhat系统,就需要用基于RPM包的yum包管理工具;如果是Ubuntu系统,就需要用apt-get包管理工具。TensorFlow官网是围绕Ubuntu系统来介绍安装步骤,内容很详细。笔者给Redhat系统安装TensorFlow,发现大体流程和在Ubuntu上安装是类似的,无非是用yum代替apt-get命令,当然有时候需要花点功夫找到对应的RPM包,但总体上并不困难。下文就Redhat系统介绍安装情况。

RPM包在命名时,有时候会带上noarch。noarch是”no architecture”的简称,意思是这个RPM包可以用在不同的CPU机器上。可以用”yum list | grep noarch”查看有哪些RMP包是noarch的。

关于更详细的系统环境检测,比如GPU型号和个数、GCC编译器版本等环境,可以看nvidia介绍如何安装Cuda工具包的文章,其中的第2节就是介绍系统环境检测 http://docs.nvidia.com/cuda/cuda-installation-guide-linux/#pre-installation-actions

2. 准备工作

因为需要安装不少工具,所以申请root权限是必不可少的。

有时候在linux下使用wget不能成功,可能要在windows上先下载文件,然后传到linux上。像后者这样的需求,需要机器有rz/sz工具或者ftp工具。如果需要安装rz/sz工具,可以用” sudo yum install lrzsz”。

3. 按照官网描述的流程安装TensorFlow

参考链接:https://www.tensorflow.org/install/install_sources 。这是TensorFlow官网提供的源码方式安装流程的介绍。笔者执行这个流程时,基本没碰到啥特殊情况。

下面依官网文档的步骤分小节描述安装过程。

3.1 迁出TensorFlow代码

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

3.2 环境准备

3.2.1 安装Bazel

TensorFlow官网给了Bazel官网的安装页面 https://bazel.build/versions/master/docs/install.html 。照着这个页面介绍的流程执行即可,下面就源码方式安装Bazel的方式来介绍。源码方式安装Bazel的介绍页面是 https://bazel.build/versions/master/docs/install-compile-source.html

图1 源码编译Bazel的流程(实际操作中可能因为下载的内容不同而有一点区别)

首先,Bazel需要Java,且建议最好安装Java8。另外因为我们需要编译Bazel源码,所以需要JDK,而不只是JRE。参照页面 http://openjdk.java.net/install/ ,RedHat系统需要的是 java-1.8.0-openjdk-devel.x86_64 (”sudo yum install java-1.8.0-openjdk-devel.x86_64”)

其次,当前Bazel最新的版本是0.4.5。基于机器环境,选好相应的版本。下载地址是: https://github.com/bazelbuild/bazel/releases/tag/0.4.5 。笔者选的是 bazel-0.4.5-installer-linux-x86_64.sh 。下载完这个文件后,可以用sha256sum命令比对sha256值。(说明:下载的文件和图1第2步描述的内容不一样,因为当时碰到 “bazel-<VERSION>-dist.zip” 文件下载不下来的情况)

最后,执行”sh bazel-0.4.5-installer-linux-x86_64.sh”,会把bazel工具装到默认目录/usr/local下。建议执行脚本前看下脚本的 usage() 接口的实现。如果Bazel安装的路径不对,需要卸载,请照这个网页 https://github.com/bazelbuild/bazel/issues/962 执行,以确保没有残留文件或者配置。

3.2.2 安装TensorFlow依赖的python环境

TensorFlow官网介绍需要numpy, dev, pip, wheel四个包。可以用yum安装下面4个包:

  • numpy.x86_64
  • python-devel.x86_64
  • python2-pip.noarch
  • python-wheel.noarch

说明:注意机器的python版本是python2还是python3。

这些包应该也可以用pip安装,笔者暂时还没有尝试。

3.2.3 安装带有GPU支持的TensorFlow

TensorFlow官网介绍需要安装Cuda和cuDNN。

安装Cuda工具包,请详细阅读nvidia官网的安装介绍页面 http://docs.nvidia.com/cuda/cuda-installation-guide-linux

  1. Package Manager Installation方案和Runfile Installation方案是2种不同的安装方案。笔者按照Package Manager Installation方案执行。对于是否需要支持跨平台,视需求而定。
  2. Cuda含有的库很多,有80余个,所以安装CUDA需要的时间较长,可能要半个多小时。在安装的过程中,可能会碰到某些库因为网络连接等问题导致安装失败。对这个问题,首先要看在最后脚本是否自动重装了这些失败的库,如果自动重装了,那就不用在意,否则可以用上面那个网页提到的yumdownloader命令安装这些失败的库。
  3. 安装完Cuda后的一些工作。可以参考网页的第6节,特别是第6.2节。nvidia给了很多示例代码,这个参考网页会指导编译和执行几个有代表性的程序。nvcc是编译Cuda程序的编译命令。

安装Cuda工具包时碰到安装失败的库的log示例

cuda-cufft-dev-8-0-8.0.61-1.x8               FAILED ]  431 B/s | 273 MB 713:54:04 ETA
http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-cufft-dev-8-0-8.0.61-1.x86_64.rpm: [Errno 12] Timeout on http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-cufft-dev-8-0-8.0.61-1.x86_64.rpm: (28, 'Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds')

接下来安装cuDNN工具包,请详细阅读nvidia官网的安装介绍页面 https://developer.nvidia.com/cudnn ,按照TensorFlow的建议,选择 cuDNN v5.1 (Jan 20, 2017), for CUDA 8.0。下载下来是个tgz文件,笔者放到 /usr/local/cudnn 目录下,解压后如图2所示,解压后会产出cuda的目录,笔者不建议将其中的include文件和lib64文件并到/usr/local/cuda目录下,因为这样可以隔离开Cuda和cuDNN的升级维护。

图2 解压cudnn包后的结果
  1. TensorFlow官网说最后还需要安装libcupti-dev。这句话应该是对ubuntu系统来说的,而对redhat系统来说,在安装Cuda时,已经把cupti给装了,可以查看机器的/usr/local/cuda-8.0/extras/CUPTI/这个目录。
  2. 修改环境变量。示例:
    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
    

    如果希望让机器的全部用户都可以使用Cuda和cuDNN,那么可以把这些内容加到/etc/profile文件中。

3.3 为安装TensorFlow配置环境

走到这步,其实已经走完最麻烦的步骤,离最终安装完TensorFlow工具,就只剩下几行命令而已。

./configure

会有几个交互问题,结合机器环境和自己的需求,填写答案。

3.4 构建TensorFlow的pip包

构建有GPU支持的TensorFlow的pip包,参照TensorFlow官网的介绍先后执行下面2条命令:

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

3.5 安装TensorFlow的pip包

参照TensorFlow官网的介绍:

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.0.1-py2-none-any.whl

3.6 验证TensorFlow是否安装成功

参照TensorFlow官网的介绍。


原创文章,转载请注明:转载自vividfree的博客

本文链接地址:以源码方式在Linux安装TensorFlow记录



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK