Ubuntu 18.04 + Docker + Nvidia Docker + Deepo 从零搭建深度学习环境

Ubuntu 18.04 系统安装完成后,我们从零开始搭建基于docker 的深度学习环境。整个安装过程主要分为4步:(1)安装nvidia驱动(2)安装docker (3)安装nvidia docker (4)拉取Deepo镜像。最后,我们通过tensorflow运行一个MNIST手写字符识别的例子来进行验证。

一. 安装nvidia驱动

1. 首先禁用nouveau驱动

 把 nouveau 驱动加入黑名单
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf

在文件 blacklist-nouveau.conf 中加入如下内容:
blacklist nouveau
options nouveau modeset=0

禁用 nouveau 内核模块
sudo update-initramfs -u

重启
sudo reboot

重启后再次进入命令行
lsmod | grep nouveau
如果没有任何输出说明禁用成功

2. 安装nvidia驱动

需要安装新版本的驱动可以先添加源:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

然后执行以下命令,列出显卡可用的和推荐的驱动程序
ubuntu-drivers devices

选择一个版本进行安装,这里选择nvidia-driver-430
sudo apt install nvidia-driver-430

安装完成后重启
sudo reboot

3.验证是否安装成功

输入命令
nvidia-smi
若出现下图则表示安装成功:

二. 安装docker

docker的安装过程请参考官方地址https://docs.docker.com/install/linux/docker-ce/ubuntu/。这里的docker指的是docker-ce(docker社区版本),采用基于仓库的方式进行安装。

1. 设置仓库

更新软件源
$ sudo apt-get update

安装一些包来允许apt通过HTTPS协议使用仓库
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

添加Docker的官方GPS秘钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

验证,获得秘钥的指纹为9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
$ sudo apt-key fingerprint 0EBFCD88
    
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

运行以下命令来添加稳定的仓库
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

2. 安装docker-ce

更新软件源
$ sudo apt-get update

安装最新版本的docker-ce
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

3. 验证是否安装成功

通过hello-world镜像生成一个容器,打印出hello world信息。
运行以下命令:
$ sudo docker run hello-world
若能产生以下输出,则表示docker成功安装:

4. 完善:非root用户管理docker(该步骤也可忽略)

docker安装完成后,必须拥有root权限才能运行docker命令。非root用户运行docker命令,必须加前缀“sudo”。若不想每次都输入“sudo”,可以执行以下步骤。

创建一个docker用户组
$ sudo groupadd docker

将当前用户添加到这个组中
$ sudo usermod -aG docker $USER

注销当前用户,重新登录。此时用户组已更新

验证不加sudo前缀,即可运行docker命令。应能打印出hello world信息,
$ docker run hello-world

至此,docker已安装完成。可以通过 docker version命令查看所安装docker的版本。如下图所示

可以看出所安装docker的版本为19.03

三. 安装nvidia docker

nvidia docker的安装参考https://github.com/NVIDIA/nvidia-docker

添加仓库
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

更新软件源,进行安装
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

验证是否安装成功,可运行命令
docker run --gpus all --rm nvidia/cuda:9.0-base nvidia-smi

若产生类似输出,表示安装成功:

四. 拉取Deepo镜像

请参考网址https://github.com/ufoym/deepo#Installation,这里安装的是GPU版本。

仅需以下命令:
docker pull ufoym/deepo

至此,深度学习环境已全部搭建完成。

五. 例子:MNIST手写字符识别

1. 首先基于ufoym/deepo镜像启动一个交互式容器
docker run --gpus all -it ufoym/deepo bash
其中,--gpus all参数表示容器可以使用所有的GPU。

2. 进入python环境
python

3. 输入代码
from __future__ import absolute_import, division, print_function, unicode_literals

# 导入 TensorFlow
import tensorflow as tf

载入并准备好 MNIST 数据集。将样本从整数转换为浮点数:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

将模型的各层堆叠起来,以搭建 tf.keras.Sequential 模型。为训练选择优化器和损失函数:
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

训练并验证模型:
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

执行结果如下图所示:

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值