深度学习环境配置系列文章(五):配置Docker深度学习开发环境

news2025/1/20 12:07:47

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

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


第五章文章目录

  • 深度学习环境配置系列文章目录
  • 前言
  • 一, Docker安装的先决条件
  • 二, 安装 Docker Desktop
  • 三, 拉取Docker镜像
  • 四,Docker的终端使用快速入门
    • 4.1镜像的使用
      • 4.1.1列出镜像列表
      • 4.1.2获取一个新的镜像
      • 4.1.3删除镜像
      • 4.1.4创建镜像
    • 4.2容器的使用
      • 4.2.1启动容器
      • 4.2.2进入容器
      • 4.2.3退出/停止/删除容器
      • 4.2.4导出/导入容器
  • 五,VScode使用Docker的快速入门
    • 5.1, 先决条件
    • 5.2, 连接顺序


前言

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连接容器。

到此,大功告成~


文章出自:http://www.whnw.com.cn/news/1707661.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI工具分享第二期:11款国内外AI绘画提示词工具整理

工具整理自未来百科AI工具箱&#xff0c;更多提示词工具可自行寻找 Midjourney中文教程 Midjourney 学习导航 PromptHero 描述 通过 DALL-E、Stable Diffusion、Midjourney 等 AI 模型搜索数以百万计的艺术图像… PromptDen AI 在线社区促使爱好者联系、协作和分享想法。 …

支付系统设计三:渠道网关设计07-后置处理

文章目录 前言一、订单数据更新1. 领域模型更新服务工厂2. 聚合创建工厂2.1 数据库更新服务2.2 聚合创建工厂 二、限流渠道入队三、异步通知1. 判断是否需要通知2. 组装异步通知报文3. 获取异步通知协议类型3. 异步通知 总结 前言 本篇将继业务处理之后的后置处理逻辑进行介绍&…

瑞吉外卖 - 后台系统退出功能(4)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

瑞吉外卖 - 项目介绍(1)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

CSS盒子模型、表格标签(table)、表单标签(form)

盒子&#xff1a;页面中所有的元素&#xff08;标签&#xff09;&#xff0c;都可以看做是一个 盒子&#xff0c;由盒子将页面中的元素包含在一个矩形区域内&#xff0c;通过盒子的视角更方便的进行页面布局 盒子模型组成&#xff1a;内容区域&#xff08;content&#xff09;…

Qt扫盲-QScatterSeries理论总结

QScatterSeries理论总结 一、概述二、使用三、扩展四、扩展使用1.创建描述散点图对象2. 对散点图像添加值3. 自定义散点4. 将绘图设备与散点图对象联系5. 设置坐标轴6. 将绘图设备与GUI控件绑定并显示 一、概述 QScatterSeries 类以散点图的形式呈现数据。散点数据在图表上显示…

基于jdk1.8的Java服务监控和性能调优

JVM的参数类型 X参数 非标准参数-Xint: 解释执行-Xcomp: 第一次使用就编译成本地代码-Xmixed: JVM自己来决定是否编译成本地代码 默认使用的是mixed mode 用的不多, 只需要做了解, 用的比较多的是XX参数 XX参数 非标准化参数相对不稳定主要用来JVM调优和Debug Boolean: …

Vivado综合属性系列之一 ASYNC_REG

目录 一、属性简介 二、示例 2.1 工程说明 ​ ​2.2 工程代码 ​ ​2.3 生效确认 一、属性简介 ASYNC_REG属性的作用对象为寄存器&#xff0c;寄存器添加该属性后&#xff0c;即表明寄存器的数据输入口D接收的是来自异步时钟触发器的数据或是该寄存器在一个同步链中属于…

【CSS系列】第九章 · CSS定位和布局

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Uni-app 离线打包 apk

Uni-app 离线打包 apk 1. Android Studio 下载 Android Studio官网 2. HBuilderX下载 HBuilderX下载 3. App离线SDK下载 Android 离线SDK - 正式版 下载后解压文件&#xff0c;将 HBuilder-Integrate-AS 重命名 build-template 并拷贝到一个专门打包用的文件夹下作为打包…

一行代码绘制高分SCI限制立方图

一、概述 Restricted cubic splines (RCS)是一种基于样条函数的非参数化模型&#xff0c;它可以可靠地拟合非线性关系&#xff0c;可以自适应地调整分割结点。在统计学和机器学习领域&#xff0c;RCS通常用来对连续型自变量进行建模&#xff0c;并在解释自变量与响应变量的关系…

抑梯度异常初始化参数(防止梯度消失和梯度爆炸)

这里设置3种参数初始化的对比&#xff0c;分别是&#xff1a;全初始化为0、随机初始化、抑梯度异常初始化。 首先是正反向传播、画图、加载数据所需的函数init_utils.py&#xff1a; # -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as plt import sklea…

双层优化入门(3)—基于智能优化算法的求解方法(附matlab代码)

前面两篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法&#xff0c;以及使用yalmip工具箱求解双层优化的方法&#xff1a; 双层优化入门(1)—基本原理与求解方法 双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码) 除了数学规划方法之外&#xff0c;…

springboot+vue大学生体质测试管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的大学生体质测试管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xf…

how2heap-fastbin_dup.c

不同libc版本的fastbin_dup.c源码有点小区别&#xff1a;主要是有tcache的&#xff0c;需要先填充 以下为有tcache的源码示例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <assert.h>int main() {setbuf(stdout, NULL);printf("This…

诗词·宇宙之梦

宇宙之梦 重力枷锁必将断&#xff0c;携君翱翔万里空。 迷途夜路寻踪迹&#xff0c;一声呼唤莫轻忽。 寻觅中&#xff0c;见红瞳&#xff0c;决不装假觉清白。 黑泽之中君沉沦&#xff0c;放之不下心怎静。 重力终将解开放&#xff0c;卫星翔空自由翱。 重量减半去忧愁&#xf…

RobotFramework+Eclispe环境安装篇

环境安装是学习任何一个新东西的第一步&#xff0c;这一步没走舒坦&#xff0c;那后面就没有心情走下去了。 引用名句&#xff1a;工欲善其事必先利其器&#xff01;&#xff01; Robotframework&#xff1a;一款 自动化测试框架。 Eclipse&#xff1a;一款编辑工具。可以编…

Android MVVN 使用入门

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种基于数据绑定的设计模式&#xff0c;它与传统的 MVC 和 MVP 模式相比&#xff0c;更加适合处理复杂的 UI 逻辑和数据展示。在 Android 开发中&#xff0c;MVVM 通常使用 Data Binding 和 ViewModel 实现。 下面是一个简…

正则化解决过拟合

本片举三个例子进行对比&#xff0c;分别是&#xff1a;不使用正则化、使用L2正则化、使用dropout正则化。 首先是前后向传播、加载数据、画图所需要的相关函数的reg_utils.py&#xff1a; # -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as plt impor…

双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码)

上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法&#xff1a; 双层优化入门(1)—基本原理与求解方法 这篇博客将介绍使用yalmip的双层优化问题的求解方法。 1.KKT函数 通过调用yalmip工具箱中的KKT函数&#xff0c;可以直接求出优化问题的KKT条件&#x…