使用docker 进行深度学习环境配置
在ubuntu下使用docker 进行深度学习环境配置
本文步骤在ubuntu16.04和18.04下经过验证。
docker安装
基于GPU进行深度学习环境的配置需要提前安装好GPU显卡驱动,对于NVIDIA的卡可用下面的命令检测,有输出说明可使用GPU。
lspci -vv | grep -i nvidia
安装NVIDIA Container Runtime
在docker19.03版本后,不再需要单独安装nvidia docker2,只需要安装NVIDIA Container Runtime,方便了很多。在docker安装前后均可安装。
依次执行下列命令,便可完成NVIDIA Container Runtime的安装。
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
验证安装是否成功,执行:
which nvidia-container-runtime-hook
输出:
/usr/bin/nvidia-container-runtime-hook
即为成功。
安装docker
先执行
sudo apt-get update # 先更新一下软件源库信息
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
添加 Docker 官方的 GPG 密钥(为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
阿里云仓库
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装docker
sudo apt-get update
sudo apt-get install docker-ce # 安装最新版的docker
检查docker是否安装成功
docker --version# 查看安装的docker版本
运行docker测试
docker run hello-world
卸载docker
有时需要卸载重装,但删除不干净,可以通过查找相关的软件包,并依次删除:
查询相关软件包
dpkg -l | grep docker
删除对应的包
sudo apt remove --purge docker.io
常见问题、报错等
1、无法使用GPU
错误:could not select device driver “” with capabilities: [[gpu]]
尝试重启docker服务
sudo systemctl restart docker
2、无权限
错误:Docker"Got permission denied while trying to connect to the Docker daemon socket"
原因:docker服务需要root权限
方法:
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,liangll
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
newgrp docker #更新docker用户组
sudo systemctl restart docker #重启
3、速度慢
docker命令联网或pull 镜像时速度太慢
由于官方服务器在国外,因此可通过阿里云进行容器镜像加速。
可参考本文中镜像加速部分。
docker重启方式
systemctl 方式
sudo systemctl daemon-reload #守护进程重启
sudo systemctl restart docker #重启docker服务
sudo systemctl stop docker #关闭docker
service 方式
sudo service docker restart #重启docker服务
sudo service docker stop #关闭docker
离线安装docker
可参考这篇文章,亲测可用。
pytorch使用
pytorch镜像位置https://hub.docker.com/r/pytorch/pytorch/tags
拉取特定版本镜像:
docker pull pytorch/pytorch:1.5-cuda10.1-cudnn7-runtime
docker pull pytorch/pytorch:1.5-cuda10.1-cudnn7-devel
上面两个版本区别参见:这里
在pytorch镜像基础上创建支持GPU容器的命令如下:
docker run -p [port1]:22 -p [port2]:8888 --gpus all –v [dir]:/workplace -td pytorch/pytorch:1.5-cuda10.1-cudnn7-runtime bash
其中,-p为端口映射,dockers容器无图像界面,且外部不通过宿主机无法直接进入容器,因此需要端口映射来实现直接访问。port1为宿主机的任意未占用端口,用来映射容器内部ssh服务的22端口,port2可用来映射容器内jupyter notebook的端口,也可根据需要进行其他各类端口的映射。
–gpus all为指定宿主机所有GPU可供容器使用,其他映射方式:
docker run --gpus 2 nvidia/cuda:9.0-base nvidia-smi # 使用两个GPU
docker run --gpus '"device=1,2"' nvidia/cuda:9.0-base nvidia-smi # 指定GPU运行
docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:9.0-base nvidia-smi
-v为挂载宿主机的目录,由于容器与宿主机相互隔离,不挂载的话,每次文件交互均需执行文件拷贝命令,根据需要对本地的绝对路径 dir进行映射。