倍端到端加速,陈天奇创业公司提克服二值网络瓶颈新方法

核心提示选自medium作者:Josh Fromm机器之心编译机器之心编辑部去年,TVM 开发团队陈天奇等人创建了 OctoML 公司,旨在「让机器学习可以部署在所有硬件上」。前段时间,该公司推出了第一个软件即服务产品 Octimizer,可以帮助

从中选择

乔希·弗洛姆

机器心脏编译

机器之心编辑部

去年,TVM开发团队陈天琦等人创立了OctoML,旨在“让机器学习可以部署在所有硬件上”。前段时间,该公司推出了首款软件即服务产品Octimizer,可以帮助开发者更方便快捷地将ML模型部署到设备上。最近,公司的官方博客介绍了一种快速的端到端二进制神经网络——激流,经过TVM优化后,可以实现高达12倍的端到端加速。该公司的机器学习系统工程师乔希·弗洛姆(Josh Fromm)在博客中介绍了激流的细节。

激流是一种新的模型量化方法,可以将模型量化到1或2比特。研究团队于今年3月在MLSys上推出了激流。本文主要讲一下为什么要搭建激流,快速了解它的幕后工作原理。该团队计划明年为Octomizer添加自动超低位功能。在此之前,读者可以使用开源的激流项目和MLSys论文中的信息来优化模型。

论文链接:https://proceedings.mlsys.org/static/paper _ files/ml sys/2020/155-paper . pdf

GitHub项目:https://github.com/jwfromm/Riptide

动机和背景

机器学习发展迅速。几乎每个月,那些优秀的新模型都会大大提高一些视觉或语言任务的SOTA。其中一些改进是由新的算法和架构创新推动的,但对于深度学习任务,不断扩展的计算能力和内存也取得了重大进展。

随着ML精度的提高,模型所需的计算能力和内存也在增加。

早在2016年,我们就可以看到模型大小和精度的关系。目前,许多SOTA型号只能在最新的英伟达GPU上有效运行。但是很多用户花不了几千块钱买高端GPU,限制了机型部署的范围。

由于各种网络可能只需要训练一次,开发者可能会证明训练成本是合理有效的。但是,模型一旦部署,就会长期被大量用户持续运行。为了部署这种规模的最新模型,通常需要将输入数据流传输到云,并将预测返回给用户设备。现在,许多应用程序依赖于这种方法,但它有一些缺点,如网络连接,延迟,隐私问题和庞大而复杂的基础设施。

为了避免这些缺点,许多团队探索如何在低成本的最终用户硬件上直接运行最新的模型。这是一个巨大的挑战,因为这样的设备没有足够的计算能力或内存。比如树莓Pi 3比英伟达Titan GPU慢4000倍左右。

为了让高精度模型适应这类平台,近期的研究方向已经开始探索如何让这类网络运行更快,占用内存更少。在高层次上,这些技术遵循两种策略:架构优化和近似优化。架构优化包括寻找连接各层的新方法,以减少延迟或提高参数有效性。MobileNet和SqueezeNet是两个专注于移动端的架构。与创建新的移动设备友好模型相反,近似优化旨在通过加速操作来加速现有模型,同时保持足够的精度。

两种流行的近似优化方法。

在目前流行的几种近似优化方法中,知识提取和剪枝是两种有代表性的方法。前者试图利用大规模的教师网络更好地培养学生网络;后者删除网络中影响较小的权重和激活函数。本文将重点介绍另一种方法——二进制神经网络,它在泛化性能、加速潜力和记忆压缩方面都有着优异的表现。

二元网络

为了提高性能和降低内存需求,研究团队在部署模型时越来越多地量化激活函数和权重。比如在推理过程中,工程师可能会把模型转换成可以在int8上操作的方式,而不是训练中常用的float32。小整数运算不仅比浮点运算快,而且因为占用的比特数更少,所以可以通过充分利用可用的内存带宽来提高吞吐量。在实践中,许多模型被量化而没有显著的准确度损失,因此这种技术非常受欢迎。

二值化将量化发挥到极致,将网络的权重和激活函数降低到只有一位,会带来一些新的优化。考虑到两个1位值之间所有可能的乘法运算,这类方程非常类似于与门的逻辑真值表。

如果认为值为0的位代表-1,那么上表就成为异或门的真值表。

这种等价允许我们用更有效的二进制运算来代替浮点运算。

浮点乘积和二进制点乘积的比较。

通过统计上图中点积内循环的运算次数,可以发现二值化可以将一层的运算次数减少到1/43,参数大小减少到1/32。当Courbarioux等人首次提出如此大规模的优化效应时,2016年掀起了二进制网络研究的热潮。当然,用1位值近似32位浮点数是一种有损近似。与对应的全精度相比,二进制网络通常有明显的精度损失,top-1的精度通常损失近20%。因此,二进制网络的研究重点一直集中在如何减少精度损失上。

虽然许多研究团队在提高二进制网络的准确性方面取得了很大进展,但他们都没有以可以测量端到端加速的方式实现网络。这种实现上的缺失,不仅让我们很难知道二进制网络的实际速度,也阻碍了二进制网络在很多实际环境中的应用。

缺少实现的原因是,要写一个简单的二进制矩阵乘法,虽然运算次数比较少,但还是会比大多数全精度乘法慢很多。一个函数的运行时间并不完全取决于它的运行次数,内存的访问方式也起着重要的作用。任何二进制网络的实现都必须与OpenBLAS、MKLDNN等大型工程团队多年手工优化的库竞争,难度是可行的。对于大多数研究机构来说,不可能花大量的时间和精力去建立一个有竞争力的数据库。相反,他们在训练时模拟二值化,并假设可以根据运算次数预测加速度。

激流的突破

为了解决这些问题,OctoML的研究人员提出了激流,这是一种发现和解决端到端二进制网络瓶颈的方法。激流是基于深度学习系统的编译器TVM,可以帮助我们自动生成优化的高性能二值化算子。

到目前为止,二进制网络优化只关注不同的策略来高效地实现核心的低比特卷积层。这个重点是建立在假设二进制网络的性能可以反映高精度网络的行为:如果核心卷积可以用尽可能少的比特达到高精度,那么整个网络就会变得非常快。然而,没有任何二元网络是由卷积简单构成的。卷积之间有很多关键的中间运算,需要用来处理下一层的数据。在高精度网络中,这些层的延迟可以忽略不计,但在二进制网络中,卷积可以达到43倍的加速,所以这些中间的“粘合层”就变得非常重要。

二元卷积及其计算复杂性之间的“粘合层”。h和w代表输入维数,f代表滤波器的数目。

在上图中,大多数当前的二进制网络包含至少四个蓝色层。从左到右,首先,QConv的输出从整数形式反量化为等效的浮点数。接下来,通过权重缩放和批量归一化来缩放。然后应用ReLU等非线性激活函数,将结果重新量化为单比特,打包准备下一次量化卷积。

要理解粘合层的重要性,可以想到SqueezeNet。假设典型的输入大小约为200x200像素,并且二进制卷积的完美屋顶线实现比全精度运行快43倍,则可以估计网络在粘合层中花费的总执行时间。

假设二值化可以使卷积速度提高近43倍,可以进一步估算出精度更高的粘合层将消耗总推理时间的70%左右。这是一个相当大的瓶颈!即使在低卷积速度下,粘合层仍然消耗大约一半的推理时间。因此,研究人员认为,为了实现二进制网络承诺的加速,粘合层也必须是二进制的!

前面已经介绍了熔焊操作,它只用两条指令就完全取代了粘接层。详见论文。其核心思想是用移位运算代替乘法,将比例项近似为2的近似幂,用定点量化近似代替浮点加减。定点近似可以直接添加到二进制卷积输出中。综上所述,得到以下方程:

其中n是用来量化网络活化的位数,通过求解最后一行的Q给出了完整的熔键方程。通过替换这种熔接操作,可以创建完全二进制的网络:

研究人员还对ImageNet数据集进行了广泛的精度扫描,发现与其他SOTA二进制网络相比,上述文章中的融合绑定操作不会造成任何精度损失。

这是一个好消息,因为在消除了架构级别的粘合瓶颈之后,现在可以生成快速二进制卷积并测量端到端性能。

端到端加速

早期,研究人员使用二进制网络作为一种近似技术,来帮助我们在移动和物联网设备上部署高效的模型。我们来看看激流在树莓Pi 3b上的表现。基于ARM Cortex-A53处理器的Raspberry Pi 3b是资源受限环境下二进制目标的典型代表。

首先,将基于for循环的简单网络实现与使用MKLDNN加速其浮点运算的完全精度基线进行比较。

使用MKLDNN的完整精度ResNet18运行时间与未优化的完整二进制网络。

在没有优化的情况下,研究人员获得了ResNet18的完整二进制网络版本,大约是相应高精度网络速度的1/5。为了真正利用二进制网络,现在有必要生成一个优化的执行调度。研究人员通过在TVM中实现二元运算符并利用其强大的调度和优化功能来获得这种调度。

TVM提供了以下可用于优化功能的调度功能:

分块将计算分解为多个块,以改善加载的内存局部性。

矢量化使用硬件SIMD指令来实现更高效的操作执行。

并行化利用了多核等MIMD设施。

Loounrolling复制循环体以减少开销。

此外,研究人员还利用了低精度深度学习算子自动生成论文中提到的快速popcount算子。最后,他们还引入了一种新的优化方法,称为bitpack fusion。

位打包融合将位打包合并到一个卷中,以减少激活内存消耗。

在高级层面,bitpack fusion将bitpacking尽可能地折叠到之前的卷积核中。这可以将中间内存需求减少16倍,使复制策略更加高效,从而提供进一步的加速。

那么,这些优化中哪些更重要呢?

为了回答这个问题,研究人员在SqueezeNet上进行了一项控制变量的研究,结果如上图所示。

他们发现,与精度更高的浮点基线相比,每次优化都对加速有显著影响。如果各种优化方法一起应用,我们可以在真实模型上看到10倍的加速。虽然10倍加速远小于本文预期的43倍加速,但也是一个数量级的提升,可以显著扩大可以高效运行SOTA模型的设备范围。当然,这种加速只有在保证精度的前提下才有价值。

上表显示了几种流行的二进制模型在1、2和3位激活条件下的精度和运行时间之间的权衡。总体而言,可以发现,在提供更多加速的同时,激流FBN与其他SOTA二进制技术一样稳定,甚至比后者更精确。激流FBN可以提供精确的激活位宽和量化极性,并提供4~12倍加速,轻松满足所有应用的精度要求。

原文链接:https://medium . com/octo ml/激流-快速-全-二值化-in-tvm-ae2afd2104bb

 
友情链接
鄂ICP备19019357号-22