Ubuntu14.04下基于nvidia-docker的Tensorflow深度学习环境搭建

* 记录一下配置过程,内容基本上是配置的每一步中遇到的问题及网上找到的对应方法,格式会比较混乱。做一些记录,为学弟学妹们后来搭建新服务器提供些参考(如果老师还给买新服务器),也希望能帮到有需要的人。


系统配置:CPU 至强E5-2620 V3, GPU:NVIDA TITAN X,  OS:Ubuntu 14.04 LTS


实验室到了块TITAN X ,服务器上终于有显卡了。周末捣鼓着装上驱动把GPU支持的Tensorflow开发环境搭起来(之前一直在用cpu跑TF真的是慢啊)

首先,TITAN X额定功率是300W (也就是说高负荷长时间运行时平均功率在300W,因此峰值功率可能会超),要确保主机电源的功率要足够。

TITAN X没有VGA口,需要配一个转接头接显示器。


2.  显示器接显卡的输出之后,进入Ubuntu时出现了黑屏的情况,命令行也进入不了的那种。

百度一番之后,尝试进入恢复模式,:编辑grub
# vi /etc/default/grub
修改如下:


1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvidia.modeset=0"
2
 
3
 
4
#或者这样也可
5
 
6
 
7
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"


就能解决黑屏了。恢复模式中,VI无法保存修改的话,需要重新挂载一次:


# mount-n -o remount / 


此处解决方法参考:

http://www.2cto.com/os/201307/225026.html

http://blog.csdn.net/sqzhao/article/details/9812527


3. 解决黑屏问题后,正常启动进入系统。开始安装NVIDIA驱动。之前我安装过一块版本很老的显卡的驱动,使用命令行安装,非常麻烦...还得禁用集显,关闭图形界面,balabala...上次折腾了两三天才弄好。然而这块TITAN X并不用,通过包管理器在图形界面点击几下就可以了!几分钟搞定,不能再方便!

先去 Ubuntu Software Center 里安装 Synaptic Package Manager(新立得安装包管理器)。打开Synaptic,输入:nvidia,选择nvidia-352(根据显卡型号选择),然后点APPLY,Synaptic 包管理器会把 nvidia-352 所要一并安装的,都一起安装,安装完后,你会发现其实多安装了很多东西。所以这个安装驱动方式,比自己一个一个安装那些包,保险很多很多。安装之后,重启即可。点击右上角的关于这台计算机,发现图形里面显示已经有TITAN了,大功告成。


4. 接着安装docker。ubuntu是默认自带docker的。但通常版本不足,需要手动升级到最新版本。

安装升级docekr参考博客:

http://www.tuicool.com/articles/JBnQja;

http://www.linuxidc.com/Linux/2015-02/113784.htm


5.安装nvidia-dockerplugin。有时会遇到docker-engine版本不足的情况。跟着第4步的第一个链接仔细排查一下重试一遍。

参考链接:https://github.com/NVIDIA/nvidia-docker


6.下拉镜像。在docker hub中,搜索tensorflow的镜像。这里使用tensorflow的官方镜像。

链接:https://hub.docker.com/r/tensorflow/tensorflow/

其中有CPU版本、GPU(CUDA)版本的容器。

使用命令启动容器,有时需要sudo:

$ nvidia-docker run -it -p 8888:8888tensorflow/tensorflow:latest-gpu

其中 -p 是端口映射。 可以在命令后面添加 bash ,这样进入docker的shell,进行一些操作。需要启动jupyter notebook的时候,在根目录下运行 run_jupyter.sh即可

 

7.本地硬盘挂载到容器。命令 –v /宿主目录:/容器内目录


8.有时候nvidia-docker启动会有点问题。

Tensorflow的github中给出的建议是:“Note: If you would have a problem running nvidia-docker you may trythe old way we have used. But it is not recomended. If you find a bug innvidia-docker report it there please and try using the nvidia-docker asdescribed above.”

链接:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker

使用命令:

$ export CUDA_SO=$(\ls/usr/lib/x86_64-linux-gnu/libcuda.* | xargs -I{} echo '-v {}:{}')

$ export DEVICES=$(\ls /dev/nvidia* | xargs-I{} echo '--device {}:{}')

$ docker run -it -p 8888:8888 $CUDA_SO$DEVICES gcr.io/tensorflow/tensorflow:latest-gpu

这个方法需手动挂载GPU。

在docker的shell中,通过ls -la /dec |grep nvidia 查看显卡设备,然后依次挂载。

# 挂载GPU的命令,每个设备都需挂载

docker run -it --name NAME -v/home/:/mnt/home --privileged=true --device /dev/nvidia-uvm:/dev/nvidia-uvm--device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactlmyconda:cuda bash

#示例:

docker run -it -p 8888:8888  -v /home/:/mnt/home --privileged=true--device /dev/nvidia-uvm:/dev/nvidia-uvm --device /dev/nvidia0:/dev/nvidia0--device /dev/nvidiactl:/dev/nvidiactl --device/dev/nvidia-modeset:/dev/nvidia-modeset $CUDA_SO $DEVICESgcr.io/tensorflow/tensorflow:latest-gpu bash

 

9.运行jupyternotebook后,通过如下代码测试GPU能否使用,若没有报错则表示调用成功:

 

import tensorflow as tf

# '/gpu:'多块GPU时指派第n块GPU

with tf.device('/gpu:2'):

  a =tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')

  b =tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')

  c =tf.matmul(a, b)

# 新建 session withlog_device_placement 并设置为 True.

sess =tf.Session(config=tf.ConfigProto(log_device_placement=True))

# 运行这个 op.

print sess.run(c)

 

我运行了之前的一个小网络,运行成功后命令行中会有以下信息:

I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so locally
I tensorflow/core/common_runtime/gpu/gpu_device.cc:951] Found device 0 with properties: 
name: TITAN X (Pascal)
major: 6 minor: 1 memoryClockRate (GHz) 1.531
pciBusID 0000:02:00.0
Total memory: 11.90GiB
Free memory: 7.96GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:972] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:1041] Creating TensorFlow device (/gpu:0) -> (device: 0, name: TITAN X (Pascal), pci bus id: 0000:02:00.0)


10. 监控显卡的状态,命令:nvidia-smi。享受GPU带来的加速吧


这篇日志写的匆忙,零零散散,乱七八糟。配置过程中也得到了网上不少文章的帮助,我也写一篇,希望能帮到其他人。


参考链接:

[1]. NVIDIA-DOCKER快速开始:https://github.com/NVIDIA/nvidia-docker/wiki#quick-start

[2]. 手工指派GPU/CPU设备:http://www.tensorfly.cn/tfdoc/how_tos/using_gpu.html

[3]. TITAN X 驱动安装:http://blog.csdn.net/u010167269/article/details/50703948

[4]. 在容器中运行TF的方式(使用nvidia-docker或docker):https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker

[4]. dockerhub中的TF官方镜像:https://hub.docker.com/r/tensorflow/tensorflow/

[5]. Docker安装:http://www.tuicool.com/articles/JBnQja

[6]. 安装nvidia-docker:https://github.com/NVIDIA/nvidia-docker

[7]. 手动挂载GPU:http://blog.csdn.net/bychahaha/article/details/48493233

[8]. 显卡黑屏解决:http://www.2cto.com/os/201307/225026.html

[9]. 使用GPU支持的docker: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker

[10]. 恢复模式中VI修改:http://blog.csdn.net/sqzhao/article/details/9812527



你可能感兴趣的:(docker,深度学习,gpu,tensorflow,服务器)