【Docker光速搞定深度学习环境配置!】

你是否还在用压缩包打包你的代码,然后在新的机器重新安装软件,配置你的环境,才能跑起来?

特别有这样的情况:诶,在我电脑跑的好好的,怎么这里这么多问题?

当项目比较简单的时候,装个Mysql、Nodejs、Anaconda并不是难事,但如果你的环境更多,新机器更多,你还一个个配置,估计你会疯掉。

还有就是最恶心的深度学习环境,配置Cuda,Cudnn,Pytorch,TensorFlow,Opencv,GDAL就花一天时间,打开百度,弹出来各种各样的教程,为了解决各种Bug眼睛都看花了,找不到一个可以解决你的问题的。

还有前端项目,经常会遇到的Node-Sass缺少Python依赖,还有Nodejs版本问题(狗头)

那么是否有一个东西可以一键部署,不用这么麻烦配置一堆东西的解决方案呢?

Docker!!!Of course!!!

本期就教大家如何用Docker快速,配置最恶心的深度学习环境。考虑大多数人用的是windows,本教程将以win10作为系统进行展开。
Lets GO!!!!!!

前言

Docker是什么?你看Docker的图标就知道了,一个鲸鱼承载了所有的仓库,所有的代码、程序、软件都在Dcoker。

我们抛开Dcoker,先介绍一下两个名字,你一定听过:容器,镜像

容器可以说是一个Linux轻量级的系统,它提供了一种隔离的环境,使得应用程序能够在其中运行,而不受主机系统的影响。

镜像是一个轻量级、独立、可执行的软件包,包含运行应用程序所需的所有内容。

镜像相当于设计稿,Docker根据它可以创建一模一样的产品(容器)。

镜像是容器的基础,我们可以根据已有的镜像A创建自己的容器Container_A,因为容器是个简易系统,我们可以肆意安装东西,再把我们的容器Container_A变成镜像B,别人可以通过我们镜像B创建新的容器Container_B,在这个容器中就复现一模一样的效果啦!

而Docker说白了就是利用容器技术,将应用程序及其依赖项打包到一个系统(容器)中,使得在任何环境中以相同的方式运行,仅此而已。

而有了Docker我们只需要,找到对应的母鸡(镜像),下个蛋(容器)就行。

配置深度学习环境?我才不配!我直接用别人的镜像生成一个容器就行了啊!
你又不是不知道cuda下的多慢,cudnn还要登录!

Docker和虚拟机

那么问题来了,我知道Docker了,那是不是和虚拟机很像啊?我只能说一个鸡蛋一个恐龙蛋。

虚拟机是将一台机器转换为多台机器的物理层的抽象。每个虚拟机都是包含操作系统、应用程序、必要的二进制文件和库的完整副本。

可以看下图右边就是虚拟机架构,每个虚拟机都有自己的系统,而Docker(左)架构,是应用层的抽象,多个容器与其他容器共享一个操作系统内核,这样占用的资源比虚拟机少很多。

光速配置

废话少说,Docker,启动!

安装docker

直接去Docker官网下载exe文件执行就行,Docker非常人性化,不需要你设置安装目录,直接给你装c盘,嘻嘻。

运行Docker,如果你第一次安装,会提示你 WSL 2 installation is incomplete.

这说明我们还需要安装Windows的子系统WSL

安装wsl

Windows Subsystem for Linux(WSL),是适用于Linux的Windows子系统,通过WSL我们可以在Windows里面运行Linux。
CMD命令行运行:

wsl --install

为了让window支持我们的Linux,控制面板检查一下WSL是否勾选了:

重启电脑!!!

安装Ubuntu(可略)

这下可以安装Linux咯,可以根据自己需要选择Ubuntu版本,打开微软商店下载即可

重启电脑后,可以在Docker设置里集成我们的Linux版本

配置Docker

电脑资源都是有限的,不可能都给Docker,因此需要给Docker分配一下资源上限。
在用户目录(比如:C:\Users\lc)下建立一个新文件,叫做.wslconfig,复制以下内容,给Docker设置它的最大运行内存,CPU核心数

[wsl2]
#wsl占用内存
memory=8GB
#交换分区内存(swap类似于Windows的虚拟内存,从硬盘中划分出一个分区,
#在物理内存不够时,就会将硬盘空间虚拟成内存使用,用于解决内存不足的情况。)
swap=8GB
#限制核心数
processors = 6

内存记得别写满,不然卡死,就好给本机留一点,我是16GB的内存,给了Docker一半的容量,也就是Docker再怎么吃内存,不会超过8GB

命令行运行:

wsl --shutdown

重启Docker生效

寻找镜像

Docker Hub给我们准备了很多好用的镜像,像Pytorch、TensorFlow都准备了自己的镜像,里面配置了cuda、cudnn和python,我们选一个需要的就行。


随便起一个终端CMD运行我们复制的命令,然后打开发现,wow,多了一个镜像!

创建容器

继续起一个终端CMD运行以下命令,最后面就是你刚才下载的镜像名

# 不使用GPU
docker run -it pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime
# 使用GPU
docker run -it --gpus all pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime

执行以上命令,就会根据镜像创建一个容器,并且进入容器的命令行,此时尽情安装你需要的东西吧。

首先检测一下Pytorch可不可以检查到GPU吧!哇真的可以耶!

可以在Docker看到可视化的容器

在容器里面可以看到文件目录、资源占用、打印等信息:

Vscode

配合Vscode的Docker插件,我们可以直接进入Docker容器里面编程:

发布镜像

随便起一个终端CMD运行命令:

# 1.容器转镜像
docker commit 【容器名】 【镜像名字:例:myproj】
# 2.镜像打包成压缩包tar文件
docker save -o myproj.tar myproj

引用

https://www.docker.com/resources/what-container/

总结

写了一堆,希望能帮助你告别深度学习环境配置的烦恼!

这里是GIS宇宙,我们下期再见!

商业合作请私信公众号

本人其他平台账号:

  • 微信公众号:GIS宇宙
  • CSDN:GIS_宇宙
  • 知乎:GIS宇宙
  • 掘金:GIS宇宙

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java Web实现案例 :实现用户登录功能

目录 零、本节学习目标 一、纯JSP方式实现用户登录功能 (一)实现思路 (二)实现步骤 1、创建Web项目 2、创建登录页面 3、创建登录处理页面 4、创建登录成功页面 5、创建登录失败页面 6、编辑项目首页 (三&…

全同态加密正在改变行业游戏规则?

PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 隐私专业人士正在见证隐私技术的一场革命。新的隐私增强技术的出现和成熟是这场革命的一部分,这些技术允许数据使用和…

Python---进程

1. 进程的介绍 在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。 2. 进程的概念 一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程&#xf…

RNN梯度爆炸实验

前情回顾 from torch.utils.data import Dataset import torch.nn as nn import torch.nn.functional as F import os import random import torch from nndl import Accuracy from nndl import RunnerV3 from torch.utils.data import DataLoader import matplotlib.pyplot a…

Html+单页面引入element以及Vue框架引用地址报错(unpkg.com国内无法访问可代替方案)

问题 单页面引入element以及vue 地址报错,请求超时 使用的引用地址是官网上提供,但是没解决问题 一、原因: unpkg也没有幸免于难,也被墙了,unpkg上的相关资源都不能访问,才导致项目资源加载不出。 二、…

微服务——服务异步通讯(MQ高级)

MQ的一些常见问题 消息可靠性 生产者消息确认 返回ack,怎么感觉这么像某个tcp的3次握手。 使用资料提供的案例工程. 在图形化界面创建一个simple.queue的队列,虚拟机要和配置文件里面的一样。 SpringAMQP实现生产者确认 AMQP里面支持多种生产者确认的类…

MySQL job 定时任务

目录 介绍 优点: 缺点: 使用场景: 案例 创建表 -- 创建定时任务 每一分钟插入一条数据 执行结果 -- 查询定时任务 ENABLED--启用 DISABLED--禁用 -- 查询定时任务 -- 启用定时任务 ​-- 禁用定时任务 ​-- 删除定时任务 …

【mybatis】mapper.xml映射文件

目录 一.概述 二.了解mapper.xml文件 namespaceidresultType指定映射文件的路径 一.概述 mapper.xml 是一个 MyBatis 的映射文件,用于定义 SQL 语句和结果映射。它是一个 XML 文件,通常放置在项目的资源目录下。 随着mybatis框架的发展,myb…

Spring IOC 原理(二)

Spring IOC 原理 概念 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实…

数据结构与算法--贪心算法

贪心算法 应用场景 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 介绍 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择…

第三周:Python能力复盘

资料: 《笨办法学Python》阅读地址:https://www.bookstack.cn/read/LearnPython3TheHardWay 《廖雪峰Python教程》阅读地址:http://t.cn/RK0qGu7 《机器学习numpy与pandas基础》:https://zhuanlan.zhihu.com/p/639733816 《matplo…

代码随想录算法训练营 | day55 动态规划 392.判断子序列,115.不同的子序列

刷题 392.判断子序列 题目链接 | 文章讲解 | 视频讲解 题目:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。&#xff0…

SHT10温湿度传感器——STM32驱动

———————实验效果——————— 🎄硬件外观 🎄接线 🎈 3.3V供电 🎈 IIC通讯 🎄 代码获取 🎈 查看下方 ———————END———————

【深度学习初探】Day32 - 三维点云数据基础

【深度学习初探】Day32 - 三维点云数据基础 文章目录 【深度学习初探】Day32 - 三维点云数据基础一、点云的定义二、点云的获取三、点云的属性四、点云的存储格式4.1 pts4.2 LAS4.3 PCD4.4 .xyz4.5 .pcap 五、三维点云的表示方法5.1 二维投影5.2 三维体素5.3 原始点云5.4 图 六…

(已解决)如何使用matplotlib绘制小提琴图

网上很多人使用seaborn绘制小提琴图,本人暂时不想学新的东西,就是懒。本文介绍如何使用matplotlib绘制小提琴图,很多其他博客只是使用最简单的语法,默认小提琴颜色会是蓝色,根本改不了。本文使用了一点高级的用法&…

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序 文章目录 排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序前言:冒泡排序插入排序希尔排序选择排序堆排序快速排序--交换排序三数取中快速排序hoare版本快速排序挖坑法快速排序前后指…

Linux---Ubuntu软件卸载

1. 软件卸载的介绍 Ubuntu软件卸载有两种方式: 离线安装包的卸载(deb 文件格式卸载)在线安装包的卸载(apt-get 方式卸载) 2. deb 文件格式卸载 命令格式: sudo dpkg –r 安装包名 -r 选项表示安装的卸载 dpkg 卸载效果图: 3. apt-get 方式卸载 命令格式: …

JMeter如何从数据库中获取数据并作为变量使用?

前言 JMeter如何从数据库中获取数据并作为变量使用?这在我们使用JMeter做接口测试、压力测试时经常碰到,今天通过两个示例(实现MySQL数据库的查询结果的单值引用和多值引用)进行说明。这里虽然以MySQL数据库做说明,但…

Oracle VM VirtualBox使用——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

简述: Oracle VM VirtualBox是一款开源虚拟机软件,由德国Innotek公司开发,后被Sun Microsystems公司收购,并最终被甲骨文公司收购。它支持在Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android等操作系统上创建虚拟…

06.deque 容器

6、deque 容器 功能: 双端数组,可以对头端进行插入删除操作 deque 与 vector 区别: vector 对于头部的插入删除效率低,数据量越大,效率越低deque 相对而言,对头部的插入删除速度会比 vector 快vector 访…