这是机器未来的第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