GPU配置太麻烦?来试试Docker一键配置GPU深度学习开发环境吧
这是机器未来的第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了。
好了,开搞!
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深度学习开发环境搭建完毕!
《Python零基础快速入门系列》快速导航:
- Python快速入门系列(1) 人工智能序章:开发环境搭建Anaconda+VsCode+JupyterNotebook(零基础启动)
- Python快速入门系列(2)一文快速掌握Python基础语法
- Python快速入门系列(3)AI数据容器底层核心之Python列表
推荐阅读:
- 点赞
- 收藏
- 关注作者
评论(0)