GPU配置太麻烦?来试试Docker一键配置GPU深度学习开发环境吧

举报
机器未来 发表于 2022/05/25 23:15:00 2022/05/25
【摘要】 无需安装cuda、cuDNN,docker镜像安装完毕后就OK,一键部署好之后,可以随意迁移,再也不用环境发愁了

这是机器未来的第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子系统列表
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 

1

进入容器

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插件

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训练模型

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使用情况见下图
9

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

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

《Python零基础快速入门系列》快速导航:

推荐阅读:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。