Windows10 DockerDesktop 深度学习环境镜像构建

引言

最近在参加一个遥感目标检测比赛,要求将代码及运行环境打包成docker镜像发送过去,这里记录一下自己的镜像配置过程


Docker安装

在windows10上安装好DockerDesktop后,启动发现程序弹出报错窗口Windows10 DockerDesktop 深度学习环境镜像构建_第1张图片
参考链接解决了问题
由于下载国外镜像速度较慢,最好设置一下镜像加速。加速设置如下图所示Windows10 DockerDesktop 深度学习环境镜像构建_第2张图片
可用的镜像有

镜像加速 地址
Docker 中国官方镜像 https://registry.docker-cn.com
科大镜像站 https://docker.mirrors.ustc.edu.cn
阿里云 https://.mirror.aliyuncs.com

DockerDesktop将下载的镜像和中间产生的数据默认保存在C盘,非常占用C盘空间,建议将其修改到其他的盘下,可以参考链接

构建深度学习环境

docker安装还有很多其他的坑,上面只是列出了我当时遇到的,这里假设你的docker已经安装好了。docker中的每一个镜像可以理解为一个轻量的虚拟机,对于深度学习来说,首先需要安装一个基础的操作系统镜像,我这里选择的是nvidia/cuda:11.0.3-cudnn8-runtime-ubuntu18.04,其他版本镜像可以在dockerHub中搜到
打开我们的cmd,下载上述基础镜像

docker pull nvidia/cuda:11.0.3-cudnn8-runtime-ubuntu18.04
# 对应的还有一个nvidia/cuda:11.0.3-cudnn8-devel-ubuntu18.04版本
# runtime版本安装的cuda比较精简,cuda-11.0目录下没有bin目录也没有nvcc等指令,主要用于直接运行深度学习代码
# devel是开发版本,cuda安装的很全,同时镜像也更大,如果需要进行涉及cuda的编译开发等工作,需要下载这个镜像

下载完成后,可以使用指令docker images查看已下载的所用镜像,请记住刚刚下载的镜像ID
在这里插入图片描述
运行镜像得到一个对应的容器,如果把镜像比作类,那么容器就是镜像的一个实例对象
在这里插入图片描述
有的人在运行上述指令时可能会遇到报错

unknown flag: --gpus
See 'docker run --help'.

这是因为,虽然我们在容器里面构建了一个镜像操作系统,但是该系统使用的硬件(例如GPU)仍然是宿主机的,我们需要将宿主机的GPU映射到容器中,可以参考链接解决。如果–gpus all指令运行成功,将进入此容器的bash控制台,输入指令nvidia-smi后可以看到GPU相关的信息
Windows10 DockerDesktop 深度学习环境镜像构建_第3张图片
上述ubuntu镜像是一个比较纯净的系统,一些基础的指令都没有,所以首先需要安装一些基础的包

apt update
apt install -y wget build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev liblzma-dev

接下来就是正常的安装python环节,当前目录为根目录/

mkdir python
cd python
wget https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz
tar -xvf Python-3.7.13.tgz
cd Python-3.7.13
./configure --enable-optimizations
make
make install
cd /
rm -r python
ln -s /usr/local/bin/python3 /usr/local/bin/python
ln -s /usr/local/bin/pip3 /usr/local/bin/pip

现在就可以将我们的深度学习代码从宿主机移动到容器中了。首先Ctrl+P+Q退出容器,在cmd中输入指令

docker cp 本地目录 容器ID:容器目录

到这里整个基础的深度学习环境就搭好了,如果需要配置和代码相关的具体库,操作和在普通linux系统上配置没有区别(例如Pytorch的安装等等)

生成镜像

生成上述容器对应的镜像后,在其他主机的docker下运行该镜像就可以直接获得配置好环境的容器了,这大大节省了我们的时间!

# 生成容器对应的镜像
docker commit -m="描述信息" -a="作者" 容器ID 目标镜像名:TAG
# 镜像打包到本地
docker save 目标镜像名:TAG > 本地目录/压缩包名称.tar
# 导入压缩包镜像
docker load -i 本地目录/压缩包名称.tar

注意

Windows系统上的docker运行在wsl上的,wsl是windows下的一款linux虚拟子系统,所以本质docker还是运行在linux上。当前wsl对cuda的支持不是很好,就算按照上述步骤安装了环境,–gpus all 指令也正常,环境仍然可能无法正常使用GPU。—— 2022年10月10日

你可能感兴趣的:(深度学习,人工智能,docker)