GPU配置太麻烦?来试试Docker一键配置GPU深度学习开发环境吧

简介: docker环境无需安装cuda、cuDNN,docker镜像安装完毕后,就都好了,一键部署好之后,可以随意迁移,再也不用环境发愁了。

这是机器未来的第3篇文章,由机器未来原创

写在前面:

• 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!

• 专栏简介:记录博主从0到1掌握物体检测工作流的过程,具备自定义物体检测器的能力

• 面向人群:具备深度学习理论基础的学生或初级开发者

• 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待

• Python零基础快速入门系列

• 快速入门Python数据科学系列

• 人工智能开发环境搭建系列

• 机器学习系列

• 物体检测快速入门系列

• 自动驾驶物体检测系列

• ......

@[toc]

1. 概述

在《物体检测快速入门系列(2)-Windows部署GPU深度学习开发环境》一文中已经描述了如何在Windows环境下部署GPU深度学习开发环境,但是要我推荐的话,我还是倾向于docker环境,无需安装cuda、cuDNN,docker镜像安装完毕后,就都好了,一键部署好之后,可以随意迁移,再也不用环境发愁了。

Docker运行于linux环境,windows环境一直兼容不好,鉴于博主没有安装双系统,研究了一下如何在Windows上部署Docker开发环境,发现真可行,微软的WIN10的linux子系统WSL2已经可以支持GPU映射到Docker了。

好了,开搞!

编辑

搜图

Moby-run-900x551.png

2. 安装linux子系统

windows目前已支持WSL2,可支持将主机的GPU映射到docker中运行。

  • • 查看windows平台可支持的linux子系统列表

1

wsl--list--online

1

PSC:\Users\25267>wsl.exe--list--online

2

以下是可安装的有效分发的列表。

3

请使用“wsl--install-d<分发>”安装。

4

NAME            FRIENDLYNAME

5

Ubuntu          Ubuntu

6

Debian          DebianGNU/Linux

7

kali-linux      KaliLinuxRolling

8

openSUSE-42     openSUSELeap42

9

SLES-12         SUSELinuxEnterpriseServerv12

10

Ubuntu-16.04    Ubuntu16.04LTS

11

Ubuntu-18.04    Ubuntu18.04LTS

12

Ubuntu-20.04    Ubuntu20.04LTS

  • • 安装子系统 推荐安装Ubuntu20.04

1

PSC:\Users\25267>wsl--install-d  Ubuntu-20.04

2

Ubuntu20.04LTS已安装。

3

正在启动Ubuntu20.04LTS…

  • • 设置默认子系统

1

PSC:\Users\25267>wsl--setdefaultUbuntu-20.04

2

PSC:\Users\25267>wsl-l-v

3

 NAME                   STATE           VERSION

4

*Ubuntu-20.04           Stopped         2   # *标识的就是默认子系统

5

 docker-desktop-data    Stopped         2

6

 Ubuntu-18.04           Stopped         2

7

 docker-desktop         Stopped         2

3. 安装Windows平台Docker-Desktop

  • • 下载 下载链接:点击此处
  • • 安装 安装过程略,无脑安装即可。

4. 安装GPU的Docker镜像

4.1 拉取Docker镜像

1

dockerpulltensorflow/tensorflow:2.8.0rc1-gpu-jupyter

其它镜像查询地址:传送门

  • • 查看下载后的镜像

1

dockerimages

1

PSC:\Users\25267>dockerimages

2

REPOSITORY               TAG                              IMAGEID       CREATED         SIZE

3

mongo                    latest                           27dd1be4bed1   2weeksago     700MB

4

ubuntu                   20.04                            825d55fb6340   5weeksago     72.8MB

5

pytorch/pytorch          1.11.0-cuda11.3-cudnn8-runtime   ca04e7f7c8e5   2monthsago    5.82GB

6

docker/getting-started   latest                           bd9a9f733898   3monthsago    28.8MB

7

tensorflow/tensorflow    2.8.0-gpu-jupyter                cc9a9ae2a5af   3monthsago    5.99GB

8

tanliyuan123/artipub     1.2.0                            475119ff846a   14monthsago   1.71GB

9

pytorch/pytorch          1.6.0-cuda10.1-cudnn7-devel      bb833e4d631f   21monthsago   7.04GB

10

pytorch/pytorch          1.3-cuda10.1-cudnn7-runtime      ba2da111b833   2yearsago     4.32GB

tensorflow/tensorflow:2.8.0-gpu-jupyter既是拉取的镜像

4.2 基于镜像创建容器

1

dockerrun--gpusall-itd-ve:/dockerdir/docker_work/:/home/zhou/-p8888:8888--ipc=hostcc9a9ae2a5afjupyternotebook--no-browser--ip=0.0.0.0--allow-root--NotebookApp.token=--notebook-dir='/home/zhou/'

参数详解: --gpus all:不加此选项,nvidia-smi命令会不可用
-i: 交互式操作。
-t: 终端。
-p:端口映射,[Host Port]:[Container Port]
--ipc=host,启用进程间通讯
cc9a9ae2a5af:镜像ID
-d:后台运行,需要使用【docker exec -it 容器id /bin/bash】进入容器

  • • jupyternotebook启动命令:

1

jupyternotebook--no-browser--ip=0.0.0.0--allow-root--NotebookApp.token=--notebook-dir='/home/zhou/'

4.3 查询容器ID

1

dockerps

编辑

搜图

1

进入容器

1

dockerexec-itcc58e655b170

1

PSC:\Users\25267>dockerexec-itcc58e655b170/bin/bash

2

________                               _______________

3

___  __/__________________________________  ____/__  /________      __

4

__  /  _  _ \_  __ \_  ___/  __ \_  ___/_  /_   __  /_  __ \_|/| //

5

_  /   /  __/  // /(__  )//_//  /   _  __/   _  // /_//_ |/|/ /

6

/_/    \___//_/ /_//____/ \____//_/    /_/      /_/  \____/____/|__/

7

WARNING: Youarerunningthiscontainerasroot, whichcancausenewfilesin

8

mountedvolumestobecreatedastherootuseronyourhostmachine.

9

Toavoidthis, runthecontainerbyspecifyingyouruser's userid:

10

$dockerrun-u$(id-u):$(id-g) args...

4.4 查询docker是否已经支持GPU

  • • 查询cuda版本

1

root@bbe3199deccc:/# nvidia-smi

2

SunMay1514:19:512022      

3

+-----------------------------------------------------------------------------+

4

|NVIDIA-SMI470.85       DriverVersion: 472.47       CUDAVersion: 11.4     |

5

|-------------------------------+----------------------+----------------------+

6

|GPU  Name        Persistence-M|Bus-Id        Disp.A|VolatileUncorr. ECC|

7

|Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage|GPU-Util  ComputeM. |

8

|                               |                      |               MIGM. |

9

|===============================+======================+======================|

10

|   0  NVIDIAGeForce...  Off  |00000000:01:00.0  On|                  N/A|

11

|N/A   62C    P8     5W/  N/A|   1356MiB/  6144MiB|    ERR!      Default|

12

|                               |                      |                  N/A|

13

+-------------------------------+----------------------+----------------------+

14

+-----------------------------------------------------------------------------+

15

|Processes:                                                                  |

16

|  GPU   GI   CI        PID   Type   Processname                  GPUMemory|

17

|        ID   ID                                                   Usage      |

18

|=============================================================================|

19

|  Norunningprocessesfound                                                 |

20

+-----------------------------------------------------------------------------+

  • • 查询cuDNN版本

1

root@bbe3199deccc:/# nvcc -V

2

nvcc: NVIDIA (R) Cudacompilerdriver

3

Copyright (c) 2005-2021NVIDIACorporation

4

BuiltonSun_Feb_14_21:12:58_PST_2021

5

Cudacompilationtools, release11.2, V11.2.152

6

Buildcuda_11.2.r11.2/compiler.29618528_0

5. 安装VsCode Docker支持

5.1 安装VsCode

安装过程略。

5.2 安装Docker插件

编辑

搜图

image-20220515215552303

5.3 附着容器映射到VsCode

编辑

搜图

image-20220515215822873

  • • 附着到VsCode后的效果,已经连接到Docker容器

5.4 安装python支持到容器

在已经链接到容器的VsCode界面中,添加Python支持

5.5 安装jupyter插件到容器VsCode

编辑

搜图

image-20220515220526516

5.6 新建或打开notebook文件选择内核

编辑

搜图

image-20220515220742997

5.7 测试GPU训练模型

1

importnumpyasnp

2

importtensorflowastf

3

fromtensorflowimportkeras

4

fromtensorflow.keras.modelsimportSequential

5

fromtensorflow.keras.layersimportDense

6

fromtensorflow.keras.optimizersimportSGD

7

importtime

8

# config=tf.ConfigProto()

9

# config.gpu_options.allow_growth=True

10

# session=tf.Session(config=config)

11

# 启用GPU

12

fromtensorflow.compat.v1importConfigProto# tf2.x的写法

13

config=ConfigProto()

14

config.gpu_options.per_process_gpu_memory_fraction=0.6

15

tf.compat.v1.Session(config=config)

16

# 构建数据集

17

X_data=np.linspace(-1,1,1000)[:, np.newaxis]

18

noise=np.random.normal(0,0.05,X_data.shape)

19

y_data=np.square(X_data) +noise+0.5

20

print("shape")

21

print(X_data.shape)

22

# 构建神经网络

23

model=Sequential()

24

model.add(Dense(10, input_shape=(1,), kernel_initializer='normal', activation='relu'))

25

#model.add(Dense(5, activation='relu'))

26

# vs分类为softmax激活

27

model.add(Dense(10000, kernel_initializer='normal'))

28

model.add(Dense(10000, kernel_initializer='normal'))

29

model.add(Dense(100, kernel_initializer='normal'))

30

model.add(Dense(1, kernel_initializer='normal'))

31

#sgd=SGD(lr=0.001)

32

model.compile(loss='mean_squared_error', optimizer="sgd") #adam

33

# 训练epoch=10, 30, 50, viewtheresults

34

start=time.time()

35

model.fit(X_data, y_data, epochs=50, batch_size=16, verbose=1)

36

end=time.time()

37

# 在原数据上预测

38

y_predict=model.predict(X_data)

39

#print(y_predict)

40

model.summary()

41

print("training time {}".format(end-start))

训练效果及GPU使用情况见下图

编辑

搜图

9

这就是Docker的优势,可以直接安装已经配置好开发环境的linux镜像。

至此,Windows部署Docker GPU深度学习开发环境搭建完毕!

《物体检测快速入门系列》快速导航:

  • • 物体检测快速入门系列(1)-基于Tensorflow2.x Object Detection API构建自定义物体检测器
  • • 物体检测快速入门系列(2)-Windows部署GPU深度学习开发环境
  • 物体检测快速入门系列(3)-Windows部署Docker GPU深度学习开发环境
  • 物体检测快速入门系列(4)-TensorFlow 2.x Object Detection API快速安装手册

编辑

搜图

slogon-2


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6天前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
28 1
|
29天前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
29天前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
11天前
|
网络协议 Docker 容器
docker中的DNS配置
【10月更文挑战第5天】
108 1
|
17天前
|
存储 Ubuntu JavaScript
如何使用Docker优化你的开发环境配置
如何使用Docker优化你的开发环境配置
|
18天前
|
Docker 容器
利用Docker Compose优化开发环境的配置
在现代软件开发中,环境一致性至关重要。开发人员常需在不同机器间复制环境配置,而Docker Compose提供了一种简便有效的方法来定义和运行多容器Docker应用程序,确保开发、测试和生产环境一致,简化团队协作,提高开发效率。通过YAML文件配置服务、网络和卷,使用简单命令即可启动和停止服务。本文将介绍Docker Compose的核心优势、基本使用方法及高级功能,帮助你更好地管理和优化开发环境。
|
29天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
1月前
|
Linux Docker Windows
Docker配置https证书案例
本文介绍了如何为Docker的Harbor服务配置HTTPS证书,包括安装Docker和Harbor、修改配置文件以使用证书、生成自签名证书、配置证书以及验证配置的步骤。
92 2
Docker配置https证书案例
|
1月前
|
机器学习/深度学习 测试技术 PyTorch
深度学习之测量GPU性能的方式
在深度学习中,测量GPU性能是一个多方面的任务,涉及运行时间、吞吐量、GPU利用率、内存使用情况、计算能力、端到端性能测试、显存带宽、框架自带性能工具和基准测试工具等多种方法。通过综合使用这些方法,可以全面评估和优化GPU的性能,提升深度学习任务的效率和效果。
120 2
|
2月前
|
jenkins Java 持续交付
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave
jenkins学习笔记之十九:Docker安装jenkins master及动、静态配置slave