内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

作者: 佚名 2017-09-28 11:20:59

说到模型对于硬件的要求,大家***个想到的就是计算量,即一个深度学习模型需要多少次计算才能完成一次前馈。然而,除了运算量之外,模型对于内存带宽的需求也是影响实际计算所需要时间的重要参数。我们下面会看到,在内存带宽有限的情况下,仅仅缩小计算量并不能让计算时间等比例下降!

性能影响

内存带宽对于硬件系统的性能影响如上图所示。如果把内存比做瓶子,运算单元比作杯子,那么数据就是瓶子里的各色颗粒,而内存接口就是瓶口,通过瓶口数据才能进入杯子被消费(处理)掉。而内存带宽就是瓶口的宽度了。瓶口宽度越窄,则数据需要越多时间才能进入杯子(处理单元)。正所谓「巧妇难为无米之炊」,如果带宽有限,那么即使处理单元***快,在大多数时候也是处理单元在空等数据,造成了计算力的浪费。

深度学习网络与 Roofline 模型

对于工程师来说,定性分析并不够,我们还需要能定量分析算法对于内存带宽的需求,以及对于计算性能的影响。

算法对于内存带宽的需求通常使用「运算强度 (operational intensity,或称 arithmetic intensity)」这个量来表示,单位是 OPs/byte。这个量的意思是,在算法中平均每读入单位数据,能支持多少次运算操作。运算强度越大,则表示单位数据能支持更多次运算,也就是说算法对于内存带宽的要求越低。所以,运算强度大是好事!

我们来举一个例子。对于步长(stride)为 1 的 3x3 卷积运算,假设输入数据平面大小为 64x64。简单起见,假设输入和输出 feature 都为 1。这时候,总共需要进行 62x62 次卷积运算,每次卷积需要做 3x3=9 次乘加运算,所以总共的计算次数为 34596,而数据量为(假设数据和卷积核都用单精度浮点数 2byte):64x64x2(输入数据)+ 3x3x2(卷积核数据)= 8210 byte,所以运算强度为 34596/8210=4.21。如果我们换成 1x1 卷积,那么总的计算次数变成了 64x64=4096,而所需的数据量为 64x64x2 + 1x1x2=8194。显然,切换为 1x1 卷积可以把计算量降低接近 9 倍,但是运算强度也降低为 0.5,即对于内存带宽的需求也上升了接近 9 倍。因此,如果内存带宽无法满足 1x1 卷积计算,那么切换成 1x1 卷积计算虽然降低了接近 9 倍计算量,但是无法把计算速度提升 9 倍。

这里,我们可以看到,深度学习计算设备存在两个瓶颈,一个是处理器计算能力,另一个是计算带宽。如何分析究竟是哪一个限制了计算性能呢?可以使用 Roofline 模型。

典型的 Roofline 曲线模型如上图所示,坐标轴分别是计算性能(纵轴)和算法的运算强度(横轴)。Roofline 曲线分成了两部分:左边的上升区,以及右边的饱和区。当算法的运算强度较小时,曲线处于上升区,即计算性能实际被内存带宽所限制,有很多计算处理单元是闲置的。随着算法运算强度上升,即在相同数量的数据下算法可以完成更多运算,于是闲置的运算单元越来越少,这时候计算性能就会上升。然后,随着运算强度越来越高,闲置的计算单元越来越少,***所有计算单元都被用上了,Roofline 曲线就进入了饱和区,此时运算强度再变大也没有更多的计算单元可用了,于是计算性能不再上升,或者说计算性能遇到了由计算能力(而非内存带宽)决定的「屋顶」(roof)。拿之前 3x3 和 1x1 卷积的例子来说,3x3 卷积可能在 roofline 曲线右边的饱和区,而 1x1 卷积由于运算强度下降,有可能到了 roofline 左边的上升区,这样 1x1 卷积在计算时的计算性能就会下降无法到达峰值性能。虽然 1x1 卷积的计算量下降了接近 9 倍,但是由于计算性能下降,因此实际的计算时间并不是 3x3 卷积的九分之一。

Roofline Model

显然,一个计算系统的内存带宽如果很宽,则算法不需要运算强度很大也能轻易碰到计算能力上限决定的「屋顶」。在下图中,计算能力不变,而随着内存带宽的上升,达到计算力屋顶所需的运算强度也越低。

带宽-强度

Roofline 模型在算法-硬件协同设计中非常有用,可以确定算法和硬件优化的方向:到底应该增加内存带宽/减小内存带宽需求,还是提升计算能力/降低计算量?如果算法在 roofline 曲线的上升区,那么我们应该增加内存带宽/减小内存带宽需求,提升计算能力/降低计算量对于这类情况并没有帮助。反之亦然。

我们来看一个实际的例子,比较一下各种机器学习算法在 roofline 模型上所处的位置。下图取自 Google 的 TPU 论文《In-Datacenter Performance Analysis of a Tensor Processing Unit》。由图中可见,LSTM 算法的运算强度***,所以被卡在了 roofline 模型的上升区中间的地方,即 TPU 在执行 LSTM 算法的时候,由于内存带宽限制所以性能只有 3TOPS 左右,仅为峰值性能(90TOPS)的三十分之一。经典全联接神经网络(multi-layer perceptrons, MLP)的运算强度略好于 LSTM,也被卡在 roofline 曲线的上升区,实际执行性能大约在 10TOPS 左右。而卷积神经网络模型,尤其是 CNN0,由于卷积神经网络中能实现卷积核复用,因此运算强度非常高,于是可以非常接近 TPU roofline 曲线的屋顶(86 TOPS)。CNN1 模型虽然运算强度也很高,但是由于种种其他原因(论文中表示是由于 CNN1 模型的特征深度较浅无法完全利用 TPU 的计算单元)无法到达屋顶。这个例子又让我们看到了硬件-算法协同设计时的另一个要点:除了内存带宽之外还有「其他原因」可能让算法无法到达屋顶,我们要尽量减小这些「其他因素」!

深度学习 内存带宽 计算能力
上一篇:为什么要用深度学习来做个性化推荐 CTR 预估 下一篇:神经网络训练中,傻傻分不清Epoch、Batch Size和迭代
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

人工智能影响制造业的四种方式

这些年来,人工智能取得了很大的进步。它可以影响许多不同的行业,这主要是因为它改进了处理、算法和它所保存的数据量。

Cassie ·  17h前
动态图上的深度学习-时间图网络建模

许多涉及各种性质的交易网络以及社连接边动,以及与现实世界问题相关问题都是动态的,可以建模为图结构,其中节点和边随着时间的推移而变化。在这篇文章中,我们描述了时间图网络,这是用于在动态图上进行深度学习建模的通用框架。

佚名 ·  1天前
人工智能这5大趋势将给世界带来哪些影响?

GPU和海量的数据增强了计算和处理能力,为现代算法和深度学习带来了显著的变化。在未来几年,我们可以期待看到人工智能技术的重大变化。以下是人工智能正在塑造世界的5个趋势。

Yu ·  2天前
人工智能加速改变生产生活

在移动互联网、大数据等新技术的驱动下,人工智能迎来新一轮发展热潮,真正进入落地实践阶段,正在加速改变人们生产生活。

彭训文 ·  2天前
新的深度学习模型如何将图像分割引入边缘设备?

据报道,人工智能初创厂商DarwinAI公司和加拿大滑铁卢大学的人工智能研究人员开发和设计了一种新的神经网络结构,使在低功耗和低计算能力的边缘计算设备上进行图像分割成为可能。

李睿 ·  3天前
从“几何深度学习”看深度学习江湖的统一

通过对称性和的变换,可以提炼出覆盖CNNs, GNNs, LSTMs, Transformers, DeepSets, mesh CNN等一切你所需构建的架构吗?

水木番 ·  2021-05-06 09:05:11
深度学习与机器视觉的重要性解析!推动机器人摆脱束缚?

深度学习是工业机器人的核心技术,能够推动机器人摆脱束缚,根据环境的变化,自主的进行工业操作,并且能够自主学习,充实自己,以适应不断变化的工业环境。

时尚小马甲 ·  2021-05-05 21:00:22
就业的未来:到2030年哪些职业将会消失?

强大的新技术正在提高生产力,改善生活,重塑我们的世界。但是它们所取代的工作又会怎样呢?

Cassie ·  2021-04-30 17:24:35
Copyright©2005-2021 51CTO.COM 版权所有 未经许可 请勿转载