ubuntu下的docker安装比较简单,通过apt-get工具就可以完成,可以参考https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce
安装nvidia-docker:https://github.com/NVIDIA/nvidia-docker
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
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
最后注册nvidia-docker:https://github.com/NVIDIA/nvidia-docker/issues/838
sudo systemctl daemon-reload
sudo systemctl restart docker
首先,查看本机已有的镜像:
root@user:/home# docker images
一般新的docker中只有这一个镜像,这时候就需要我们配置新的镜像。配置新镜像的方法有两种:
自己通过镜像新建容器,并配置对应的环境,最后保存为新镜像
网上下载合适的镜像,然后适当的修改
考虑到我们需要配置的环境比较复杂(cuda、cudnn、anaconda、pytorch),很明显选择第二种方法:
这里我推荐https://hub.docker.com/
点图中的链接进入搜索页面,搜索“pytorch”相关,选一个下载量比较高的就可以了,这里我选择的是“pytorch/conda-cuda”。
用给出的代码下载之后查看镜像列表:
root@user:/home# docker pull pytorch/conda-cuda
root@user:/home# docker images
这样我们就有了一个已经配置好cuda、cudnn和anaconda的环境了!
镜像配置好以后就可以正式开始了,首先建立容器:
root@user:/home# NV_GPU=0,1,2,3 nvidia-docker run --rm -it -v /home/document1/document2:/mnt/ pytorch/conda-cuda bash
这一步的几个参数的作用如下:
NV_GPU:指定 GPU 卡
run:启动容器
rm:退出删除容器
it:交互模式
v:目录
/home/document1/document2:/mnt: 系统目录:容器目录
pytorch/conda-cuda :镜像名字
注意到原来的同户名变成了955e10c43ecd,这个也就是容器(container)的ID。
1.首先查看本机的cuda和cudnn版本:
[root@container_id /]# cat /usr/local/cuda/version.txt
[root@container_id /]# cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
在pytorch官网上找到合适的版本,这里选择pytorch1.2
2.由于我们的镜像中已经有了anaconda,为了避免之后的环境冲突,我们使用anaconda 配置我们需要的pytorch运行环
[root@container_id /]# conda create -n xxx python=3.6 //创建python3.6的名为xxx的虚拟环境
[root@container_id /]#conda activate xxx //开启环境
[root@container_id /]#conda deactivate //关闭环境
如上图所示,一个名叫“py36”的conda虚拟环境已经成功建立,然后输入之前在pytorch官网找到的安装代码:
(env_name)[root@container_id /] conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch
安装通常需要十几分钟(取决于你的网速),如果下不动或者想加速下载的话可以考虑添加国内的源https://blog.csdn.net/xd_wjc/article/details/80588343
安装完成之后再根据需求下载其他的库就可以了,这里就不赘述了。
当pytorch和其他的依赖库都下载好了之后,就可以开始代码的训练了。这里有几点需要注意:
1.从本地上传文件到容器中:
首先重新打开一个终端,然后用以下代码上传:
root@user:/home# docker cp 本地文件路径 containerID全称:容器路径
2.训练大数据集时报错:
无论是:RuntimeError: unable to write to file 还是RuntimeError: DataLoader worker (pid 7199) is killed by signal: Bus error,报错的核心问题是共享内存不足,因为docker默认的分配内存为64M,可以通过
[root@container_id /] df -h
解决方式有两个:1.关闭容器,在重新开启容器时加入参数:--shm-size="1g"
2.修改docker的port: https://blog.csdn.net/shmily_lsl/article/details/81166951
在这里我选择第一种方法。在这之前,首先保存你的镜像!!!!!
还是在容器外打开终端,然后:
root@user:/home# docker commit container_ID new_name
如图,我新建了一个叫做pytorch1.2_cuda10的镜像
下次再新建容器时用这个镜像就可以保留之前的所有改动啦!
docker cp :/file/path/within/container /host/path/target
docker run -v /path/to/hostdir:/mnt $container #用-v命令在创建容器时将主机文件挂载到容器上
sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE #直接将主机的数据拷贝到容器的物理存储中
#用输入输出符
docker run -i Ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/
docker exec -it bash -c 'cat > /path/to/container/file' < /path/to/host/file/
参考自:http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container
首先用 docker ps -a 查看所有的容器ID,然后关掉正在运行中的容器:
docker stop containerId
docker stop 'docker ps -a -q' #关闭所有容器
然后可以删除容器
docker rm containerId
docker rm -f containerId #-f 强制关闭
docker rm 'docker ps -a -q' #关闭所有容器
最后是镜像的删除
docker rmi containerId
docker rmi 'docker images -q' #批量删除所有镜像