这是机器未来的第3篇文章
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
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.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:端口映射,[主机端口]:[容器端口] –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
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 |
+-----------------------------------------------------------------------------+
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
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深度学习开发环境搭建完毕!
|