AWS研究热点:BMXNet – 基于MXNet的开源二进神经网络实现

http://www.atyun.com/9625.html

最近提出的二进神经网络(BNN)可以通过应用逐位运算替代标准算术运算来大大减少存储器大小和存取率。通过显着提高运行时的效率并降低能耗,让最先进的深度学习模型也能在低功耗设备上使用。这种技术结合了对开发者友好的OpenCL(与VHDL或Verilog相比),同时也让FPGA成为深度学习的可行选择。

在这篇文章中,我们要介绍BMXNet,它是一种基于Apache MXNet的开源BNN(二进神经网络)库。成熟的BNN层可以很好地应用于其他标准库组件,并且在GPU和CPU模式都可以工作。BMXNet由Hasso Plattner研究所的多媒体研究小组维护和开发,并根据Apache许可发布。库、示例项目以及预训练的二进制模型集合可从https://github.com/hpi-xnor下载。

框架

BMXNet提供支持输入数据和权重二值化的激活,卷积和完全连接的层。这些层被设计成相应MXNet变体的嵌入式替代,称为QActivation,QConvolution和QFullyConnected。它们提供了一个额外的参数act_bit,它可以控制由层计算的位宽度。在列表1和列表2中展示了使用推荐的二进制层与MXNet相比较的Python示例。在网络中的第一层和最后一层不能使用二进制层,因为这可能会大大降低精度。BMXNet中BNN的标准块结构:QActivation-QConvolution或QFullyConnected-BatchNorm-Pooling如下所示。

在传统的深度学习模型中,全连接层和卷积层主要依赖于矩阵的点积,这需要大量的浮点运算。相反,使用二值化权重和输入数据可以通过利用CPU指令xnorpopcount来执行高性能矩阵乘法实现。现在大多数的CPU都针对这些类型的操作进行了优化。每一行的A和每一列的B的乘法和加法的点积近似于,首先将它们与xnor操作结合起来然后统计结果中位组为1的数量,也就是位1计数。这样我们就可以利用这种按位操作的硬件支持。位1计数指令在支持SSE4.2的x86和x64 CPU上可用,而在ARM架构中,它包含在NEON指令集中。使用这些说明的未优化的GEMM(通用矩阵乘法)实现如列表3所示:

编译器内置的popcount由gcc和clang支持,它编译并转换为支持的硬件上的机器指令。BINARY_WORD是封装的数据类型,存储32(x86和ARMv7)或64(x64)矩阵元素,每个元素代表一个位。我们实施了几个优化版本的xnor的GEMM内核,我们尝试通过阻止和打包数据以及使用unrolling和并行化技术来利用处理器缓存层次结构。

训练和推理

在训练阶段,当将权重和输入值限制在离散值-1和+1之间时,我们仔细设计二值化层以精确匹配MXNet内置层的输出(使用BLAS点产品操作计算)。在计算点积后,我们将结果映射回所提出的xnor样式点积的值范围,如下式所示:

其中n是值范围参数。此设置可通过应用CuDNN实现GPU支持的大规模并行训练。然后,训练后的模型可用于对功能不强大的设备(无GPU支持和小型存储空间)进行推理,其中预测的前向传递将使用xnor和popcount操作而不是标准算术运算来计算点积。

在使用BMXNet训练网络后,权重存储在32位浮点变量中。这同样适用于以1位位宽训练的网络。我们提供一个model_converter,它读取二进制训练的模型文件,并封装QConvolution和QFullyConnected的权重。转换后,每个权重仅使用1位存储和运行时内存。例如,具有完全精确权重的ResNet-18网络(在CIFAR-10上)的大小为44.7MB。我们的模型转换器的转换实现29倍压缩,压缩后的文件大小为1.5MB。

分类精度

我们用BNN在MNIST(手写数字识别),CIFAR-10(图像分类)数据集上进行了实验。实验在具有Intel(R)Core TM i7-6900K CPU,64GB RAM和4TITAN X(Pascal)GPU的工作站上进行。

上表列出了我们在MNIST和CIFAR-10上训练的二进制和全精度模型的分类测试精度。我们能看到表内显示二进制模型非常小。并且准确性仍然很不错。我们还在ImageNet数据集上进行了二值化,部分二值化和全精度模型的实验,其中部分二值化模型结果不错,而完全二值化的模型仍具有很大的改进空间(更多细节访问论文:https://arxiv.org/abs/1705.09864)。

效率分析

我们对基于ubuntu160.04/64位平台的不同GEMM方法的效率进行了实验,采用英特尔2.50GHz×4 CPU,配有popcnt指令(SSE4.2)和8G RAM。测量在卷积层内进行。在这里,我们修改参数如下:filter number = 64,kernel size = 5×5,batch size = 200,矩阵大小M,N,K分别为64,12800,kernel_w×kernel_h×inputChannelSize。下图显示了结果。

不同颜色的柱形表示不同输入通道大小的处理时间(以毫秒为单位):xnor_32和xnor_64表示xnor和gemm在32位和64位中操作;xnor_64_omp表示通过使用OpenMP并行程序库加速的64位xnor和gemm;“binarize input and xnor_64_omp”进一步累加了输入数据二值化的处理时间。通过积累输入数据的二值化时间,我们仍然实现了比Cblas方法快约13倍的加速度。

结论

我们在基于MXNet的C/C++中引入了BMXNet,一种开源二进制神经网络实现。在我们目前的实验中,我们已经实现了高达29倍模型大小的节省和更高效的二进制gemm计算。我们开发了针对Android和iOS的图像分类的示例应用程序,并使用了一个二进制的resne-18模型。

GitHub地址:https://github.com/hpi-xnor

原文地址:https://www.cnblogs.com/jukan/p/11044679.html

时间: 2024-11-03 20:26:54

AWS研究热点:BMXNet – 基于MXNet的开源二进神经网络实现的相关文章

基于 .NET 的开源AOP框架评估

Rating of Open Source AOPFrameworks in .NET 基于 .NET 的开源AOP框架评估 Introduction 引言 In the days where business agility is becoming the definite needof any business / IT infrastructure, quite frequentlywe are ending up with facing scenarios where we need t

目标检测与跟踪的研究热点以及发展趋势

目标检测与跟踪的研究热点以及发展趋势: 1) 场景信息与目标状态的融合 场景信息包含了丰富的环境上下文信息, 对场景信息进行分析及充分利用, 能够有效地获取场景的先验知识, 降低复杂的背景环境以及场景中与目标相似的物体的干扰; 同样地, 对目标的准确描述有助于提升检测与跟踪算法的准确性与鲁棒性. 总之,尝试研究结合背景信息和前景目标信息的分析方法,融合场景信息与目标状态, 将有助于提高算法的实用性能. 2) 多维度. 多层级信息融合 为了提高对运动目标表观描述的准确度与可信性, 现有的检测与跟踪

[转]基于C#的开源GIS项目介绍之SharpMap篇

我是一个刚毕业的GIS本科毕业生,目前在杭州从事GIS软件应用开发.在项目开发中总感觉自己的编程水平还不够,于是想找些开源GIS小项目来研究研究,借以提高自己的编程能力和项目开发能力.在网上搜了一下“GIS开源”发现还不少,下面是一个介绍GIS开源项目的链接: http://www.yuanma.org/data/2008/0526/article_3048.htm 里面介绍了基于各种编程语言的GIS开源项目,并列出了各自的特点和官网链接. 由于在学校时候学的一直都是C#和Visual Stud

Android研究之为基于 x86 的 Android* 游戏选择合适的引擎详解

摘要 游戏开发人员知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中,它们所占的比例超过 90%). 如要跻身该市场,开发速度非常关键. 一些刚起步的独立开发人员更愿意从零开始来开发自己的所有代码:但是为了达到更高的质量而不用花费数年的时间进行开发,其他人可能会选择已有的游戏引擎.上章研究了英特尔 Android* 开发人员指南上的对等应用详解,在选择引擎时,你可以考虑以下几个因素: 成本 - 你

基于HTML5的开源图标库-ECharts

ECharts: 来自百度商业前端数据可视化团队,基于html5 Canvas,纯Javascript图表库,底层依赖ZRender,商业产品常用图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力.图表类型支持折线图(区域图).柱状图(条状图).散点图(气泡图).K线图.饼图(环形图).雷达图(填充雷达图).和弦图.力导向布局图.地图,同时支持任意维度的堆积和多图表混合展现. 链接是:h

亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计

设计高可用的应用是架构师的一个重要目标,但是基于云计算平台设计高可用应用与基于传统平台的设计有许多不同.云计算在给架构师带来了许多新的设计挑战的时候,也给带来了许多新的设计理念和可用的服务.如何在设计应用的时候充分利用云平台的各种特点是基于云计算设计的一个重要条件.在这个在线讲座中,我们将以亚马逊AWS云平台为例,讨论如何设计一个高可用应用. 我们先会根据AWS服务是否天然高可用.高容错的特点把常见的AWS服务分类.比如AWS把下面服务设计成高可用和高容错的服务: ·     Amazon S3

基于OSSIM 的开源安全运维平台

基于OSSIM 的开源安全运维平台 一个安全运维平台能否有效就要看收集数据的能力,如果数据源都有缺失,那上层的关联分析很可能会产生偏差.对于网络安全设备而言,主要采集其安全日志(包括报警)和设备运行状态信息.这本OSSIM最佳实践向您展示了其基于插件的强大数据采集和处理能力. 然而目前市场上的安全设备的输出信息随着设备种类和生产厂家的不同都有所不同,并且没有一个统一的标准来格式化所有的安全日志.因此,同时收集多源异构安全设备的数据,除了OSSIM之外的各类开源工具都是一个复杂而艰难的过程. 1.

?Postgres-XL:基于PostgreSQL的开源可扩展数据库集群

?Postgres-XL:基于PostgreSQL的开源可扩展数据库集群 最近这一年业界去"IOE"越叫越响,很多传统企业也把去"IOE"计划摆上了桌面.我老是想不明白这些非互联网企业(比如:银行)做这种事的动力何在? 高大上的"自主可控"."振兴民族科技"等空洞口号先不去管,真正的动力在哪里? "安全"."成本"."互联网架构".......等等.等等, 唯一看起来

高性能、高容错、基于内存的开源分布式存储系统Tachyon的简单介绍

Tachyon是什么? Tachyon是一个高性能.高容错.基于内存的开源分布式存储系统,并具有类Java的文件API.插件式的底层文件系统.兼容Hadoop MapReduce和Apache Spark等特征.Tachyon能够为集群框架(如Spark.MapReduce等)提供内存级速度的跨集群文件共享服务.Tachyon充分使用内存和文件对象之间的世代(Lineage)信息,因此速度很快,官方号称最高比HDFS吞吐量高300倍.目前,很多公司(如Pivotal.EMC.红帽等)已经在使用T