物体检测快速入门系列-Windows部署Docker GPU深度学习开发环境

Posted i机器未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物体检测快速入门系列-Windows部署Docker GPU深度学习开发环境相关的知识,希望对你有一定的参考价值。

  • 作者简介:关注AIoT领域的嵌入式开发一枚,追逐未来时代的脉搏,记录路途中的技术成长
  • 本文由机器未来原创,首发在CSDN
  • 订阅专栏:物体检测快速入门系列
  • 面向人群:具备深度学习理论基础的学生或初级开发者
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,尽情期待
  • 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

文章目录

1. 概述

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

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

好了,开搞!

2. 安装linux子系统

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

  • 查看windows平台可支持的linux子系统列表
wsl --list --online
PS C:\\Users\\25267> wsl.exe --list --online
以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS
  • 安装子系统
    推荐安装Ubuntu20.04
PS C:\\Users\\25267> wsl --install -d  Ubuntu-20.04
Ubuntu 20.04 LTS 已安装。
正在启动 Ubuntu 20.04 LTS…
  • 设置默认子系统
PS C:\\Users\\25267> wsl --setdefault Ubuntu-20.04
PS C:\\Users\\25267> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Stopped         2			# *标识的就是默认子系统
  docker-desktop-data    Stopped         2
  Ubuntu-18.04           Stopped         2
  docker-desktop         Stopped         2

3. 安装Windows平台Docker-Desktop

  • 下载
    下载链接:点击此处

  • 安装
    安装过程略,无脑安装即可。

4. 安装GPU的Docker镜像

4.1 拉取Docker镜像

docker pull tensorflow/tensorflow:2.8.0rc1-gpu-jupyter

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

  • 查看下载后的镜像
docker images
PS C:\\Users\\25267> docker images
REPOSITORY               TAG                              IMAGE ID       CREATED         SIZE
mongo                    latest                           27dd1be4bed1   2 weeks ago     700MB
ubuntu                   20.04                            825d55fb6340   5 weeks ago     72.8MB
pytorch/pytorch          1.11.0-cuda11.3-cudnn8-runtime   ca04e7f7c8e5   2 months ago    5.82GB
docker/getting-started   latest                           bd9a9f733898   3 months ago    28.8MB
tensorflow/tensorflow    2.8.0-gpu-jupyter                cc9a9ae2a5af   3 months ago    5.99GB
tanliyuan123/artipub     1.2.0                            475119ff846a   14 months ago   1.71GB
pytorch/pytorch          1.6.0-cuda10.1-cudnn7-devel      bb833e4d631f   21 months ago   7.04GB
pytorch/pytorch          1.3-cuda10.1-cudnn7-runtime      ba2da111b833   2 years ago     4.32GB

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

4.2 基于镜像创建容器

docker run --gpus all -itd -v e:/dockerdir/docker_work/:/home/zhou/ -p 8888:8888 --ipc=host cc9a9ae2a5af jupyter notebook --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启动命令:
	```jupyter notebook --no-browser --ip=0.0.0.0 --allow-root --NotebookApp.token= --notebook-dir='/home/zhou/'```

4.3 查询容器ID

docker ps 

进入容器

docker exec -it cc58e655b170
PS C:\\Users\\25267> docker exec -it cc58e655b170 /bin/bash

________                               _______________
___  __/__________________________________  ____/__  /________      __
__  /  _  _ \\_  __ \\_  ___/  __ \\_  ___/_  /_   __  /_  __ \\_ | /| / /
_  /   /  __/  / / /(__  )/ /_/ /  /   _  __/   _  / / /_/ /_ |/ |/ /
/_/    \\___//_/ /_//____/ \\____//_/    /_/      /_/  \\____/____/|__/


WARNING: You are running this container as root, which can cause new files in
mounted volumes to be created as the root user on your host machine.

To avoid this, run the container by specifying your user's userid:

$ docker run -u $(id -u):$(id -g) args...

4.4 查询docker是否已经支持GPU

  • 查询cuda版本
root@bbe3199deccc:/# nvidia-smi
Sun May 15 14:19:51 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.85       Driver Version: 472.47       CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
| N/A   62C    P8     5W /  N/A |   1356MiB /  6144MiB |    ERR!      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
  • 查询cuDNN版本
root@bbe3199deccc:/# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_14_21:12:58_PST_2021
Cuda compilation tools, release 11.2, V11.2.152
Build cuda_11.2.r11.2/compiler.29618528_0

5. 安装VsCode Docker支持

5.1 安装VsCode

安装过程略。

5.2 安装Docker插件

5.3 附着容器映射到VsCode

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

5.4 安装python支持到容器

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

5.5 安装jupyter插件到容器VsCode

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

5.7 测试GPU训练模型

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD

import time 

# config = tf.ConfigProto()
# config.gpu_options.allow_growth = True
# session = tf.Session(config=config)

# 启用GPU
from tensorflow.compat.v1 import ConfigProto# tf 2.x的写法
config =ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.6
tf.compat.v1.Session(config=config)

# 构建数据集
X_data = np.linspace(-1,1,1000)[:, np.newaxis]
noise = np.random.normal(0,0.05,X_data.shape)
y_data = np.square(X_data) + noise + 0.5

print("shape")
print(X_data.shape)

# 构建神经网络

model = Sequential()
model.add(Dense(10, input_shape=(1,), kernel_initializer='normal', activation='relu'))
#model.add(Dense(5, activation='relu'))
# vs 分类为softmax激活
model.add(Dense(10000, kernel_initializer='normal'))
model.add(Dense(10000, kernel_initializer='normal'))
model.add(Dense(100, kernel_initializer='normal'))
model.add(Dense(1, kernel_initializer='normal'))
#sgd = SGD(lr=0.001)
model.compile(loss='mean_squared_error', optimizer="sgd") #adam
# 训练 epoch = 10, 30, 50, view the results
start = time.time()
model.fit(X_data, y_data, epochs=50, batch_size=16, verbose=1)
end = time.time()

# 在原数据上预测
y_predict=model.predict(X_data)
#print(y_predict)
model.summary()

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

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

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

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

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

  • 作者简介:关注AIoT领域的嵌入式开发一枚,追逐未来时代的脉搏,记录路途中的技术成长
  • 本文由机器未来原创,首发在CSDN
  • 订阅专栏:物体检测快速入门系列
  • 面向人群:具备深度学习理论基础的学生或初级开发者
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,尽情期待
  • 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

以上是关于物体检测快速入门系列-Windows部署Docker GPU深度学习开发环境的主要内容,如果未能解决你的问题,请参考以下文章

快速入门YOLOv5目标检测算法

如何快速入门深度学习目标检测?

如何快速入门深度学习目标检测?

华为云ModelArts入门开发(完成物体分类物体检测)

Dubbo 入门系列之快速部署一个微服务应用

YOLOv5解析 | 第一篇:快速部署YOLOv5模型