使用 Docker 安装深度学习环境

教程|使用 Docker 安装深度学习环境

用 Docker 安装深度学习环境,轻量、方便!整个系统大小仅需2~3G,用完还能带着走!一人装环境,全都能用,还有 NVIDIA 官方提供的 GPU 镜像等着你哦~

1.什么是 Docker2.关于 Docker 的几个概念3.为什么用 Docker4.实战:使用 Docker 创建并分享一个深度学习环境

深度学习环境的配置一直是一个令人头疼的问题,尤其是对使用 Windows 平台的用户来说,在安装一些开源深度学习框架的时候,经常会遇到一起奇奇怪怪的问题。更有一些深度学习框架(比如 PyTorch),目前没有提供对 Windows 平台的官方支持。

为了避免出现环境问题,有些同学选择使用 VMware、VirtualBox 运行 Linux 虚拟机的方式进行深度学习实验。但是像 VMware、VirtualBox 这类“重”虚拟机运行起来常会拖慢系统,并且这些虚拟机目前是不支持 GPU 虚拟化的。

所以今天要分享给大家的是使用 Docker 配置安装深度学习环境。

使用Docker安装环境的优点如下:

  1. 无需自己配置环境,通过 Docker 镜像可以使用各种已配置好的深度学习环境。

  2. 轻量便捷。一个 Docker 客户端+一个镜像,总共大约3~4G即可组成一个深度学习系统环境。

  3. 便于分享。可以将自己的环境通过镜像库或直接以文件拷贝的方式传播。

  4. 官方支持。很多深度学习框架&项目提供官方 Docker 镜像。

英伟达专门提供的支持GPU虚拟化的Docker镜像:

教程|使用 Docker 安装深度学习环境

1.什么是Docker?

已经熟悉 Docker 的同学肯定已经有了自己的理解。

我这里给出一种简单(但不一定严谨)的描述,以供初学者快速理解。

Docker 类似于我们使用的虚拟机软件(VMware,VritualBox),可以创建、运行虚拟系统。

网上可以找到大量的 Docker 虚拟系统(镜像)。我们只需要搜索想要的系统环境(比如Python3.6+PyTorch),然后使用 Docker 运行它,就可以在其中调试深度学习程序。

那 Docker 与之前说的“重量级”虚拟机软件有什么不同的地方?

别急,在下面我们会专门说明这个问题,且慢慢往下看~

2.关于Docker的几个概念

关于 Docker 的组成部分,有那么几个小概念需要大家提前了解一下。

镜像

Docker 镜像就是系统环境的载体。

Docker 镜像是 Docker 容器运行时的只读模板,类似于虚拟主机本体。

从 Docker 镜像仓库中可以找到大量可用的镜像,你可以按照自己的需求自行搜索,比如寻找一个安装了 PyTorch+Jupyter Notebook 的系统镜像。

容器

每一个 Docker 容器都是从 Docker 镜像中创建的。

之所以有容器的存在,因为镜像是只读的。当我们通过镜像运行一个系统环境(虚拟机)时,Docker 就会创建一个容器来容纳这个系统环境。我们在这个环境中进行的修改(包括创建文件、安装新软件包等等),相当于都是在容器中进行的,不会影响到原来的镜像。

在我们想分享修改后(比如安装了新软件包)的系统时,我们可以执行“commit”命令。这时被我们修改过的容器,就会提交到镜像中,形成新版本的镜像。这个过程特别像GitHub的使用。我们从GitHub上clone下代码,修改,然后直到 commit 提交。

简单来说,容器可以视为镜像的“运行态”。

Docker Hub

官方的镜像发布网站,你在这里可以找到自己需要的镜像。

然而在国内,我们往往使用国内的镜像库,比如阿里云、网易蜂巢等等。

3.为什么要用 Docker?

有同学可能有疑问:既然 Docker 也是一种虚拟机,那我用 VMware,VritualBox 不是一样吗?

我们使用 Docker 搭建深度学习环境的理由有三个:

1.轻量级便捷。使用 VMware 等软件还需要经历一个漫长的“安装操作系统”的过程。使用 Docker 只需要从网上找到合适的镜像下载到本地就好了。

2.便于分享。使用 Docker 建立的镜像很小巧,很适合分享。比如你配置好了一个 PyTorch 的镜像,可以直接拷贝给实验室的其它小伙伴。

3.易于部署。如果你在 Docker 容器中训练好一个模型,并且为它搭建了一个 web 可访问的使用接口。那么你可以把这个容器打包成Docker镜像,直接将这个镜像部署到服务器上,无需在服务器上重复布置软件环境。

另外 Docker 运行本身对系统的拖累很低,一般运行镜像并不会导致系统卡顿。此外 Docker 还有良好的资源隔绝机制,以及 Docker 镜像有着“镜像层级版本”的机制。这些都是 Docker 的特性,但目前我们还用不到,所以我们在这不做过多的讨论。

4.实战:9步创建深度学习环境

如何使用 Docker 创建并分享一个深度学习环境呢?需要9个步骤:

  1. 使用 阿里云 镜像站点加速服务

  2. Docker-machine?

  3. 从阿里云镜像获取一个与需求相似的镜像

  4. 把镜像从库里拖拽过来!

  5. 查看并运行镜像

  6. 将容器的修改提交到镜像中

  7. 将镜像上传到阿里云镜像仓库中

  8. 将镜像打包为独立文件

  9. 测试分享出的 Docker 镜像

1.使用 阿里云 镜像站点加速服务

在安装 Docker 后,理论上我们就可以去 Docker Hub 上寻找我们想用的镜像了。不过在国内访问国外的 Docker Hub 速度是非常慢的,所以我选择使用阿里云的镜像仓库。

访问:https://cr.console.aliyun.com/#/accelerator

注册阿里账户并登录。

教程|使用 Docker 安装深度学习环境

选择 Docker 镜像加速器。

在这个界面里我们可以看到属于自己的镜像加速器地址。我们要把这个加速地址配置到 Docker 里,从而让 Docker 默认从加速地址中寻找并下载镜像。

教程|使用 Docker 安装深度学习环境

Linux 操作系统的配置都是通过修改 daemon 配置文件完成的,这个配置看起来比较简单。

Mac 以及 Windows 操作系统由于系统限制,必须使用 docker-machine 来配置加速地址。

教程|使用 Docker 安装深度学习环境

2.Docker-machine?

docker-machine 本质上是又是另一种虚拟机(怎么那么多虚拟机),我们暂且把它理解为一个自带 Docker 的 VirtualBox 虚拟机。

上图配置中第一条命令的意义是:使用阿里的加速地址创建一个 docker-machine 虚拟机并启动。

后三条命令的意义是:通过配置环境变量(只在本终端中有效)用 docker-machine 虚拟机中的 Docker 环境覆盖宿主机系统环境。

执行这三条命令后:

在 Docker-machine 运行期间,在当前的宿主机终端中执行的 Docker 命令,实际上都是由 docker-machine 虚拟机中的 Docker 环境执行的,因为只有 docker-machine 虚拟机配置了阿里的加速地址。

3.从阿里云镜像获取一个与需求相似的镜像

在镜像加速器地址配置完毕后,我们就可以去寻找需要的 Docker 镜像了。

我想找个已经安装好 Python3.6 的镜像,以便进一步安装最新的 PyTorch 以及其它相关的软件包,那么我搜索“python36”。

教程|使用 Docker 安装深度学习环境

4.把镜像从库里拽过来!

教程|使用 Docker 安装深度学习环境

可以点击镜像详情,查看镜像的外网地址,然后把镜像拽到本地上来(之前必须已经配置好阿里加速器)。

docker pull registry.cn-shenzhen.aliyuncs.com/chenxl/python3.6

5.查看并运行镜像

我们可以使用命令 docker images 查看镜像信息:

教程|使用 Docker 安装深度学习环境

使用 docker run 命令将镜像运行为可交互的 shell:

教程|使用 Docker 安装深度学习环境

在命令中:

  • -t:在新容器内指定一个伪终端或终端。

  • -i:允许你对容器内的标准输入 (STDIN) 进行交互。

在命令运行后,我们可以观察到当前 shell 里的提示符已经从“Alex-MacBook-Pro”已经改成了“root@f8ad6eb17624”,这证明我们已经在 Docker 容器的系统环境中了。

我们按照常规的方式安装深度学习环境,比如用 pip 命令安装 PyTorch、torchvision 等软件包,并将项目源码拷贝到运行的容器中。

在宿主机与 Docker 容器间拷贝数据可使用 docker cp 命令。

在容器里进行一系列的操作后,我们的工作完成,可以运行 exit 命令退出当前 shell。

此时我们可以观察一下当前的容器(docker ps -al)与之前的镜像(docker images),可以看到容器与镜像同时独立存在,并且可以看到在容器中正在运行的项目(交互shell,即/bin/bash)。

教程|使用 Docker 安装深度学习环境

6.将容器的修改提交到镜像中

假设我们在容器里安装了新的软件包并且跑通了自己的项目,现在打算把容器提交成镜像分享给其它小伙伴。

需要操作的流程如下:

首先查看容器的ID(docker ps -al):

教程|使用 Docker 安装深度学习环境

将容器提交到镜像中,同时我们给它指定新的名字(docker commit [ID] [NEW_name]):

教程|使用 Docker 安装深度学习环境

提交完成后我们再查看本机存在的镜像(docker images):

教程|使用 Docker 安装深度学习环境

可以看到经我们修改后的新镜像“python36/pytorch”独立存在。

有句话叫“取之于民,用之于民”。

我们可以把这个包含最新版 PyTorch 环境的镜像上传到阿里云的镜像库中,让更多的人可以使用我们的镜像。

7.将镜像上传到阿里云镜像仓库中

我们首先在阿里云上创建一个镜像仓库:

教程|使用 Docker 安装深度学习环境

然后我们需要在当前的终端中登录阿里云仓库(之前必须配置了阿里云加速器):

docker login --username=USER_NAME registry.cn-hangzhou.aliyuncs.com

要把镜像上传到指定的镜像库,需要先对镜像进行命名。整个名字由冒号“:”分成两部分,前部分是我们在上一步建立的镜像仓库的地址,后部分是对当前镜像打的标签(TAG)。TAG的存在是为了允许一个镜像库里存在多个版本的镜像。

教程|使用 Docker 安装深度学习环境

好,这时候万事具备了,我们运行 push 命令将镜像推送到云镜像库中。

教程|使用 Docker 安装深度学习环境

在上传结束后,我们就可以在云镜像库的web管理界面看到我们的镜像了。

教程|使用 Docker 安装深度学习环境

8.将镜像打包为独立文件

除了上传云镜像库,我们也可以直接将镜像打包成一个独立文件,拷贝分享给别人使用。

同样,我们使用命令 docker images 查看镜像的名字:

教程|使用 Docker 安装深度学习环境

再使用 docker save -o 将目标镜像打包成文件。

教程|使用 Docker 安装深度学习环境

9.测试分享出的 Docker 镜像

现在让我们测试下之前导出的镜像。

首先尝试导入刚刚在本地打包的镜像:

教程|使用 Docker 安装深度学习环境

导入成功。

再试下从阿里云镜像库中把之前建立的镜像 pull 下来:

教程|使用 Docker 安装深度学习环境
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容