说明:学校的高性能服务器,需要连接进行深度学习的实验,由于正常的要安装cuda和cudann,这两个装起来特别复杂,会有各种各样的问题,所以我们使用docker来安装现成的深度学习服务器
apt换源,可以换成阿里的源
安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新并安装docker
sudo apt-get -y update
sudo apt-get -y install docker-ce
在我们安装好docker后,总是要在前面加上sudo,太难受
建立docker组
sudo groupadd docker
将当前用户加入docker组
sudo usermod -aG docker node
将node用户添加到附件组docker中,也就是node不用脱离原来的组,添加到附件组中。同时-a和-G通常是一起用的,如果是-g就是换了主要用户组
配置国内镜像加速,这里选用中科大的源,在/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)这里在下载普通镜像的时候会用到
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
重新启动服务
安装nvidia docker2,这里是主要的步骤
参考
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
ocker 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
#一般如果之前没有装过nvidia-docker的话,可以直接从下面开始
# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get update && 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 nvidia-smi1234567891011121314
5.安装深度学习docker环境deepo
参考深度学习环境的安装
1. 当安装好以上的nVidia docker2后,运行
`docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi`
出现以下的界面的时候,默认安装成功了nuidia-docker
我这里使用镜像是**deepo**一款咱们中国人做出来的深度学习镜像,包含了现在多数流行的深度学习框架,而且版本也很新,所以我这个小白第一次就选择了这个。 链接:[https://hub.docker.com/r/ufoym/deepo](https://hub.docker.com/r/ufoym/deepo) 只有安装好了前面的docker和nvidia-docker,这里就很方便了。 直接通过命令`docker pull ufoym/deepo`就可以把各种框架都下载下来。但是这样比较大,费时较长,所以教程里面也提供了值安装某一种框架的方式:
> 如果你想要具体的某个版本的环境,直接在后面加上tag即可,在官网中有很详尽的对tag的描述。
>> [deepo官网,来自dockerhub](https://hub.docker.com/r/ufoym/deepo)
> > [github deepo](https://github.com/ufoym/deepo)
> >
> > [码云 deepo](https://gitee.com/mirrors/Deepo)
执行以下命令可以拉取一个包含jupyter notebook的镜像
sudo docker pull ufoym/deepo:all-jupyter-py36-cu100
这个过程可能会笔记漫长,如果比较长,可以先终止,再重新运行
docker images可以看到镜像已经创建完成
创建远程访问的容器
sudo nvidia-docker run -it -p 7777:8888 --ipc=host -v /home/node/deepLearningNotebook:/data --name deepLearningNotebook container-id
其中: - -it
为直接进入交互式 - -p 7777:8888
是把主机的7777端口映射到容器的8888端口 - -ipc=host
可以让容器与主机共享内存 - 还可以加一个--name xxxxx
给容器定义一个个性化名字 - -v /home/deepLearning/:/data
可以讲主机上的/home/deepLearning地址挂载到容器里,并命名为/data文件夹,这样这个文件夹的内容可以在容器和主机之间共享了。因为容器一旦关闭,容器中的所有改动都会清除,所以这样挂载一个地址可以吧容器内的数据保存到本地。 - 90be7604e476
则是你安装的jupyter镜像的id,可以在刚刚docker images命令后面查看,当然你也可以直接写全名ufoym/deepo:all-py36-jupyter
启动jupyter notebook
jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/data'
我更偏向于写成一个脚本
#!/bin/bash
jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=abc --notebook-dir='/data'
有时候我们想让jupyter服务后台一直运行
#!/bin/bash
nohup jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token=abc --notebook-dir='/data' > jupyter.log 2>&1 &
让jupyter 服务器一直在后台运行
后台运行csdn博客
nohup jupyter notebook --allow-root > jupyter.log 2>&1 &
终止进程
docker容器使用的主要命令
参考自csdn博客
之前好不容易配置好的环境,突然被学校服务器要重装!?怎么办? 你想到的一定是:能不能把配置好的环境备份一份,后面直接重新加载进来?
方法也很简单: 一般情况下,我们想备份的是容器,因为我们具体的配置都是在容器中进行的,而镜像一般都是直接在网上下载的,我们不做什么改动。
先通过docker ps
或者docker ps -a
来查看你想备份的容器的id, 然后通过:
docker commit -p [your-container-id] [your-backup-name]
来将id为your-container-id的容器创建成一个镜像快照。
接着,你通过docker images
就可以查看到刚刚创建好的镜像快照了。 然后,通过:
docker save -o [path-you-want-to-save/your-backup-name.tar]] [your-backup-name]
把那个镜像打包成tar文件,保存到服务器上。 后面就可以把服务器上打包好的tar文件,下载到本地了。
恢复: docker load -i your-backup-name.tar
docker run -d -p 80:80 your-backup-name
本文参考
https://zhuanlan.zhihu.com/p/64493662?utm_source=wechat_timeline
https://blog.csdn.net/zhangjiahao14/article/details/80554616