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