怎么通过caffe训练caffe中vgg神经网络络

从Caffe2到TensorFlow,十种框架构建相同神经网络效率对比_凤凰科技
从Caffe2到TensorFlow,十种框架构建相同神经网络效率对比
用微信扫描二维码分享至好友和朋友圈
原标题:从Caffe2到TensorFlow,十种框架构建相同神经网络效率对比
选自Medium
作者:Ilia Karmanov
机器之心编译
参与:路雪、黄小天
近日,Ilia Karmanov 在 Medium 发表了一篇题为《Neural Net in 10 Frameworks (Lessons Learned)》的文章,其内容源自一个 GitHub 项目,其中作者通过构建同一个神经网络,对比了当前最流行的 10 种深度学习框架,其中 Caffe2 和 MXNet 在准确度和训练时长上处于领先位置。该项目甚至还得到了 FAIR 研究者、各大框架创始人(比如贾扬清)的支持。机器之心对该文进行了编译。
除却所有的技术元素之外,我发现关于这一项目最有趣的事情是来自开源社区的惊人贡献。社区发起的请求(pull request)、提出的问题(issue)非常有助于在准确度和训练时间方面统合所有框架。看到 FAIR 研究者、框架的创始人(比如贾扬清)以及 GitHub 的其他用户所做出的贡献,我很震惊。没有他们,就不会有这个项目的完成。他们不仅给出了代码建议,还提供了不同框架的整个 notebook。
搜索 Tensorflow + MNIST 会出现这个看起来很复杂的教程,它规避了更高级的 API(tf.layers or tf.nn),并且似乎没有从输入数据中充分分离,因此使用 CIFAR(举例来说)替代 MNIST 更加让人舒服。一些教程为了避免冗长加载 MNIST 有一个自定义的封装器,比如 framework.datasets.mnist,但是对此我有两个问题:
初学者可能并不太清楚如何在数据上重新运行。
将其与另一个框架对比也许更加棘手(预处理会有所不同吗?)
其他教程把 MNIST 作为文本文件(或自定义数据库)保存到硬盘,接着使用 TextReaderDataLoader 再次加载。这个想法表明,如果用户有一个大型数据集,它太大以至于无法加载到 RAM,并且需要大量的即时转换,那么会发生什么。对于初学者来说,这也许是误导性的,使人胆怯;我经常被问到:「为什么我需要保存它,我明明有一个数组!」
本文的目标是如何使用 10 个最流行的框架(在一个常见的自定义数据集上)构建相同的神经网络——一个深度学习框架的罗塞塔石碑,从而允许数据科学家在不同框架之间(通过转译而不是从头学习)发挥其专长。不同框架具有相同模型的一个结果就是框架在训练时间和默认选项上变得越发透明,我们甚至可以对比特定的元素。
能够快速地把你的模型转换为另一个框架意味着你能够交换 hats。如果另一个框架有一个层需要你从头编写,用更有效的方式处理数据资源,或者使其更匹配正运行于其上的平台(比如安卓)。
对于这些教程,我尝试不顾违反默认选项,使用最高级别的 API,从而更加便捷地对比不同框架。这意味着 notebook 并不是专为速度而写。
这将证明如果使用更高级的 API,代码结构将变得相似,并可被大体表征为:
Load data into RAM; x_train, x_test, y_train, y_test = cifar_for_library(channel_first=?, one_hot=?)
把数据加载到 RAM;x_train, x_test, y_train, y_test = cifar_for_library(channel_first=?, one_hot=?)
生成 CNN 符号(在最后的密集层上通常没有激活)
指定损失(交叉熵通常与 softmax 绑定)、优化器和初始化权重,也许还有 session
使用自定义迭代器(所有框架的通用数据源)在训练集的小批量上进行训练
对测试集的小批量进行预测,也许为层(比如 dropout)指定测试标记
评估准确率
我们实际上比较了一系列确定的数学操作(尽管初始化比较随意),因此比较框架的准确率并无意义,相反,我们想匹配框架的准确率,来确保我们在对同样的模型架构进行对比。
我说比较速度没有意义的原因是:
使用数据装载器(仅)可以减少几秒,因为 shuffling 应该异步执行。但是,对于一个合适的项目,你的数据不可能适合 RAM,可能需要大量预处理和操作(数据增强)。这就是数据装载器的作用。贾扬清认为:
我们在多个网络中经历了主要瓶颈 I/O,因此告诉人们如果他想要顶尖的性能,使用异步 I/O 会有很大帮助。
这一实例中仅使用若干个层(conv2d、max_pool2d、dropout、全连接)。对于一个合适的项目,你也许有 3D 卷积、GRU、LSTM 等等。
轻松添加自定义层(或者层的可用性,比如 k 最大池化或者分层 softmax),及其运行速度可以促成或毁掉你的框架选择。能够用 python 代码写一个自定义层并快速执行它对研究项目至关重要。
在 CIFAR-10 上的 VGG-style CNN
IMDB 上的 LSTM(GRU)
心得体会(匹配准确率/时间)
下列是我对多个框架测试准确率进行匹配,并根据 GitHub 收集到的问题/PR 得到的一些观点。
1. 为方便对比,上文中的实例(除了 Keras)使用同等水平的 API 和同样的生成器函数。我在 MXNet 和 CNTK 的实验中使用了更高水平的 API,在该 API 上使用框架的训练生成器函数。该实例中的速度提升几乎微不足道,原因在于整个数据集作为 NumPy 数组在 RAM 中加载,每个 epoch 所做的唯一的处理是 shuffle。我怀疑该框架的生成器也在异步执行 shuffle 操作。奇怪的是,似乎框架在一个批次水平上进行 shuffle,而不是在观察层面上,因此测试准确率稍稍降低(至少在 10 epoch 之后)。在框架运行时进行的 IO 活动、预处理和数据增强的场景中,自定义生成器对性能的影响更大。
2. 启用 CuDNN 的自动调整/穷举搜索参数(对固定大小的图像选择最高效的 CNN 算法)会使性能大幅提升。在 Caffe2、PyTorch 和 Theano 中,必须手动启用。而在 CNTK、MXNet 和 Tensorflow 中,该操作默认进行。我不确定 Chainer 是什么情况。贾扬清提到 cudnnGet(默认)和 cudnnFindi 之间的性能提升比 Titan X GPU 上要小;看起来 K80 + new cudnn 使该问题在这种情况下更加突出。在目标检测的每一次规模连接中运行 cudnnFind 会带来严重的性能回归,但是,正因如此,可以在目标检测时禁用 exhaustive_search。
3. 使用 Keras 时,选择匹配后端框架的 [NCHW] 排序很重要。CNTK 首先使用通道运行,我错误地将 Keras 配置为最后使用通道。之后,Keras 在每一批次必须改变顺序,这引起性能的严重下滑。
4. Tensorflow、PyTorch、Caffe2 和 Theano 要求向池化层提供一个布尔值,来表明我们是否在训练(这对测试准确率带来极大影响,72% vs 77%)。
5. Tensorflow 有一点麻烦,它需要两个改变:启用 TF_ENABLE_WINOGRAD_NONFUSED 来提升速度;首先改变通道的维度,而不是最后再改变(data_format=』channels_first』)。TF 作为后端时,在卷积层上启用 WINOGRAD 自然也能改善 Keras 的性能。
6. 对于大多数函数,Softmax 通常与 cross_entropy_loss() 绑定在一起,有必要检查一下最后的全连接层是否需要激活,以省下应用两次激活的时间。
7. Kernel 初始程序在不同的框架中会发生改变(我发现这对准确率有+/- 1% 的影响),我试图在可能/不是很长的情况下指定统一的 xavier/gloro。
8. SGD 动量实现的动量类型。我必须关闭 unit_gain(只在 CNTK 中默认开启),以匹配其他框架的实现。
9. Caffe2 在网络第一层需要额外的优化(no_gradient_to_input=1),通过不计算输入的梯度产生小幅提速。有可能 Tensorflow 和 MXNet 已经默认启用该项。计算梯度对搜索和 deep-dream 网络有用。
10. 在最大池化之后(而不是之前)应用 ReLU 激活意味着你在降维之后执行计算,并减少几秒时间。这帮助 MXNet 时间减少了 3 秒。
11. 一些可能有用的进一步检查:
指定 kernel 为 (3) 变成对称元组 (3, 3) 或 1D 卷积 (3, 1)?
步幅(用于最大池化)默认为 (1, 1),还是等同于 kernel(Keras 会这样做)?
默认填充通常是 off (0, 0)/valid,但是对检查它不是 on/』same』很有用
卷积层上的默认激活是『None』还是『ReLu』(Lasagne)?
偏差初始程序可能会改变(有时不包含任何偏差)。
不同框架中的梯度截断和 inifinty/NaNs 处理可能会不同。
一些框架支持稀疏标签,而不是独热标签(如,Tensorflow 中有 f.nn.sparse_softmax_cross_entropy_with_logits)。
数据类型的假设可能会不同:我尝试使用 float32 和 int32 作为 X、y。但是,举例来说,torch 需要 y 变成 2 倍(强制转换成 torch.LongTensor(y).cuda)
如果框架 API 的水平稍微低了一点,请确保你在测试过程中,不通过设置 training=False 等来计算梯度。
用微信扫描二维码分享至好友和朋友圈
凤凰科技官方微信
播放数:1386871
播放数:1810739
播放数:440024
播放数:5808920Python/draw_net.py, 这个文件,就是用来绘制网络模型的。也就是将网络模型由prototxt变成一张图片。
1、安装GraphViz
# sudo apt-get install GraphViz
也可以去官网下载,手动安装
2 、安装pydot
sudo apt-get install sudo apt-get install
或者下边的方法编译。
# sudo pip install pydot
3.编译pycaffe
#sudo make pycaffe
编译之前可能需要配置makefile.config文件,计算机需要安装anaconda,并加入路径到配置文件中去。
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m \
/usr/lib/python3.5/dist-packages/numpy/core/include
# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
安装好了,就可以调用脚本来绘制图片了
第一个参数:网络模型的prototxt文件
第二个参数:--rankdir=x , x 有四种选项,分别是LR, RL, TB, BT 。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。默认为LR。
例:绘制Lenet模型
进入caffe/python目录
# sudo /home/wuchao/anaconda2/bin/python draw_net.py /home/wuchao/caffe/models/bvlc_alexnet/train_val.prototxt& /home/wuchao/caffe/MyFiles/alexnet.png --rankdir=BT
阅读(...) 评论()&>&深度学习书籍,神经网络与机器学习,一天搞懂深度学习,Caffe官方教程中译本等
深度学习书籍,神经网络与机器学习,一天搞懂深度学习,Caffe官方教程中译本等
上传大小:48B
深度学习相关书籍:一天搞懂深度学习pdf,神经网络与机器学习(原书第3版),Caffe官方教程等等
综合评分:4(3位用户评分)
所需积分/C币:
下载个数:116
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有3条
资源很好,谢谢
资源很好,有好几本好书,谢谢
一天搞懂深度学习真是一本好书
审核通过送C币
平面设计师/UI设计师 必读书单大集合,强烈推荐。
创建者:qq_
如何高效学习
创建者:houzhiguo
欧姆社学习漫画系列--统计学相关
创建者:houzhiguo
上传者其他资源上传者专辑
caffe安装教程
快速安装caffe框架-基于docker
apktool 2.1.1下载
我所理解的Cocos2dx pdf 下载 地址
cocos2d源码下载地址
课程资源热门标签
VIP会员动态
CSDN下载频道积分调整公告V1710.17
开通VIP,海量IT资源任性下载
找不到资源?发布悬赏任务百万程序猿帮你提供!
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
深度学习书籍,神经网络与机器学习,一天搞懂深度学习,Caffe官方教程中译本等
会员到期时间:
剩余下载个数:
剩余C币:200
剩余积分:6726
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
xuehaiwuya_1
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
深度学习书籍,神经网络与机器学习,一天搞懂深度学习,Caffe官方教程中译本等 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
caffe学习笔记4_学习搭建自己的网络——MNIST在caffe上进行训练与学习-薛开宇
下载积分:1500
内容提示:caffe学习笔记4_学习搭建自己的网络——MNIST在caffe上进行训练与学习-薛开宇
文档格式:PDF|
浏览次数:121|
上传日期: 14:42:51|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1500 积分
下载此文档
该用户还上传了这些文档
caffe学习笔记4_学习搭建自己的网络——MNIST在caffe
关注微信公众号后使用快捷导航没有帐号?
基准评测TensorFlow、Caffe等在三类流行深度神经网络上的表现
查看: 13370|
评论: 0|来自: 新智元
摘要: 在过去十年中,深度学习已成功应用到不同领域,包括计算机视觉、语音识别和自然语言处理等。深度学习的成功,归因于许多层人工神经元对输入数据的高表征能力。而GPU通过显著缩短训练时间,在深度学习的成功中扮演着
在2016年推出工具评测的褚晓文团队,赶在猴年最后一天,在arXiv.org上发布了的评测版本。这份评测的初版,通过国内AI自媒体的传播,在国内业界影响很大。在学术界,其反响更是非同一般。褚晓文教授在1月5日的朋友圈说David Patterson发邮件咨询他文章细节,感慨老人家论文看得仔细。David Patterson在体系结构领域的名声如雷贯耳,RISC之父。不熟悉的吃瓜群众可能留意到1月25日蚂蚁金服宣布跟伯克利大学前身为AmpLab,更名为RISE实验室合作的新闻。David Patterson就是RISE实验室的顶梁大佬之一。褚晓文教授版本的论文对Caffe、CNTK、MXNet、TensorFlow、Torch进行比较评测。在两个CPU平台、三个GPU平台下,比较这五个深度学习库在三类流行深度(FCN、CNN、RNN)上的性能表现。并对它们在单机多GPU卡环境下分布式版本进行了比较。相比以前的评测,的评测添加了对多GPU卡的测试,把MXNet纳入评比范围,还测试了MNIST和Cifar10这两个真实数据集。《基准评测当前较先进的深度学习软件工具》&1. 简介在过去十年中,深度学习已成功应用到不同领域,包括计算机视觉、语音识别和自然语言处理等。深度学习的成功,归因于许多层人工神经元对输入数据的高表征能力。而GPU通过显著缩短训练时间,在深度学习的成功中扮演着重要的角色。为了提高开发深度学习方法的效率,有很多开源的深度学习工具包,包括伯克利大学的Caffe,微软的CNTK,谷歌的TensorFlow,还有Torch,MXNet,Theano,百度的 PaddlePaddle等。这些工具都支持多核CPU和超多核GPU。深度学习的主要任务之一,是学习网络的每一层的权重,这可以通过向量或矩阵运算来实现。TensorFlow使用 Eigen作为矩阵加速库,而 Caffe、CNTK、MXNet和Torch采用OpenBLAS、Intel MKL 或 cuBLAS 来加快相关矩阵运算。所有这些工具包都引入了cuDNN,这是一个为神经网络计算进行GPU加速的深度学习库。但是,由于优化方法的差异,加上不同类型的网络或使用不同类型的硬件,上述工具包的性能差异很大。鉴于深度学习软件工具及其底层硬件平台的多样化,终端用户难以选择合适的平台来执行深度学习任务。在此论文中,作者用三种最主要的深度神经网络(全连接神经网络FCN,卷积神经网络CNN,以及循环神经网络RNN)来基准评测当下较先进的基于GPU加速的深度学习工具(包括Caffe,CNTK, MXNet, TensorFlow 和Torch),比较它们在CPU和GPU上的运行时间性能。几个工具的性能评估既针对合成数据,也针对真实数据。评测的硬件平台包括两种CPU(台式机级别的英特尔i7-3820 CPU,服务器级别的英特尔Xeon E5-2630 CPU)和三种Nvidia GPU (GTX 980、GTX 1080、Telsa K80,分别是Maxwell、Pascal和Kepler 架构)。作者也用两个Telsa K80卡(总共4个GK210 GPU)来评估多GPU卡并行的性能。每种神经网络类型均选择了一个小型网络和大型网络。该评测的主要发现可概括如下:总体上,多核CPU的性能并无很好的可扩展性。在很多实验结果中,使用16核CPU的性能仅比使用4核或8核稍好。TensorFlow在CPU环境有相对较好的可扩展性。仅用一块GPU卡的话,FCN上Caffe、CNTK和Torch比MXNet和TensorFlow表现更好;CNN上MXNet表现出色,尤其是在大型网络时;而Caffe和CNTK在小型CNN上同样表现不俗;对于带LSTM的RNN,CNTK速度最快,比其他工具好上5到10倍。通过将训练数据并行化,这些支持多GPU卡的深度学习工具,都有可观的吞吐量提升,同时收敛速度也提高了。多GPU卡环境下,CNTK平台在FCN和AlexNet上的可扩展性更好,而MXNet和Torch在CNN上相当出色。比起多核CPU,GPU平台效率更高。所有的工具都能通过使用GPU达到显著的加速。在三个GPU平台中,GTX1080由于其计算能力较高,在大多数实验结果中性能最出色。某种程度上而言,性能也受配置文件的影响。例如,CNTK允许用户调整系统配置文件,在运算效率和GPU内存间取舍,而MXNet则能让用户对cuDNN库的自动设置进行调整。&2. 背景及相关知识随着深度学习技术的快速发展,人们针对不同的应用场合开发出各类深度神经网络,包括全连接神经网络(FCN)、卷积神经网络(CNN)、循环神经网络(RNN)、局限型波兹曼机(RBM)。此论文着重分析三种神经网络(FCN、CNN和RNN)的运行性能(或时间速度)及收敛速度。FCN的历史可追溯到上世纪80年代,反向传播(backpropagation)发明之时。而CNN和RNN,一直以来分别在图像识别和自然语言处理应用上展现出优异的效果。FCN是一个前向神经网络,由Yann LeCun等人在1989年成功应用于邮编识别。为了减少每一层的参数数量,CNN通过使用一组核(kernel),建立了一个卷积层,每个核的参数在整个域(例如:一个彩色图像的通道)共享。CNN能减轻全连接层容易导致需要学习大量参数的问题。从LeNet架构开始,CNN已经实现很多成果,包括ImageNet分类、人脸识别和目标检测。RNN允许网络单元的循环连接。RNN可以将整个历史输入序列跟每个输出相连,找到输入的上下文特性和输出之间的关系。有了这个特性,RNN可以保留之前输入的信息,类似于样本训练时的记忆功能。此外,长短时记忆(LSTM)通过适当地记录和丢弃信息,能解决RNN训练时梯度消失和爆炸的难题。含LSTM单元的RNN被证实是处理语音辨识和自然语言处理任务最有效的方法之一。随着深度学习日益成功,诞生了许多受欢迎的开源GPU加速工具包。其中,Caffe、CNTK、MXNet、TensorFlow和Torch是最活跃、更受欢迎的例子。Caffe由伯克利视觉和学习中心(BVLC)开发,自2014成为开源项目。作者声称Caffe可以借助NVIDIA K40或Titan GP卡,每天用GPU加速版本处理4000万图像。结合cuDNN之后,还可以加速约1.3倍。CNTK是一个由微软研究院开发的工具包,支持大部分流行的神经网络。在2015年2月,官方报道了一个基准性能测试结果,针对一个4层全连接神经网络,CNTK与Caffe、TensorFlow、Theano和Torch对比,速度要快上1.5倍。MXNet是一个支持多种语言的,旨在提供更灵活有效的编程接口,以提升生产效率。TensorFlow由谷歌开发,它使用数据流图集成了深度学习框架中最常见的单元。它支持许多的网络如CNN,以及带不同设置的RNN。TensorFlow是为超凡的灵活性、轻便性和高效率而设计的。Torch是一个科学计算框架,它为里更为有用的元件——如多维张量——提供数据结构。(a) 全连接神经网络 &(b) 卷积神经网络(AlexNet) &(c) 循环神经网络图1:深度学习模型的例子为了加快深度神经网络的训练速度,有的使用CPU SSE技术和浮点SIMD模型来实现深度学习算法,相比浮点优化的版本能实现3倍加速。Andre Viebke等人利用多线程及SIMD并行化在英特尔Xeon Phi处理器上加速CNN。针对多GPU卡的并行化,Jeffrey Dean等人提出了一种大规模分布式深度网络,开发了两种算法(Downpour SGD和Sandblaster L-BFGS),可以在混有GPU机器的集群上运行。加快训练方法的另一种方式是减少要学习的参数数量,Song Han等人使用修剪冗余连接的方法,在不失去网络表征能力下减少参数,这可以减少670万到6100万的AlexNet参数。Bahrampour等人也做了类似的性能评测工作,但他们仅用了一个GPU架构(NVIDIA Maxwell Titan X)和旧版的软件(cuDNN v2, v3)。本文作者早前工作也探讨了单个GPU上跑旧版软件的基准测试结果。此文针对三版主要的GPU架构和一些的网络(如:ResNet-50)和软件(如:cuDNN v5)进行基准评测,并深入到工具包代码分析性能。此外,本文也比较了单台机器里多个GPU卡的性能。因为单个GPU卡内存相对较少,限制了神经网络规模,训练的可伸缩性对于深度学习框架至关重要。在如今的深度学习工具中,支持多GPU卡成为了一个标准功能。为了利用多个GPU卡,分布式同步随机梯度下降法(SDG)使用很广泛,实现了很好的扩展性能。在可扩展性方面,本文作者着重评估处理时间,以及数据同步方法的收敛速度。在数据并行模型里,针对N个worker,把有M个样本的一个mini-batch分成N份,每份M/N个样本,每个worker用相同的模型独立向前向后处理所分配的样本。当所有worker完成后,把梯度聚合,更新模型。实际上,不同工具实现同步SGD算法的方式各有不同。Caffe:采用删减树策略减少GPU间的数据通信。例如,假设有4个标记为0,1,2,3的GPU。首先,GPU 0和GPU 1交换梯度,GPU 2和GPU 3交换梯度,然后GPU 0和GPU 2交换梯度。之后,GPU 0会计算更新的模型,再将更新的模型传输到GPU 2中;接着GPU 0把模型传输到GPU 1,同时GPU 2把模型传输到GPU 3。CNTK:使用MPI作为GPU之间的数据通信方法。CNTK支持4种类型的并行SGD算法(即:DataParallelSGD,BlockMomentumSGD,ModelAveragingSGD,DataParallelASGD)。对于本文关心的 data parallel SGD,CNTK把每个minibatch分摊到N个worker上。每次mini-batch后将梯度进行交换和聚合。MXNet:同样将mini-batch样本分配到所有GPU中,每个GPU向前后执行一批规模为M/N的任务,然后在更新模型之前,将梯度汇总。TensorFlow:在每个GPU上放置一份复制模型。也将mini-batch分到所有GPU。Torch:其数据并行机制类似于MXNet,把梯度聚合的操作放在GPU端,减少了PCI-e卡槽的数据传输。3. 评测方法处理时间(Processing time)及收敛速度(Convergence rate)是用户训练深度学习模型时最看重的两个因素。因此该实验主要通过测量这两个指标以评估这几种深度学习工具。&一方面,评估处理时长有一种高效且主流的方法,就是测出对一个mini-batch所输入数据一次迭代的时长。在实际操作中,经历多轮迭代或收敛以后,深度学习的训练过程会终止。因此,对于每种神经网络,该实验使用不同大小的mini-batch来评测各个深度学习软件工具。作者针对每种大小的mini-batch都多次迭代,最后评估其平均运行速度。另一方面,由于数据并行化可能影响收敛速度,该评测还在多GPU卡的情况下比较了收敛速度。&评测使用合成数据集和真实数据集。合成数据集主要用于评估运行时间,真实数据集用于测量收敛速度。每种工具的时间测量方法如下:&Caffe:使用“caffe train”命令训练所指定网络,随之计算两次连续迭代过程间的平均时间差。CNTK:与Caffe类似,但排除包含磁盘I / O时间的较早的epoch。MXNet:使用内部定时功能,输出每个epoch和迭代的具体时间。TensorFlow:在源脚本里使用计时功能,计算平均迭代时间。Torch:和TensorFlow一样。&这几种工具均提供非常灵活的编程API或用于性能优化的配置选项。例如CNTK中可以在配置文件中指定“maxTempMemSizeIn-SamplesForCNN”选项,以控制CNN使用的临时内存的大小,虽然可能导致效率略微降低,但是内存需求更小了。&MXNet、TensorFlow和Torch也有丰富的API,在用于计算任务时供用户选择。换句话说,可能存在不同API以执行相同的操作。因此本评测结果仅仅是基于作者对这些工具用法的理解,不保证是较佳配置下的结果。&评测中的深度学习软件版本和相关库如表1所示。表1:用于评测的深度学习软件神经网络和数据集:对于合成数据的测试,实验采用具有约5500万个参数的大型神经网络(FCN-S)来评估FCN的性能。同时选择ImageNet所选的AlexNet和ResNet-50作为CNN的代表。&对于真实数据的测试,为MNIST数据集构建的FCN(FCN-R)较小;针对Cifar10数据集则使用名为AlexNet-R和ResNet-56的AlexNet架构。对于RNN,考虑到主要计算复杂度与输入序列长度有关,作者选择2个LSTM层进行测试,输入长度为32。每个网络的详细配置信息如表2和表3所示。表2:合成数据的神经网络设置。注意:FCN-S有4层隐藏层,每层2048个节点;并且AlexNet-S中排除了batch normalization操作和dropout操作;为了测试CNN,输入数据是来自ImageNet数据库的彩色图像(维度224×224×3),输出维度是ImageNet数据的类别数量。表3:真实数据的神经网络设置。注:FCN-R有3个隐藏层,节点数分别为和1024。AlexNet-R的架构与原始出处里Cifar10所用的AlexNet相同,但不包括本地响应规范化(LRN)操作(CNTK不支持)。对于ResNet-56,作者沿用了最原始文件里的架构。硬件平台:评测使用两种类型的多核CPU,其中包括一个4核台式机级CPU(Intel i7-3820 CPU @ 3.60GHz)和两个8核服务器级CPU(Intel XeonCPU E5-2630 v3 @ 2.40GHz),测试不同线程数下各个工具的性能。另外还用三代不同的GPU卡,分别是采用Maxwell架构的NVIDIA GTX 980 @ 1127MHz,采用Pascal架构的GTX MHz,以及采用Kepler架构的Telsa K80 @ 562MHz。&评测只使用K80 GPU两个GK210芯片中的一个进行单GPU比较,同时,为了使得结果可重复,已禁用GPU自动超频功能。为了避免神经网络大小对主机内存的依赖,两台测试机分别配备64GB内存和128GB内存。硬件配置的详细信息如表4所示。表4:本评测的硬件设置。注:K80卡上有2个GK210 GPU,但为了比较测试单GPU性能仅使用一个GPU。数据并行化评测则在两个Tesla K80卡上进行,这样共有4个GK210 GPU。对于多GPU卡实验,系统配置如表5所示。表5:数据并行性的评测硬件设置。注:K80卡上有两个GK210 GPU,因此进行双GPU并行评测时使用一个K80卡,进行四GPU并行评测时使用两个K80卡。各神经网络,软件工具和硬件的组合结果如表6所示。表6:各神经网络、软件工具和硬件的组合结果4. 评测结果评测结果分别在三个子部分呈现:CPU结果,单GPU结果和多GPU结果。对于CPU结果和单GPU结果,主要关注运行时长;对于多GPU还提出了关于收敛速度的比较。不同平台上的主要评测结果参见表7及表8。表7:评测对比结果(每个mini-batch的运算时间,单位:秒)。注:FCN-S,AlexNet-S,ResNet-50,FCN-R,AlexNet-R,ResNet-56和LSTM的mini-batch大小分别为64,16,16,,128,128。表8:单GPU与多GPU间的比对结果(每个mini-batch的运算时间,单位:秒)。注:FCN-R,AlexNet-R和ResNet-56的mini-batch大小分别为和128。4.1. CPU评测结果具体参见表7及原文。4.2. 单GPU卡评测结果在单GPU的比较上,该评测还展示了不同mini-batch大小的结果,以展示mini-batch大小对性能的影响。(译者注:原论文结论中详细描述了不同mini-batch大小下各学习工具的性能,具体见图表)&4.2.1. 合成数据(Synthetic Data)FCN-S:Caffe较佳,其次是CNTK和Torch,最后是TensorFlow及MXNet。AlexNet-S:MXNet性能较佳,其次是Torch。ResNet-50:MXNet性能远远高于其他工具,尤其是mini-batch大小比较大的时候。其次是CNTK和TensorFlow,Caffe相对较差。&4.2.2. 真实数据(Real Data)FCN-R:Torch较佳,Caffe、CNTK及MXNet三个工具次之,TensorFlow最差。AlexNet-R:K80 平台上CNTK表现较佳,Caffe和Torch次之,然后是MXNet。TensorFlow处理时间最长。ResNet-56:MXNet最优,其次是Caffe、CNTK 和Torch,这三个接近。最后是TensorFlow。LSTM:CNTK全面超越其他工具。&4.3.多GPU卡评测结果FCN-R:单GPU的情况下,Caffe、CNTK及MXNet接近,TensorFlow和Torch稍差。GPU数量翻番时,CNTK和MXNet的可扩展性较佳,均实现了约35%的提速,caffe实现了大约28%的提速,而Torch和TensorFlow只有约10%。GPU数量变为4个时,TensorFlow和Torch没有实现进一步的提速。而收敛速度往往随着GPU数量的增加而增快。单个GPU时,Torch的训练融合速度最快,其次是Caffe、CNTK和MXNet,TensorFlow最慢。当GPU的数量增加到4时,CNTK和MXNet的收敛速度率接近Torch,而Caffe和TensorFlow收敛相对较慢。AlexNet-R:单个GPU时,CNTK,MXNet和Torch性能接近,且比Caffe和TensorFlow快得多。随着GPU数量的增长,全部工具均实现高达40%的提速,而TensorFlow只有30%。至于收敛速度,MXNet和Torch最快,CNTK稍慢,但也比Caffe和TensorFlow快得多。ResNet-56:单GPU时,Torch用时最少。多个GPU时,MXNet往往更高效。至于收敛速度,整体来说MXNet和Torch比其他三个工具更好,而Caffe最慢。5. 讨论对于CPU并行,建议线程数不大于物理CPU内核数。因为在计算过程中需要额外的CPU资源来进行线程调度,如果CPU资源全部用于计算则难以实现高性能。然而,借助于Eigen的BLAS库(BLAS library),因其为了SIMD指令优化过,因此随着CPU内核数的增长,TensorFlow的性能能更好。&在FCN神经网络上,如果只用一个GPU卡,那么Caffe、CNTK和Torch的性能要比MXNet和TensorFlow略好。&通常来说,训练一个网络包含两阶计算(即前馈和后向传播)。在前馈阶段,矩阵乘法是最耗时的操作,评测的四个工具全部采用cuBLAS API:cublasSgemm。如果想要把矩阵A乘以矩阵B的转置,可以将cublasSgemm API的第二个参数设置为CUBLAS_OP_T,即应用in-place矩阵转置。但这就导致与没有转置的矩阵乘法相比,性能减慢3倍(例如,C = A×B^T,其中 A∈R^ ,B∈R^)。这是因为in-place矩阵转置非常耗时。CNTK和TensorFlow构造自己的数据结构,从而用的是cublasSgemm的CUBLAS_OP_N,而Caffe和Torch使用CUBLAS_OP_T。&在后向传播的阶段,则需要使用矩阵乘法来计算梯度,并使用element-wise矩阵运算来计算参数。如果通过调用cuBLAS来将A乘以B的转置,效率低时,可先转置B(如果GPU具有足够的内存,则采用out-place)再应用矩阵乘法可能会效果更好。&此外,cublasSgemm API完全支持后向传播,因为它在矩阵乘法后添加了一个缩放的矩阵。因此,如果将梯度计算和更新操作合并到单个GPU核中,则可以提高计算效率。为了优化FCN的效率,还可以在不转置的情况下使用cublasSgemm API,并同时使用cublasSgemm来计算梯度及执行更新操作。&在CNN上,所有工具包均使用cuDNN库进行卷积运算。尽管API调用相同,但是参数可能导致GPU内核不同。相关研究发现,在许多情况下,与直接执行卷积运算相比,FFT是更合适的解决方案。在矩阵的FFT之后,卷积计算可以被转换为更快速的内积运算(inner product operation)。&对于使用多个GPU卡的数据并行性,运算的扩展性受到梯度聚合处理的极大影响,因为其需要通过PCI-e传输数据。在本评测的测试平台中,Telsa K80的PCIe 3.0的较高吞吐量约为8GB/秒,这意味着在FCN-R情况下需要0.0256秒的时间将GPU的梯度转移到CPU。但是一个mini-batch的计算时间只有大约100毫秒。因此,减少GPU和CPU之间传输数据的成本将变得极为关键。&不同软件工具的性能表现各异,且与并行设计的策略相关。在Caffe中,梯度更新在GPU端执行,但它使用了树减少策略(tree reduction strategy)。如果说有4个GPU用于训练,则两对GPU将首先各自交换梯度(即GPU 0与GPU 1交换,GPU 2与GPU 3交换),然后GPU 0与GPU 2交换。之后,GPU 0负责计算更新的模型,再将模型传送到GPU 1,然后0将模型传送到1,2传送模型到3,这是一个并行过程。因此,Caffe的可扩展性(bility)的性能在很大程度上取决于系统的PCI-e拓扑。CNTK的作者在框架中添加了1比特的随机梯度下降(1-bit stochastic gradient descent),这意味着PCI-e交换梯度的时间可大大缩短。因此,即使使用大型网络,CNTK的可伸缩性也依旧表现良好。&在这类网络上,MXNet也表现出良好的可扩展性,因为它是在GPU上进行梯度聚合,这不仅减少了经常传输梯度数据的PCI-e时间,并能利用GPU资源来进行并行计算。&然而,TensorFlow在CPU端进行梯度聚合和模型更新,这不仅需要很多时间通过PCI-e传输梯度,而且还使用单个CPU更新串行算法中的模型。因此TensorFlow的伸缩性不如其他工具。&对于多个GPU,Torch在扩展性上与TensorFlow类似。其梯度聚合和更新都在CPU端执行,但Torch使用了并行算法来利用所有空闲的CPU资源。因此,其伸缩性要略好于TensorFlow,但仍然比不上Caffe、CNTK和MXNet。&总的来说,因为有了GPU计算资源,上述所有深度学习工具的速度与CPU的版本相比,都有了极大提高。这并不出奇,因为在GPU上的矩阵乘法以及FFT的性能要明显优于CPU。未来作者还将评测更多的深度学习工具(比如百度的Paddle),也会把 AMD的GPU等也加入评测。并在高性能GPU集群上进行评测。欢迎加入本站公开兴趣群商业智能与数据分析群兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识QQ群:
上一篇:下一篇:}

我要回帖

更多关于 二值化神经网络caffe 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信