nvidia-docker创建pytorch环境并配置jupyter notebook远程访问

前言:给Ubuntu安装NVIDIA驱动+cuda+cudnn,网上教程很多,但问题都比较严重,试了3遍都不成功。而且强迫症如我,不喜欢电脑里有多余残留的东西。这时候想起docker了,毕业前还玩过一段时间,所以就开始尝试了(虽然也有不少坑)。
整个流程主要分几步:

  1. 安装NVIDIA驱动
  2. 安装docker
  3. 安装nvidia-docker
  4. pull 合适的pytorch image
  5. 安装notebook并配置远程访问

1、安装NVIDIA驱动
(1)在NVIDIA官网选择的驱动程序,需要对应自己的GPU版本
网上的教程说可以通过

nvidia-smi

查询自己电脑的GPU版本,但是我是重新安装的Ubuntu系统,没有这个命令,需要安装NVIDIA驱动才可以。
(2)禁用开源nouveau驱动(使用vim,不会的童鞋自行学习)
编辑文件/etc/modprobe.d/disable-nouveau.conf,最后添加两行

sudo vim /etc/modprobe.d/disable-nouveau.conf
#
blacklist nouveau
options nouveau modeset = 0

退出后进行配置

sudo ldconfig
sudo update-initramfs -u

验证禁用是否成功:重新打开一个新的terminal,输入

sudo lspci | grep nouveau

如果没有内容则禁用成功。
(3)配置kernel以text模式启动
编辑文件/etc/default/grub,修改下面两句

sudo vim /etc/default/grub
#修改前
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

#修改后
GRUB_CMDLINE_LINUX_DEFAULT="quietsplash text"
GRUB_CMDLINE_LINUX="rdblacklist=nouveaunouveau.modeset=0"

保存更新,退出

sudo update-grub

重启电脑,在登录界面,使用Ctrl+Alt+F1进入控制台
用户名、密码登录后关闭图形界面

sudo service lightdm stop

不关闭可能会出现You appear to be running an X server; please exit X before的bug,关掉就行了。
关掉后cd到驱动所在目录

sudo sh NVIDIA-Linux-x86_64-3xx.xx.run

重启图形界面

sudo service lightdm start

再次修改grub文件,将原来的第一行改回来,第二行不改本人没有出现问题

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="rdblacklist=nouveaunouveau.modeset=0"

保存后更新

sudo update-grub

在此可以使用nvidia-smi就可以查看自己的显卡信息了。驱动安装完成。
2、安装docker
如果之前安装过较老的docker版本,可以使用下面的命令进行卸载

sudo apt-get remove docker docker-engine docker.io

用docker的官方hub下images啥的真的很慢,所以使用阿里的源
Ubuntu14.04/16.04

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce=[docker version]#可选择想要安装的版本号

Centos7

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

3、安装nvidia-docker
参考https://github.com/NVIDIA/nvidia-docker

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd

# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
#这应该能出现你的显卡信息,跟第一步一样。这时候是安装正确的。

centos7安装还要这些操作
新建/etc/docker/daemon.json

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

然后

yum install nvidia-container-runtime -y

这里要选择好自己要安装cuda以及cudnn的版本,我的显卡不支持cuda9.2,或者可能需要升级显卡驱动,不想再折腾出问题。
4、nvidia-docker pull pytorch images
pytorch docker image传送门
在这里下载合适的镜像,注意版本
在这里插入图片描述
我是选的0.4.1-cuda9-cudnn7-devel,那4个的区别就像开发环境和生产环境的区别,具体区别不是很懂。
下载完成后,run下载的镜像

sudo nvidia-docker run -ti -d --name="pytorch1.0" -p 8888:8888 --net=host -v /home/yq/Documents/nlp:/root/wordspace db3c6c9e9983
参数:
-p 8888:8888  -> 把本地端口映射到容器端口
--net=host   -> 保证容器可以上网
-v  ->   把本地的路径下文件共享到容器中  命令格式 local path:docker path
3febd5b72fb0是image的id  可以用sudo nvidia-docker images查看对应容器的id

5、安装notebook并配置远程访问
在Ubuntu里ipython notebook和jupyter notebook是一样的,装一个就行。但在docker里不是一个东西

pip install ipython notebook

Python验证pytorch是否可以使用GPU

import torch
print(torch.cuda.is_available())
True				#结果是true的话就是OK的

生成配置文件

ipython notebook --allow-root --generate-config

结果应该是/.jupyter/jupyter_notebook_config.py,会问你要不要overwrite,其实无所谓。
使用ipython,创建一个密文密码

n [1]: from notebook.auth import passwd

In [2]: passwd()

Enter password:

Verify password:

Out[2]: 'sha1:ce23d945972f:34769685a7ccd3d08c84a18c63968a41f1140274'

这个sha1…要复制保存
修改默认配置文件/.jupyter/jupyter_notebook_config.py

c.NotebookApp.password =u'sha:c........'    这里把复制的密文替换掉
c.NotebookApp.ip='*' # 就是设置所有ip皆可访问
#####我一开始是设置*,但是怎么都访问不了,后来查资料,改成
c.NotebookApp.ip='0.0.0.0'  #就OK了
c.NotebookApp.open_browser = False # 禁止自动打开浏览器
c.NotebookApp.port =8888 #在Ubuntu中是随机指定端口的,但是这里只映射了8888端口,所以必须是8888了。如果不设置8888端口,是否可行,没有试过。

打开notebook

ipython notebook --allow-root

可以在浏览器使用 localhost:8888/tree或者ip:8888/tree登录了(tree也可不要)

强推一个docker hub,这个里面有常用的tf、Torch、caffe等深度学习工具,还支持jupyter远程访问,强的不行。

https://hub.docker.com/r/ufoym/deepo

补充:

nvidia driver 更新

假设NVIDIA-Linux-x86_64-440.118.02.run是要安装的新驱动,直接

sh  NVIDIA-Linux-x86_64-440.118.02.run 

可能会失败,log一般在/var/log/nvidia-installer.log,大意是nvidia driver被占用了,导致安装失败
可以先用–uninstall参数进行旧版驱动卸载

./NVIDIA-Linux-x86_64-440.33.01.run --uninstall
或
modprobe -r nvidia  #  同样的可卸载旧driver,但是本人这个方法没有成功

然后再重新安装,可能还会遇到问题,那问题大概率是旧driver得进程还在,所以需要kill掉相关进程。

#先试着
用lsmod查看模块信息
lsmod | grep nvidia
lsof /dev/nvidia*
再接着kill -9 [pid]   删除掉相应进程

接下来就可以重新安装新driver了。

参考致谢:
https://blog.csdn.net/chxw098/article/details/79741586
https://github.com/jupyter/docker-stacks/issues/718
https://blog.csdn.net/u014176855/article/details/78130240
https://blog.csdn.net/dihuanlai9093/article/details/79253963/
https://blog.csdn.net/mumodm/article/details/82503022

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值