论文阅读笔记2

Optimizing Memory Efficiency for Deep Convolutional Neural Networks on GPUs

1 论文简介

作者研究了CNN各层的访存效率,并揭示了数据结构和访存模式对CNN的性能影响。并提出了优化方法。

2 方法介绍

2.1 Benchmarks

数据集:MNIST,CIFAR,ImageNet
CNN:AlexNet,ZFNet,VGG

2.2 实验设置

CPU:Intel Xeon E5620
OS: Linux
GPU: NVIDIA GTX Titan Black

3 内存分析:数据结构

分析数据结构对CNN各层的性能影响,并提出一个启发式的数据结构选择方法,根据每层的类型和大小选择合适的数据结构。

3.1 一般实现中的数据结构

作者总结了卷积层的几个属性,首先,batch size, N(图片数量,通常是16的倍数,作为最低维度);其次,尽管每张图片的高度和宽度是一样的,但是对于不同的卷积层这两个数值会相差很多;最后,特征图的深度在第一个卷积层是1或3,在后续的卷积层是16的倍数。通过分析后,作者确定了两种数据结构,CHWN和HWCN。通过实验分析,作者得到了两点结论,1. N和C两个维度对CNN的性能有很大的影响,2. 可以根据性能分析设计启发式的数据结构选择方法。
对于一个给定的卷积配置,(1)如果C小于阈值 C t C_t Ct,倾向于选择CHWN,因为NCHW中的内存转换操作非常耗时;(2)如果N大于等于阈值 N t N_t Nt,倾向于选择CHWN,因为N足够大,能够获得良好的内存合并访问和数据重用。

3.2 FFT实现中的数据结构

除了使用直接计算和矩阵相乘的方法外,卷积层还可使用FFT实现。但是为了和特征图的大小匹配,FFT需要对filter kernel进行补齐。这就回带来额外的内存操作。对于比较小的filter来说,这种操作的耗时是非常大的。一种可行的解决方法是分块(FFT-tiling)。通过实验作者得出结论,之前的数据结构启发式选择方法对基于FFT的卷积仍然适用。

3.3 快速数据结构转换

作者主要讨论了如何快速的将CHWN转换为NCHW。首先,作者观察到在两种数据结构CHWN和NCHW中,C,H,W,三个维度具有相同的相对位置,因此可以将三个维度合并成一个维度CHW。因此CHWN变成[CHW][N],NCHW变成[N][CHW];然后,应用基于共享内存分块方法(见作者论文参考文献[30])达到对全局内存访问优化的目的。

3.4 CNN自动数据结构支持

在CNN的配置文件中新增一个属性,表明选择的数据结构。在每层计算结束后,插入一个检测函数,判断进行下一层计算时是否需要进行数据转换。判断的依据是数据转换后带来的性能提升要能够抵消掉数据转换的消耗。需要执行一次one-time profiling确定每层数据转换的耗时。

4 外存分析

4.1 池化层优化

进行池化层计算时,带宽利用率非常低,原因有二。1. NCHW数据结构使得池化层产生不连续的内存访问;2. 重复的内存访问。采用了两个方法解决,1. 池化层使用NCHW数据结构;2. 利用寄存器避免重复的数据访问。

4.2 softmax层优化

softmax层带宽利用率低有两个原因。1. 为了确保每步之间的数据依赖,cuda-convnet和Caffe为每步使用独立的kernel。因此,一共用了5个kernel实现softmax层。在连续的两层之间,中间结果都是通过global memory进行传递的。2. softmax层的每一步包括两个循环,第一个遍历batch size N,第二个遍历左右的类别。最外层循环(遍历batch size N)是独立的,可以并行化。但是并行度不够。作者的解决方案是1. 为了减少中间数据的传输时间,将5个kernel进行合并,使用寄存器和共享内存进行存储。(合并过程细节懒得看了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值