作家
登录

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

作者: 来源: 2017-09-28 12:06:01 阅读 我要评论


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

机能影响

内存带宽对于硬件体系的机能幼ê徵上图所示。如不雅把内存比做瓶子,运算单位比作杯子,那么数据就是瓶子里的各色颗粒,而内存接口就是瓶口,经由过程瓶口数据才能进入杯子被花费(处理)掉落。而内存带宽就是瓶口的宽度了。瓶口宽度越窄,则数据须要越多时光才能进入杯子(处理单位)。正所谓「巧妇难为无米之炊」,如不雅带宽有限,那么即使处理单位无穷快,在大年夜多半时刻也是处理单位在空等数据,造成了计算力的浪费。

深度进修收集与 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 Model

显然,一个计算体系的内存带宽如不雅很宽,则算法不须要运算强度很大年夜也能随便马虎碰着计算才能上限决定的「屋顶」。鄙人图中,计算才能不变,而跟着内存带宽的上升,达到计算力屋顶所需的运算强度也越低。

【编辑推荐】

  1. 据说你懂得深度进修最常用的进修算法:Adam优化算法?
  2. 深度进修练习时 GPU 温度过高?输入这几行敕令就能敏捷降温
  3. 深度进修:简单而有局限性的求解方法
  4. 聊聊数据发掘比赛中的套路与深度进修的局限
  5. 若何解决深度进修中的多体问题
【义务编辑:张子龙 TEL:(010)68476606】

带宽-强度

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 的计算单位)无法达到屋顶。这个例子又让我们看到了硬件-算法协同设计时的另一个要点:除了内存带宽之外还有「其他原因」可能让算法无法达到屋顶,我们要尽量减小这些「其他身分」!

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


  推荐阅读

  Java反序列化漏洞从理解到实践

起首你可以先读一下Nick写的┞封篇文┞仿, 文┞仿中介绍了DeserLab以及Java反序列化相干内容。本文会具体介绍Java序列化协定的具体细节。浏览完本文后,你应当可以本身搞定DeserLab情况。接下来我们须要应用各类预>>>详细阅读


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

地址:http://www.17bianji.com/lsqh/37658.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)