1. 前提说明
在公司试着学习下深度学习项目,决定使用TensorFlow框架,公司的服务器上之前有人搭建过,遇到不懂的也也可以顺便请教。至于为什么还要自己重新搭建一个,因为公司的TensorFlow可能版本较老,在运行mnist的深度学习模型不能运行,所以还得自己重新装一个。
先说明一下现有的条件吧,
- 服务器系统为Linux
- 有NVIDIA的K80显卡
- 并不是服务器的管理者,没有root权限
- python 版本2.7
2. Virtualenv下安装TensorFlow
TensorFlow的安装方式有许多种,包括Pip, Docker, Virtualenv, Anaconda 或 源码编译的方法安装.不同的平台下官网上也有相应的安装教程,详见TensorFlow开源社区orTensorFlow中文社区。
因为服务器上有众多用户使用,所以对我而言比较好的办法是在沙盒中运行,因此使用Virtualenv安装方式。
# 在 Linux 上:
$ sudo apt-get install python-pip python-devpython-virtualenv
接下来, 建立一个全新的 virtualenv 环境。可以将环境设在指定目录下,这里设为 /tensorflowtest :
$ virtualenv --system-site-packages tensorflowtest
$ cd tensorflowtest
然后在自己创建的tensorflow目录下, 激活 virtualenv:
$ source bin/activate # 如果使用 bash
$ source bin/activate.csh # 如果使用 csh
(tensorflowtest)$ # 终端提示符应该发生变化
接下来按照按照官网上的步骤
执行
(tensorflowtest)$ pip install --upgrade tensorflow
坑就来了。。。
❌Could not find any downloads that satisfy the requirement tensorflow in /usr/lib/python2.7/site-packages.
这一般是由于pip版本过低所致,查看了以下pip版本号,
然后update一下,
(tensorflowtest)$ pip install -U pip
再重新pip安装一下,就没问题了。此处安装的是CPU版本,如果没有GPU使用需求的话,至此应该是结束了。
但是按照教程安装GPU版本的话,
(tensorflowtest)$ pip install --upgrade tensorflow-gpu
至此,我也以为万事大吉了,但是在import tensorflow时,
❌CImportError: libcudart.so.8.0: cannot open shared object file: No such file or directory
查了https://github.com/tensorflow/tensorflow/issues/5625,这是由于CUDA和CUDNN版本不匹配所造成的。
有条件的同学可以自己升级或者下载匹配的CUDA和CUDNN,但是服务器并不是我一人独享,所以环境配置不能随便更改。因此,只能重新用源码安装TensorFlow以适配当前服务器的环境。
3. 用源码安装TensorFlow
主要参考卜居的博客,上面说的也很详细。
下载源码
$ git clone --recurse-submodules https://github.com/tensorflow/tensorflow
安装 Bazel
参考 http://bazel.io/docs/install.html
配置
$ ./configure 参考lenbow的博客。
里面有一项3.5-5.2运算能力的设置,可以参考https://developer.nvidia.com/cuda-gpus
在我的配置过程中,有一个选项是:
Do you wish to build TensorFlow with OpenCL support? [y/N] n
如果用不上的话千万不要选,否则会出现如下一直循环的情况
❌Clease specify the location where ComputeCpp for SYCL 1.2 is installed. [Default is /usr/local/computecpp]:
Invalid SYCL 1.2 library path. /usr/local/computecpp/lib/libComputeCpp.so cannot be found
编译
- 仅 CPU 支持,无 GPU 支持:
$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
- 有 GPU 支持:
$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
- 生成 pip 安装包
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
- cd 到 /tmp/tensorflow_pkg目录下,找到编译好的whl文件
- 再使用PIP 工具安装
- 这里如果要有gpu版本的话,也记得要加上–config=cuda
$ pip install --config=cuda /tmp/tensorflow_pkg/tensorflow-x.x.x-py2-none-linux_x86_64.whl
编译目标程序, 开启 GPU 支持
$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
$ bazel-bin/tensorflow/cc/tutorials_example_trainer --use_gpu
# 大量的输出信息. 这个例子用 GPU 迭代计算一个 2x2 矩阵的主特征值 (major eigenvalue).
# 最后几行输出和下面的信息类似.
000009/000005 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000006/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
000009/000009 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
至此,折腾了一天半的TensorFlow安装之旅圆满结束。:)