深度学习环境配置系列文章目录

第一章 专业名称和配置方案介绍
第二章 Anaconda配置Python和PyTorch
第三章 配置VS Code和Jupyter的Python环境
第四章 配置Windows11和Linux双系统
第五章 配置Docker深度学习开发环境



前言

Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

在深度学习开发环境中使用Docker具有很多优势:

一致性:Docker可以确保在不同的计算机上运行相同的软件配置,从而避免了"在我的机器上可以运行"这种常见问题。这对于深度学习研究和开发尤其重要,因为深度学习库和工具经常更新,不同版本之间可能存在兼容性问题。

可重复性:使用Docker,你可以创建一份配置文件(Dockerfile),它描述了你的软件依赖关系和配置。这意味着任何人都可以复制你的环境,而不需要了解所有底层的细节。这对于协作和公开研究成果非常有用。

隔离性:Docker容器在运行时是相互隔离的。这意味着你可以在同一台机器上运行不同的项目,而不用担心他们的依赖关系会相互干扰。

易于部署:Docker使得在新的硬件或云环境上部署深度学习模型变得简单。你只需要将Docker容器移动到新的环境中,而不需要重新配置整个系统。

资源管理:Docker允许你限制容器的资源使用(如CPU、GPU和内存),这对于在有限的硬件资源上运行深度学习任务非常有用。

因此,配置Docker深度学习开发环境是一个非常重要的步骤,它可以提高开发效率,确保研究的可重复性,简化部署过程,并有效地管理硬件资源。


一, Docker安装的先决条件

  • 确保计算机运行的是 Windows 10(已更新到版本 2004 的内部版本 18362 或更高版本)。
  • 安装 WSL,并为在 WSL 2 中运行的 Linux 发行版设置用户名和密码。注意:Docker的命令行必须在Linux终端中执行,这是为什么要配置双系统的原因。
  • 安装 Visual Studio Code(可选)。 这将提供最佳体验,包括能够在远程 Docker 容器中进行编码和调试并连接到 Linux 发行版。

二, 安装 Docker Desktop

借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试,并在 Windows 上的 Microsoft Edge 浏览器中运行容器。

若要安装 Docker(在已安装 WSL 之后):

  1. 下载Docker Desktop 并按照安装说明进行操作。

  2. 安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。

打开Docker设置
  1. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。
配置Docker设置
  1. 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
配置Docker设置
  1. 若要确认是否已安装 Docker,请打开 WSL 发行版(例如 Ubuntu),并通过在Linux终端输入 docker --version 来显示版本和内部版本号

三, 拉取Docker镜像

开启WSL终端,输入nvidia-smi,查看自己的cuda版本号

查询显卡配置

进入下述连接官方docker镜像库

按如下图的操作拉取docker官方提供的深度学习镜像。

可能网速有些慢,不过网上有换源加速的方法,需要的话自行参考。

查询适合自己电脑配置的docker镜像

完成镜像拉取后,输入命令 docker images 就可以看到刚刚拉到本地的镜像了。

四,Docker的终端使用快速入门

4.1镜像的使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

1、管理和使用本地 Docker 主机镜像
2、创建镜像

4.1.1列出镜像列表

我们可以在终端中使用 docker images 来列出本地主机上的镜像。

Docker images

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

4.1.2获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。下载完成后,我们可以直接使用这个镜像来运行容器。

4.1.3删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world

4.1.4创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1、从已经创建的容器中更新镜像,并且提交这个镜像
2、使用 Dockerfile 指令来创建一个新的镜像

这里只详细介绍第一种:

第一步,在运行的容器内使用 apt-get update 命令进行更新。 在完成操作之后,输入 exit 命令来退出这个容器。 此时,下面示例中 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

上述代码中,各个参数说明:

  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • e218edb10161:容器 ID

  • diantou/ubuntu:v1: 指定要创建的目标镜像名和标签

完成后,我们可以使用 docker images 命令来查看我们的新镜像 diantou/ubuntu:v1
可以使用我们的新镜像 diantou/ubuntu:v1 来启动一个容器

docker run -t -i runoob/ubuntu:v2 /bin/bash            

设置镜像标签
此外,我们可以使用 docker tag 命令,为镜像添加一个新的标签。

4.2容器的使用

4.2.1启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run -it --gpus all --shm-size 128G -v /data1:/data1 -v /data2:/data2 -d --name arwin_cv IMAGE /bin/bash

参数说明:

–gpus all:参数指定使用所有gpu
–shm-size: 参数允许您指定可供容器使用的共享内存。它提供了更高的分配内存访问权限,从而让内存密集型容器能够更快地运行。
-v:挂载目录,这个一般是将宿主机的代码目录及一些配置文件,挂载到容器内部。
-i: 交互式操作。
-t: 终端。
IMAGE: 替换为ubuntu 镜像名称。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

其他参数具体含义见链接参数解释

启动已停止的容器使用命令:

docker start <容器 ID>

4.2.2进入容器

进入容器,可以通过以下指令进入:

docker attach

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

下面演示了使用 docker attach 命令。

docker attach 1e560fca3906 

下面演示了使用 docker exec 命令。

docker exec -it <容器 ID> /bin/bash

更多参数说明请使用 docker exec --help 命令查看。

4.2.3退出/停止/删除容器

要退出容器终端,直接输入 exit:

root@ed09e4490c57:/# exit

若要停止容器,命令如下:

docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

docker restart <容器 ID>

删除容器使用 docker rm 命令:

docker rm -f  <容器 ID>

4.2.4导出/导入容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 1e560fca3906 > ubuntu.tar

以上命令的含义是导出容器 1e560fca3906 到本地文件 ubuntu.tar。

如果要导入可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1 再用此镜像开启一个新的容器就可以了。

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

五,VScode使用Docker的快速入门

5.1, 先决条件

  • 按照上述流程完成Docker安装。
  • 安装完成 WSL,并在WSL中完成了docker镜像的拉取和容器的创建。
  • 安装 Visual Studio Code 。 并下载了插件Python,Docker和Remote Develpment

5.2, 连接顺序

  • step1:打开VScode,如完成先决条件2,一般会自动连接到WSL中了,如下图所示:
Docker images

如果没有自动连接,参考我之前的博文传送门中的第三小节,手动连接WSL。

  • step2:在WSL环境下,打开插件库,检查Python,Docker和Remote Develpment 是否安装,没有的话重新安装(ps,先决条件3是按照在本地,不是WSL,所以要再装一遍)。安装后,点击Docker入口,如下图所示:
VScode连接WSL环境

上图的c433 arwin_cv是我自己创建的docker容器,根据个人,名字会不同。开启容器后,点击Attach Visual Studio Code即可进入到Docker容器中,进行编程开发。

VScode连接Docker容器

需要特别注意的两点是:

  1. 在容器环境中,要在插件库中重新下载python等编程所需的插件。
  2. 每次开启计算机时,要先打开Doocker Desktop来开启Docker服务,才能使用VScode连接容器。

到此,大功告成~

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐