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


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
9月前
|
Kubernetes 关系型数据库 文件存储
手把手教你完成极空间 NAS Docker 镜像加速配置
本教程详细介绍了如何在极空间NAS上配置轩辕镜像加速器,以提升Docker镜像的下载速度与稳定性。内容涵盖账号注册、网络确认、加速器设置及验证方法,并提供常见问题解决方案,帮助用户高效完成容器化应用部署。
3446 1
|
12月前
|
Prometheus 监控 Cloud Native
Prometheus配置docker采集器
本文介绍了如何使用 Prometheus 监控 Docker 容器,涵盖环境准备、配置文件编写及服务启动等步骤。首先确保安装 Docker 和 Docker Compose,接着通过 `docker-compose.yml` 配置 Prometheus 和示例应用。创建 `prometheus.yml` 指定数据采集目标,最后用 `docker-compose up -d` 启动服务。文章还展示了甘特图和类图,帮助理解服务状态与关系,助力提升系统可靠性和可维护性。
519 11
|
9月前
|
文件存储 数据安全/隐私保护 开发者
群晖NAS Docker镜像源加速配置教程
本教程介绍了群晖NAS用户如何通过配置轩辕镜像加速服务提升Docker镜像拉取速度。内容包括配置前准备、详细设置步骤及日常使用说明,帮助用户快速完成配置并享受高效稳定的镜像下载体验。
5492 60
|
Docker 容器 文件存储
飞牛fnOS Docker镜像加速配置全攻略
本文介绍了如何在飞牛fnOS中配置Docker镜像加速服务,通过设置轩辕镜像仓库加速器,提升镜像拉取速度与稳定性。内容涵盖配置前准备、加速源设置、首选加速源调整及使用指南,帮助用户高效完成镜像操作。
6631 56
|
9月前
|
Java 分布式数据库 Docker
使用Docker配置并连接HBase的Java API
本流程概要的解释了如何在Docker上配置并启动HBase服务,并通过Java API进行连接和操作表,不涉及具体的业务逻辑处理和数据模型设计,这些因应用而异需由开发者根据实际需求进行实现。
394 13
|
10月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
1102 4
|
数据安全/隐私保护 Docker 容器
docker pull 相关配置
通过本文的介绍,您已经了解了如何通过镜像源配置、登录私有仓库、设置网络代理以及其他优化策略来提升 `docker pull`命令的效率和可靠性。这些配置不仅能够显著加快镜像下载速度,还能确保在不同网络环境下的稳定性。通过合理使用这些配置,您可以更好地管理和优化Docker环境中的镜像拉取操作。
1963 18
|
弹性计算 运维 Ubuntu
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
2175 4

热门文章

最新文章