DIGITS 2支持多GPU自动扩展 实现深度学习性能倍增

jopen 9年前

 

DIGITS 是一款面向数据科学家和研究人员的交互式深度学习开发工具,设计的初衷是为了适应优越的深度神经网络的迅速开发和部署。 NVIDIA在2015年3月份推出了DIGITS,今天发布的DIGITS 2,包含了多GPU自动扩展功能。不管是为单个数据集开发优化的神经网络还是在多个数据集上训练多重网络,DIGITS 2都能够很轻松快捷地使用多GPU开发并行优化网络。

深度学习使用深度神经网络(DNNs)和大数据集来教计算机从输入数据中检测可识别的概念,去解释或理解自然语言以及解读信息等。深度学习已经运用在研究界和工业领域,目的是帮助解决诸多大数据问题,比如相似搜索、目标检测和定位。实际应用包括驾驶助手的车辆、行人和地标识别;图像识别;语音识别;自然语言处理;神经机器翻译和细胞有丝分裂检测。

使用DIGITS进行DNN开发和部署

开发一个优化的深度神经网络是一个迭代的过程。数据科学家可能从流行的网络配置(比如 AlexNet )开始或者创建一个自定义的网络,然后迭代修改成一个非常适合训练数据的网络。一旦数据科学家们开发出了一套有效的网络,他们可以将它部署在许多平台上并且使用它,包括服务器、台式计算机、移动设备和嵌入式设备(比如 Jetson TK1 或者 Drive PX )。图1描述了创建这个网络的总体进程,它分为两个主要阶段:开发和部署。

图1:深度学习神经网络开发和部署工作流程图

对于你的数据集,DIGITS通过动态调节开发和训练一个最优深度神经网络所需要的网络参数,使得它开发一个优化的深度神经网络算法变得简单。 DIGITS能够很方便地创建新的数据集,并从中选择出需要的训练数据;在深度神经网络开发阶段,DIGITS可以让你在数据集上追加新数据,还可以考虑到变化因素或者其他在模型部署环境下可能发生的其他失真以面向对象的方式扩充数据。

求解参数比如学习率和策略同样容易修整,精度测试的批量大小和节奏可以迅速被修改。DIGITS可以灵活地运用标准网络进行训练、修改微调现有网络以及从无到有创建自定义网络。一旦配置完成,你就可以准备开始训练数据了。在训练过程中,DIGITS会显示网络的精准度,帮助你实时地针对训练算法的性能做出决策,如果有必要,你可以终止训练并重新配置网络参数。

在你开发完了一套有效的网络之后,DIGITS可以把所有的网络用到的文件打包成单个可被下载的文件。这样可以方便地将一个优化的网络部署到任何设备。即便有错分样本或者以后有新的分类需要加入,DIGITS也很容易调整这个网络,重新训练然后重新部署。

让我们来看看DIGITS 2的新特性。

多GPU使得训练网络更快

DIGITS 2 可以自动扩展多GPU。通过简单的几次点击,你就能够选择多个GPU。随着数据集的增大,使用更多的GPU训练数据可以使网络在更短的时间内获取更多的数据,节省了开发过程中宝贵的时间。这个易用的功能可以在“新建图像分类模型”按钮的附近找到,如图2所示:

图2:DIGITS模型创建界面

DIGITS可以并行地在同一个数据集上训练多个网络,或者并行地在多个数据集上训练同一个网络。在GPU选项里,你可以为每一个训练数据集选择GPU,这使得你的硬件在执行多任务上变得更加容易。

图3展示了使用多GPU减少训练时间的情况。柱状图显示了在批次大小为128之下,分别使用1个,2个和4个GPU训练GoogleNet的加速情况。这些结果是由DIGITS DevBox使用GeForce TITAN X GPU和Caffe绘制而成。

图3:使用DIGITS在DIGITS DevBox中使用多个GeForce TITAN X GPU加速训练。这些结果是由Caffe在批次大小为128的情况下绘制的。

新的解算器

DIGITS 2增加了两个新的解算器:自适应梯度下降(ADAGRAD)和涅斯捷罗夫加速梯度下降(NESTEROV)。这些和其他标准随机梯度下降都是可选择的,可以在“新建图像分类模型”窗口的左侧的解算器类型下拉菜单中找到。

图2展示了解算器选项面板,你可以配置快照间隔,生效间隔,批量大小以及解算器的学习率策略。

GoogLeNet标准网络

:

图4:LeNet网络配置案例

在2014年举办的 ImageNet LSVRC 大赛中,GoogLeNet赢得了分类和物体识别的挑战。它和其他两个网络——LeNet和AlexNet——一起发布,如图2中标准网络板块所示。一些使用者喜欢使用标准网络开始优化他们的网络,然后再基于结果进行自定义。和其他标准网络一样,比如LeNet和AlexNet,针对某一数据集开发最佳深度神经网络,使用GoogleNet是一个非常棒的起点。

自定义网络编辑框(图2中)有分层的设置区域,激活函数(ReLU、TANH或者sigmoid)设置和偏差设置。点击自定义网络标签下的“可视化”按钮,可以在训练之前便捷地查看修改内容。图4展示了标准LeNet网络的可视化界面。

改进了可视化和监控效果

在训练过程中,DIGITS 2 可以在训练窗口中展示所使用到的GPU的利用情况,如图5所示。在网络性能图旁边的训练口中,会显示GPU的利用率、存储大小和温度信息。这样可以让你在训练过程中实时监控GPU使用情况,即使你不能直接访问DIGITS所运行的主机。如果你发现GPU没有被充分使用,你可以简单的就将训练停止,然后回到“新建图像分类模型”窗口调整网络参数,比如批量大小。

图5:训练过程中训练性能和GPU利用率信息图

训练过程中分类

在训练过程中,通过点击训练窗口(图5)下方的“分类一张图片”按钮,DIGITS可以迅速的执行分类。当“显示可视化”和“统计”被选中时,DIGITS 会从输入图像中画出网络的权重以及响应图表。图6展示了第一层的输出样例。除了网络响应之外,DIGITS现在可以在每层参数旁边绘制统计信息,包括频率,平均值和标准差。这会帮助你了解输入图像的全局网络响应情况。分类的结果会在左侧显示,包括输入图像和第一个卷积层的响应,包括权重、激活值和统计信息。

图6:DIGITS 2分类结果案列,DIGITS 2 为每一层展现了统计信息。

DIGITS部署

可以非常容易地下载一个已经训练好的网络然后部署到其他系统上。点击已训练模型窗口下面的“下载”按钮,可以得到一份将模型部署到一台新机器上所需要的所有网络文件。在目录“DIGITS根目录/examples/classification”下,有DIGITS 2提供的两个新的脚本案例。一个直接与下载的.tal.gz文件交互,另一个是允许使用网络文件的规格说明。下面是运行这些脚本命令的案例。

./use_archive.py DIGITS_Network_files.tar.gz path/to/image.jpg    ./example.py network_snapshot.caffemodel deploy.prototxt image.jpg -l labels.txt -m mean.npy

现在开始DIGITS 2之旅

DIGITS 2的预览版本(帖子中提到的所有功能)今天可以获取到。便捷安装包可以在 NVIDIA开发者网站 上下载。

所有功能和变更介绍在DIGITS的 发行说明 中。想了解更多关于DIGITS,可以报名参加即将到来的网络研讨会 “Introducing DIGITS 2” 。你也同样可以阅读我写的 关于DIGITS首次发布的帖子

想获取DIGITS源码或者为DIGITS项目提供贡献,请访问我们在 GitHub 上的开源库。有其他问题,反馈,或者想与DIGITS用户社区进行交流,请参阅 DIGITS的邮件列表 或者发送邮件至:digits-users@googlegroups.com。

英文原文: Easy Multi-GPU Deep Learning with DIGITS 2 (译者/刘翔宇 审校/刘帝伟、朱正贵 责编/周建丁)

关于译者: 刘翔宇,中通软开发工程师,关注机器学习、神经网络、模式识别。