DIGITS简介

DIGITS: Deep Learning GPU Training System1,是由英伟达(NVIDIA)公司开发的第一个交互式深度学习GPU训练系统。目的在于整合现有的Deep Learning开发工具,实现深度神经网络(Deep Neural Network,DNN)设计、训练和可视化等任务变得简单化。DIGITS是基于浏览器的接口,因而通过实时的网络行为的可视化,可以快速设计最优的DNN。DIGITS是开源软件,可在GitHub上找到,因而开发人员可以扩展和自定义DIGITS。

英文介绍

DIGITS特性

  • 提供了友好的用户界面,只需简单的点击即完成DNNs的训练。DIGITS是一个Web应用,用浏览器访问,上图是典型的工作流程图。
  • DIGITS用户接口提供了DNN优化工具。主控制台列出了现有的数据库和机器上可用的先前训练好的网络模型以及正在进行的训练活动。
  • DIGITS使可视化网络和快速对比精度变得简单。你选择一个模型,DIGITS显示训练状态和精度,并提供在网络训练时或训练完毕后加载和分类图像的选项。
  • 由于DIGITS运行在一个web服务器上,团队用户可以很方便地分享数据库和网络配置,以及测试和分享结果。
  • DIGITS集成了流行的Caffe deep learning framework,并支持使用cudnn进行GPU加速。

尝试使用DIGITS进行模型训练后,不得不说,这个平台功能做的真心不错。

部署测试

官方给了基于Ubuntu发行版的部署指南(估计是因为ubuntu上比较好处理python的各种依赖吧),不过官方也构建的相关的Docker image来帮助用户进行部署。用户可以docker pull nvidia/digits直接下载最新版本。

容器镜像中使用5000端口来暴露web服务,因此需要将5000端口映射出来。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# docker run -itd --name digits -p 5000:5000 nvidia/digits:6.0
# docker logs digits 
  ___ ___ ___ ___ _____ ___
 |   \_ _/ __|_ _|_   _/ __|
 | |) | | (_ || |  | | \__ \
 |___/___\___|___| |_| |___/ 6.0.0

libdc1394 error: Failed to initialize libdc1394
/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
  warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
2017-12-27 13:24:54 [INFO ] Loaded 0 jobs.

查看日志如上环境即部署成功。

环境测试

官方也给了一份测试数据以及文档来运行模型训练。 doc

下载模型数据

可以登录到digits容器内部执行以下命令进行模型数据初始化。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
$ python -m digits.download_data mnist ~/mnist
Downloading url=http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz ...
Downloading url=http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz ...
Downloading url=http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz ...
Downloading url=http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz ...
Uncompressing file=train-images-idx3-ubyte.gz ...
Uncompressing file=train-labels-idx1-ubyte.gz ...
Uncompressing file=t10k-images-idx3-ubyte.gz ...
Uncompressing file=t10k-labels-idx1-ubyte.gz ...
Reading labels from /home/username/mnist/train-labels.bin ...
Reading images from /home/username/mnist/train-images.bin ...
Reading labels from /home/username/mnist/test-labels.bin ...
Reading images from /home/username/mnist/test-images.bin ...
Dataset directory is created successfully at '/home/username/mnist'
Done after 16.722807169 seconds.

当然如果容器内部无法访问外网,也可以将相关模型数据下载后进行解压。

1
2
3
4

# ls dataset/
  t10k-images-idx3-ubyte.gz  t10k-labels-idx1-ubyte.gz  train-images-idx3-ubyte.gz  train-labels-idx1-ubyte.gz 
# docker cp dataset digits:/

需要注意的是,该模型文件好像不能直接解压。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# docker exec -it digits bash
root@aa3e7a2437af:/# cd dataset/
root@aa3e7a2437af:/dataset# ls
t10k-images-idx3-ubyte.gz  t10k-labels-idx1-ubyte.gz  train-images-idx3-ubyte.gz  train-labels-idx1-ubyte.gz
root@aa3e7a2437af:/dataset# python -m digits.download_data mnist .
Uncompressing file=train-images-idx3-ubyte.gz ...
Uncompressing file=train-labels-idx1-ubyte.gz ...
Uncompressing file=t10k-images-idx3-ubyte.gz ...
Uncompressing file=t10k-labels-idx1-ubyte.gz ...
Reading labels from ./train-labels.bin ...
Reading images from ./train-images.bin ...
Reading labels from ./test-labels.bin ...
Reading images from ./test-images.bin ...
Dataset directory is created successfully at '.'
Done after 18.2706720829 seconds.
root@aa3e7a2437af:/dataset#

使用WebApp

使用浏览器访问容器宿主机的5000端口,即可看到首页数据

index

登录

点击右上角的login按钮进行登录。

这里其实没有认证信息,用户随便输入就可以登录

login

创建DataSet

登录后点击"New Image Classification Dataset" 并进行相关设置。

dataset

当job运行时,就可以在右侧看到运行的时间,以及结果。 dataset1 dataset2

当运行完成之后,点击左上角的DIGITS,可以看到创建的dataset dataset-final

训练模型

点击 Models > New Model > Images > Classification.将引导你到New Image Classification Model 页面。

按照以下步骤进行操作

  • Select Dataset field选择 “testbiaoge” 数据集
  • Standard Networks窗口选择LeNet网络
  • 填写GPU卡数量以及模型名称
  • 点击Create按钮进行创建

model-1 model-2

在训练过程中用户可以看到悬链环境以及训练时间等相关信息。

训练完成的状态: model-train

为了测试这个模型,可以拉到页面最底部

  • 点击Upload image 按钮选择一个文件,测试过程中选择/dataset/test/2/00035.png

  • 或者在网络上找一张图片,黏贴URL到 Image URL

  • 选中Show visualizations and statistics

  • 点击Classify One

在页面顶部,展示了五个分类以及相关的值。DIGITS也提供了一些可视化以及网络中每个层的权重和激活统计信息。

test-model

test-model2

查看最终任务运行的过程信息:

1
2
3
4
5
6
7
8
9
2017-12-29 06:50:54 [20171229-065052-5cc9] [INFO ] Infer Model task started.
2017-12-29 06:50:54 [20171229-065052-5cc9] [INFO ] Task subprocess args: "/usr/bin/python /usr/local/lib/python2.7/dist-packages/digits/tools/inference.py /jobs/20171229-065052-5cc9/tmpctzfnI.txt /jobs/20171229-065052-5cc9 20171229-064432-4c8a --jobs_dir=/jobs --epoch=30.0 --layers=all --gpu=0"
2017-12-29 06:50:54 [20171229-065052-5cc9] [WARNING] Infer Model unrecognized output: libdc1394 error: Failed to initialize libdc1394



2017-12-29 06:52:43 [20171229-065052-5cc9] [INFO ] Infer Model task completed.
2017-12-29 06:52:43 [20171229-065052-5cc9] [INFO ] Job complete.
2017-12-29 06:52:43 [20171229-065052-5cc9] [INFO ] Job deleted.

至此,使用NVIDIA-DIGITS已经完成了一个模型训练。