机器之心专栏

作者:李飞

随着深度学习的不断发展,计算能力得到了深度学习社区越来越多的注意。任何深度学习模型,归根到底都是需要跑在设备上的,而模型对设备性能的要求越低,则能得到越多的运用——千万不能让硬件成为了模型普及的瓶颈!

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

机器学习对内存有要求吗(内存带宽与计算能力)(1)

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

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

机器学习对内存有要求吗(内存带宽与计算能力)(2)

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

机器学习对内存有要求吗(内存带宽与计算能力)(3)

,