你是否还在用压缩包打包你的代码,然后在新的机器重新安装软件,配置你的环境,才能跑起来?
特别有这样的情况:诶,在我电脑跑的好好的,怎么这里这么多问题?
当项目比较简单的时候,装个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命令行运行:
css
wsl --install
为了让window支持我们的Linux,控制面板检查一下WSL是否勾选了:
重启电脑!!!
安装Ubuntu(可略)
这下可以安装Linux咯,可以根据自己需要选择Ubuntu版本,打开微软商店下载即可
重启电脑后,可以在Docker设置里集成我们的Linux版本
配置Docker
电脑资源都是有限的,不可能都给Docker,因此需要给Docker分配一下资源上限。 在用户目录(比如:C:\Users\lc)下建立一个新文件,叫做.wslconfig,复制以下内容,给Docker设置它的最大运行内存,CPU核心数
ini
[wsl2]
#wsl占用内存
memory=8GB
#交换分区内存(swap类似于Windows的虚拟内存,从硬盘中划分出一个分区,
#在物理内存不够时,就会将硬盘空间虚拟成内存使用,用于解决内存不足的情况。)
swap=8GB
#限制核心数
processors = 6
内存记得别写满,不然卡死,就好给本机留一点,我是16GB的内存,给了Docker一半的容量,也就是Docker再怎么吃内存,不会超过8GB
命令行运行:
arduino
wsl --shutdown
重启Docker生效
寻找镜像
Docker Hub给我们准备了很多好用的镜像,像Pytorch、TensorFlow都准备了自己的镜像,里面配置了cuda、cudnn和python,我们选一个需要的就行。
随便起一个终端CMD运行我们复制的命令,然后打开发现,wow,多了一个镜像!
创建容器
继续起一个终端CMD运行以下命令,最后面就是你刚才下载的镜像名
bash
# 不使用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运行命令:
ruby
# 1.容器转镜像
docker commit 【容器名】 【镜像名字:例:myproj】
# 2.镜像打包成压缩包tar文件
docker save -o myproj.tar myproj
引用
总结
写了一堆,希望能帮助你告别深度学习环境配置的烦恼!
这里是GIS宇宙,我们下期再见!
商业合作请私信公众号
本人其他平台账号:
- 微信公众号:GIS宇宙
- CSDN:GIS_宇宙
- 知乎:GIS宇宙
- 掘金:GIS宇宙