作者:Bryan House是深度学习初创公司Neural Magic的首席商务官。
我们在机器学习中的内存需求方面所了解的一切也许是错误的。
如今,当数据科学家们使用诸如GPU、TPU或类似硬件加速器之类的“吞吐量计算”设备处理深度学习模型时,可能面临这个决定:缩减模型或输入的尺寸/大小,以适应设备的内存限制。在许多情况下,在单单一个GPU上训练大而深的神经网络(或甚至是宽而浅的神经网络)也可能是不可行的。
有没有想过为什么在原始的Resnet 152上,ILSVRC-2015图像检测比赛的获胜者有152层而不是有153层?152层中的参数所占用的内存略小于12G,而153层的参数占用的内存却超过12G(当时GPU内存的标准大小),这是一个巧合吗?
正如英伟达的首席科学家Bill Dally承认的那样:深度学习仍然“完全受制于硬件”。如果ImageNet中的图像其尺寸大于224×224,那么你就必须缩小批尺寸(batch size)、减少Resnet模型层的数量,或者将高分辨率图片缩小为较小的224×224图片。这任何一个方法都极有可能导致预测准确性因而降低。
当今庞大的GPU或TPU计算平台可以达到数十甚至数百teraflops(每秒万亿次浮点运算)的性能,但无法真正解决这个内存问题。假设DGX-2拥有500GB的高带宽内存(HBM)内存,该内存实际上被分配给了16个GPU。在训练期间,一份模型必须在每个GPU中32G昂贵的HBM内存中装得下(跨GPU的模型并行训练是鬼话)。谷歌TPU2 pod也是如此,它声称拥有4TB的共享HBM内存。这实际上意味着256个TPU2芯片中每个芯片都有16GB的内存,在训练过程中模型和参数在这16GB中必须装得下(加速就别指望了)。因此,在DGX-2或TPU pod上,你可以在ImageNet上训练Resnet 152,但仍无法训练Resnet 200。你可以运行224×224尺寸的图像,但绝对运行不了4K图像。
换句话说,随着我们的输入变得更庞大,随着我们增加视频,并且旨在训练更深更大的模型以便准确地分析模型,专用加速器硬件设备的内存限制会继续阻碍发现和创新。
为什么我们就任由这些限制阻止我们开发Resnet-500(及更高级的版本)呢?
高吞吐量难题
内存需求令我们失望的一个主要原因是,我们行业沉迷于这个观念,即深度学习硬件与大脑一样注重吞吐量计算,其中更多的计算能力等同于更好的性能。用每个周期的FLOPS来衡量性能已成为了行业标准,而生成这些FLOPS的加速器可运行数千个并行计算核心,这就需要昂贵且大小有限的HBM内存。
实际上,就“类似大脑”的深度学习硬件而言,我们可能着眼于错误的范式和错误的成功衡量标准。我们的大脑实际上不是吞吐量设备,大脑的计算是稀疏的。其所谓的“大规模并行机制”很可能是在慢速生化介质中而不是在我们可用的快速硅片电路中编写程序的方式的产物。
可能除了底层算法外,大脑如何计算方面没有什么内在的东西。由于我们还没有弄清楚这些算法是什么,我们只是一味为低效的算法提高FLOPS(我们知道如今的模型效率低下,是由于我们可以大大简化模型,并降低操作的精度,但仍获得同样的准确性)。有大量证据表明,如果我们能搞清楚这些算法,就不需要那么多的FLOPS。
新逻辑:忘了FLOPS,专注于算法
要改变当前基于吞吐量=性能这个前提的行业逻辑不会很容易,但是其他行业面临类似的挑战:更多的原始算力(或更多同样的算力度量指标)未必是最佳方法。就像我们在下面的示例中看到的那样,也许解决方案是从全然不同的角度来看待性能。
灯泡:瓦数更高的灯泡vs效率更高的灯泡。几十年来,瓦特是度量灯泡输出的一个已被接受的指标。人们普遍认为,白炽灯泡瓦数越高,亮度就越高、功率就越强——完全忽略了效率低下的问题(还发热!)。然而,随着更高效的LED灯出现,瓦数较低的灯泡可用来获得与瓦数较高的白炽灯泡相似的性能基准。如果解决办法仍然是制造瓦数越来越高的灯泡,我们可能会让世界着火(真是如此)。
车辆:更多的MPG(英里/加仑)vs不同类型的发动机。在车辆中,发动机马力和每加仑英里数(MPG或行驶里程)是业界通常衡量性能的基准指标。消费者在马力和MPG之间进行权衡,这取决于他们更看重汽车的哪方面。即使直到今天,消费者和汽车制造商仍在为这种权衡而纠结,政府法规和油价等外部因素给这种讨论带来了影响。
然而,曾看过特斯拉短程高速汽车赛视频的人都可以证明,这完全是错误的权衡,基于错误的度量指标。像特斯拉这些混合动力和电动汽车制造商已挑战了当前的汽车性能范式,表明汽车可以通过不同的动力源达到相似的行驶里程,而且在一些情况下,可以在不牺牲马力的情况下达到这样的行程里程。
在这两个例子中,业界都拒绝承认当前的范式不是唯一的出路。为了加快机器学习领域发展,我们必须愿意检验我们的假设,即由FLOPS衡量的更高吞吐量是数据科学家们使用更大模型或更大文件获得性能的唯一途径。
如果我们可以通过更充分地利用已有的计算资源,在不牺牲尺寸的情况下获得类似的性能,会怎么样?为什么我们不决定质疑FLOPS越多越好这一观念?
领取专属 10元无门槛券
私享最新 技术干货