title: 零门槛玩坏caffe
date: 2017/5/26 15:04:12

categories:

  • 深度学习
  • 虚拟化
    tags:
  • nvidia驱动
  • 深度学习
  • caffe
  • docker
  • deeplearning
  • python

DL如今已经快成为全民玄学了,感觉离民科入侵不远了。唯一的门槛可能是环境不好配,特别是caffe这种依赖数10种其它软件打框架。不过有了docker之后,小学生也能站撸DL了。

enter description here

从nvidia-docker到docker,需要有这样的操作

大致流程如下,入门版通过docker pull一个GPU版本的caffe 的image,然后安装nvidia-docker 和 nvidia-docker-plugin 来映射宿主机的nvidia-driver并通过共享volume的方式来支持容器里面能“看到”宿主机的GPU。进阶版通过curl -s命令列出宿主机的配置显卡配置,并通过docker run的方式来启动。总结完成。纸上得来终觉浅,绝知此事要躬行,光说不练空把式,唯有实践出真知。
tensorflow gpu in docker

使用nvidia-docker

sudo nohup nvidia-docker-plugin >/tmp/nvidia-docker.log &  
然后nvidia-docker run

使用docker来代替 nvidia-docker

curl -s http://localhost:3476/docker/cli

下面应该是输出:

--device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia7 --devic/dev/nvidia6 --device=/dev/nvidia5 --device=/dev/nvidia4 --device=/dev/nvidia3 --device=/dev/nvidia2 --device=/dev/nvidia1 --device=/dev/nvidia0 --volume-driver=nvidia-docker --volume=nvidia_driver_375.39:/usr/local/nvidia:ro

这样其实

sudo docker run -ti `curl -s http://localhost:3476/v1.0/docker/cli` -v /mnt/share:/mnt/share -v /mnt/lustre:/mnt/lustre  -v /lib64:/lib64 镜像名 bash

所以如果你想用docker的方式来运行GPU版本 那么你就需要指明你的所有的device信息,如果卸载rc文件里,那么只能这样

sudo docker run -ti --device=/dev/nvidiactl --device=/dev/nvidia-uvm --device=/dev/nvidia7 --device=/dev/nvidia6 --device=/dev/nvidia5 \
--device=/dev/nvidia4 --device=/dev/nvidia3 --device=/dev/nvidia2 --device=/dev/nvidia1 --device=/dev/nvidia0 \
--volume-driver=nvidia-docker --volume=nvidia_driver_375.39:/usr/local/nvidia:ro \
 -v /mnt/share:/mnt/share -v /mnt/lustre:/mnt/lustre  -v /lib64:/lib64  镜像名  bash

当前你也可以有这样风骚的走位

sudo docker run -ti  $(ls /dev/nvidia* | xargs -I{} echo '--device={}')   -v /mnt/share:/mnt/share -v /mnt/lustre:/mnt/lustre  -v /lib64:/lib64  镜像名  bash

在镜像里安装ipython notebook,需要这样做

把大象装进冰箱分四步,映射端口,开通open-ssh服务器,安装jupyter,配置密码
在镜像中执行

  1. 映射端口
    在dock run的时候加-p参数
  2. 开通ssh
sudo apt-get install openssh-server
  1. 安装jupyter
apt-get update
#安装python dev包
apt-get install python-dev
#安装jupyter
pip install jupyter
  1. 设置密码
    分三小步
    a. 生成jupyter配置文件,这个会生成配置文件.jupyter/jupyter_notebook_config.py
jupyter notebook --generate-config

b. 从密码到ssa密文
在命令行输入ipython,进入ipython命令行

#使用ipython生成密码
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:38a5ecdf288b:c82dace8d3c7a212ec0bd49bbb99c9af3bae076e'

c. 改配置

#去配置文件.jupyter/jupyter_notebook_config.py中修改以下参数
c.NotebookApp.ip='*'                          #绑定所有地址
c.NotebookApp.password = u'刚才生成的密文也就是sha1:38a5ecdf288b:c82dace8d3c7a212ec0bd49bbb99c9af3bae076e'
c.NotebookApp.open_browser = False            #启动后是否在浏览器中自动打开,注意F大写
c.NotebookApp.port =8888                      #指定一个访问端口,默认8888,注意和映射的docker端口对应

然后执行ipython notebook --allow-root就可以在宿主机上用docker里面的环境了,爽歪歪。

把jupyter-notebook装进docker里

参考资料

把jupyter-notebook装进docker里
tensorflow gpu in docker