扩展深度学习的收缩

下载幻灯片

在过去的几年里,深度学习取得了巨大的成功在一个广泛的领域,包括计算机视觉、人工智能、语音识别、自然语言处理和强化学习。然而,良好的性能带来了巨大的计算成本。这使得扩展培训贵,但是一个更相关的问题是推理,特别是对于实时应用程序(运行时延时是至关重要的)和边缘设备(计算和存储资源有限)。这个演讲将探索常见技术和新兴的进步来处理这些挑战,包括批处理的最佳实践;量化交易和其他方法计算成本在训练和推理性能;架构优化和图形处理方法。

看更多的火花+人工智能会话

免费试着砖

视频记录

你好,每个人。欢迎来到这火花和AI峰会2020在线演示,通过按比例缩小扩大深度学习。

我是尼克·彭特里斯。我在Twitter上@MLnickk, GitHub, LinkedIn。我是一个首席工程师在IBM工作中心开放源数据和人工智能技术或CODAIT。bob下载地址我专注于机器学习和人工智能的开源应用程序。bob下载地址我已经参与到Apache火花项目几年我是提交者和PMC项目成员。我也是机器学习》的作者与火花。

开源数据中心& CODbob下载地址AIT人工智能技术

在我们开始之前,一点CODAIT或开放源数据和人工智能技术的中心。bob下载地址我们是一个团队的30多个IBM内部开源开发者。bob下载地址我们从事开源项目的基础数据和人bob下载地址工智能空间中的IBM的产品。我们专注于提高企业人工智能生命周期和开源,这包括Python数据科学堆栈,打开数据和深度交流学习模型。bob下载地址Apache火花是一个大的一部分。TensorFlow和Pytorch深度学习框架,AI伦理Kubeflow和开放标准的服务和机器学习模型。

今天,我们将从深度学习概述开始,和一些计算挑战参与培训和部署深学习模型。,我们来看看三个主要的方法解决这些挑战从改善模型体系结构到模型压缩,并与模型蒸馏结束。我们会先看看机器学习的基本工作流程,从数据开始。

机器学习工作流程

我们通常分析数据。然后我们想训练一个机器学习模型,但它不抵达一种是服从训练机器学习模型。通常抵达原始形式,它不是张量的格式或向量。所以我们要运用一些数据的预处理。我们想要把它和提取特征,然后就可以在训练我们的机器学习模型。一旦你训练模型,然后部署到一个生活环境,我们预测新数据,然后创建新的机器学习模型数据本身作为流程的一部分或新数据到达外部。这实际上关闭循环,此工作流转化为机器学习循环。现在在这个工作流程中,三个方面是最计算密集型的数据处理、模型训练和部署。

深度学习

如此之深学习是机器学习的一种形式。它已经存在了相当长一段时间事实上,最初的理论可以追溯到1940年代,第一批从1960年代计算机模型。正如你可以看到,右边是一个古老的感知器神经网络机器从1960年代。然而失宠,在90年代和80年代,很大程度上是因为在现实世界中无法获得成功应用和计算资源的缺乏实际训练这些模型。但最近,有一个大的复兴由于更大更好的数据集的扩散移动设备和互联网规模的数据收集,以及标准化的数据集,如图像净各种比赛。结合更好的硬件形式的gpu,现在具体的深度学习硬件如TPU的张量处理单元和改进算法架构优化技术,导致了全新的结果在计算机视觉领域,通过语音识别、自然语言处理、语言翻译和许多更多。

所以现代神经网络通常称为深度学习,因为他们由多层和变得非常深,复杂。在计算机视觉中,核心构件是卷积神经网络。这是非常成功的在图像分类、目标检测分割。序列和时间序列,我们有机器,复发性神经网络已成功在机器翻译,文本生成和其他自然语言处理任务。再一次,一个NLP的词的形式嵌入和全新的模型变形金刚与注意力机制已经取得的成果。拼图的最后一块是现代深度学习框架,抽象封装计算图,提供汽车分化功能,高水平的灵活性和GPU的支持。和允许发展的研究者和实践者都艺术深度学习模型的状态相当迅速。

进化计算的训练要求

现在直到最近,这些类型的模型所需的计算量大致遵循摩尔定律你两倍的时间。但在现代,越来越多的复杂模型导致了这些模型的计算要求每三到四个月翻一番。显然,硬件是不够的继续进步,我们需要认真考虑效率在软件方面。所以我们将图像分类的一个例子,使用这个为效率探索新架构的一部分。图像分类始于一个输入图像,通过图像通过一个复杂的深度学习模型。然后我们得到一个预测,预测类的一组。

流行的图像分类模型,叫做《盗梦空间》V3最近相当标准的模型,我们看它的一小部分在左边。

例如:《盗梦空间》V3

与这些类型的模型的核心构件是卷积,这通常是一个卷积操作标准化和一些激活函数通常很少纠正线性单元。我们可以有效地代表这个计算矩阵乘法。和复杂的现代网络如《盗梦空间》,是由许多这样的卷积。

一个初始V3特别是总共有大约2400万的参数,并在ImageNet几乎达到79%的准确率。

精度和计算复杂度(ImageNet)

所以我们可以看到最近的一组模型和分数。

如果我们可以比较的准确性和计算复杂度。所以老款相当准确,但相当复杂。大量的参数,但不一定是大量的操作。然后我们进入的时代更大的模型,更复杂的模型,以获得更好的精度。最近,我们已经搬到另一个时代,试图变得越来越有效率。所以当我们把越来越多的向左边的这张图,这是我们想要在高精度计算成本相对较低。

计算效率(ImageNet)

你可以看到另一个观察计算效率的方法是在模型中信息密度。这是一个衡量所使用的模型参数是有效的。你可以看到年长的模型肯定不是有效的,和一些新的,这是ResNet ResNets后面变得越来越有效率。但是,如果你看看这里的百分比10 - 12%每百万参数密度是告诉我们有很多低效率的代表,和这些模型在parameterised高度。

深度学习部署

通常讨论的深度学习部署简单,模型训练环境是以前提在云环境中使用至少一个gpu通常多个gpu大型模型的大型数据集。基于云的部署场景,我们通常可以使用相同的基础设施部署。然后我们简单的交易成本和性能。所以如果我们想要高性能,我们可以支付和硬件成本。但是故事当我们看边缘设备有很大的不同。边缘设备更有限的资源。记忆是有限的,我们不能使用所有设备上的记忆。通常,我们竞争与其他应用程序、计算机有限竞争与其他应用程序。和网络带宽是有限的。所以我们需要在受限制的环境中对模型的大小,我们可以在这些设备上运行。 The latency and compute resources we can utilize to execute those models. And also shipping the models to the device takes network bandwidth. And this also applies to low latency applications which may be outside of the edge device paradigm. For example, financial trading, or programmatic advertising where our latency requirements are very low, could be low milliseconds or even microseconds. And we can’t afford to spend too much time computing so we need a more efficient model.

我们如何提高性能效率?

那么我们如何提高这种性能效率,这样我们就可以部署到边对边装置等环境以及满足低延迟的要求应用程序?今天,我们将介绍四个。首先是架构的改善随着时间的推移,和新建筑架构的创新方式来实现这一目标。第二个和第三个模型压缩技术,方法,使模型更小。蒸馏,最后一个是模型。

所以从体系结构的改进。

专业为资源缺乏目标初始V3架构MobileNet V1

一个常见的趋势最近已经构建专门的架构目标特别低的资源环境。在左边,我们看到一个表示的初始模型。右边我们看到一个非常受欢迎的模型,这样的设备称为MobileNet低资源优势。

现在,我们看到,初始模型是建立标准的回旋的构建块。虽然MobileNet模型使用略有不同的东西,叫做深度明智的卷积构建块。它是有效地分割标准卷积成两个组件和他们更有效地竞争。这是少8倍计算。

现在,作为回报,我们需要放弃一些通常的一些通常是模型的性能和精度。如果我们回想一下,《盗梦空间》在2400万ImageNet参数几乎达到79%,MobileNet V1参数减少了80%多,我们给8%的性能代价。

所以这些移动架构和类似的架构的另一个创新是创建的骨干架构,可以上下伸缩。所以有两个规模乘数模型有效地稀释剂或更广泛。所以调整模型中参数的数量,以及扩展输入输入图像的分辨率。通过这种方式,我们可以卖掉多少精度我们希望和我们有多少计算资源和预算。如果我们能够花更多的计算机功能更强大的设备上,我们可以提升绿色曲线更接近水平的精度就越高。但是对于小型设备或旧设备,我们可能想曲线向下移动。实际上一个类模型允许我们权衡沿着这条曲线。

当我们看到原始MobileNets演变成MobileNet V2,所以这是一个非常相似的想法使用完全相同,那么切除脑回的骨干。但添加一些进一步的算法和网络技巧,有效地使它更有效率。你可以看到一个MobileNet V2只是我们稍微移动,曲线和变得越来越高效,但它仍然允许我们相同的权衡。所以我们绕过相同数量的参数,然后稍少一些额外的百分比与准确性。

精度与计算(ImageNet)

这是下一阶段

该模型体系结构的演化,我们有一个MobileNet模型,尝试是非常有效的,非常非常小的参数大小和手术大小,但仍获得相对较高的性能。

计算效率——更新(ImageNet)

我们可以看到,实际上这些模型和其他类似的有效架构洗牌和SqueezeNet等有更高的信息密度,更高的百分比/参数指标,我们可以在这里看到。

下一个进化EfficientNet最近。和这里的想法是非常相似的一些骨干架构,可以上下伸缩。但实际上技术称为神经结构搜索被用来发现这骨干。而不是手工手工制作一个仰卧起坐通过大量的潜在的架构和找到最好的。优化精度和效率的浮点操作的操作。这个结果在一个类的模型可以根据上下比例再次计算预算实现精度,然后贸易与准确性。

我们最终得到更高数量的参数,例如MobileNet相比,但额外的几个百分比的准确性。现在神经结构搜索的缺点之一是它需要大量的资源来搜索所有这些可能达到的。像建设自己的EfficientNet可能大多数从业者遥不可及但是显然像Google这样的大玩家,有足够的资源来创建这些模型。

所以我们可以看到,我们可以扩展这个模型从V 0,即基线和500万参数和77%的准确率一直到最大的模型,提高了参数的12倍,给我们一个额外的8%的准确性。

所以相同的概念应用于MobileNet架构,类似hardware-aware神经结构搜索技术被用来优化精度和性能的预算。

MobileNet V3

又导致某种形式的有效模型。所以没有碰撞参数欺诈太多,但明显有效地提高精度。

所以我们看到的这个想法建立一种高效的骨干模型然后缩放上下最近非常成功,手动设计或使用神经结构搜索设计这些骨干和找到正确的架构是非常昂贵的计算。

一个网络控制一切?

当然不是计算,而是在能源效率方面,甚至在环境影响方面。一个有趣的想法最近从IBM和另一篇论文最近麻省理工学院的研究是有效地寻找一组网络培训和网络培训后,子网络的数量可以从主网络目标特定的环境。1、你可以权衡精度与计算预算,你不必再培训不同的架构或找到一个不同的体系结构为每个目标。你训练一次,然后你可以退出的架构,你想要的。

我们已经看到,简单有效地做更多的研究。所以扔很多计算预算和人力的问题可以帮助解决这些挑战,给我们更高效的架构。我们可能无法做自己,我们可能无法运行神经结构的计算资源搜索。然后我们必须依靠大型组织释放这些模型。那么什么是一些其他的方法,我们可以用我们自己的模型吗?首先是模型修剪。这里的想法是简单地减少模型参数的数量。如果我们只是扔掉模型参数,我们真的不知道会发生什么到模型中。所以我们要做的是我们要做的,在一个精确的方式和原则的方式。这非常类似于正则化,L1范数的标准机器学习线性模型。 We want to look at all the weights and remove the ones that have a very small impact on the prediction. Because if those weights are kind of close to zero anyway and we be taking them away, we are not going to have much impact on neural performance of the model and the accuracy but we can set those weights to zero effectively. And once there’s zeros we can ignore them. So we can ignore them when we’re saving and transporting the model around. So in other words you’re compressing the model. And we can also ignore them when we’re computing so we get a lower latency.

模型修剪

所以我们可以看到,事实上,模型修剪可以非常有效的和有效的。这是一个例子从张量流动模型性能库。你可以看到像《盗梦空间》,对于大型复杂模型,我们可以实现50%的稀疏。所以我们可以有效地扔掉一半的参数模型与一个非常小的对精度的影响。在那之后,我们的性能开始下降。所以,我们开始放弃越来越多越来越sparcity性能。同样的,对于一个小模型像MobileNet我们可以实现稀疏一半放弃一个相对少量的准确性。

它不仅为图像分类工作。这里有一个例子从语言翻译。事实上我们看到,语言翻译模型上稀疏的80%。所以实际上,扔掉多达80%的我们的模型参数和我们在性能略有增加。这是告诉我们这些,尤其是这些大型复杂模型,事实上,在parameterised已经高度,所以他们太大,他们有太多的重量,他们需要做什么。所以我们看到信息密度和效率统计信息。实际上许多这些重量我们不使用它们,你可以扔掉,只要你没有放弃原则的方式表现。再一次,这取决于环境我们的目标,如果我们愿意放弃更多的性能和准确性,我们可以做一个更小的模型。

另一种形式的压缩量化模型。

最深度学习计算使用的是32,甚至在某些情况下64位浮点数。和量化背后的想法是减少数值精度的重量和操作网络。为此,我们装箱的值。如果我们从一个典型的32位的数字,我们想把它少位的数字或表示,有效减少箱里。这意味着我们可以减少大小存储相同数量的信息。如果我们从32位到16日,例如,我们实际上是一半的大小,重量,我们需要存储。如果我们去八,我们四个四次。

但我们不仅节省一些空间,事实证明,这些低比特和低精度的计算表示可以更快,在一些资源约束很小的边缘设备的cpu。

至于浮点运算甚至不被支持。

这里的想法是看重量。

如果我们看一个直方图,例如一些重量值,我们可以重建精度低的权重。我们通过有效的近似。我们装箱的值最接近本。和以换取放弃的准确性,我们将有一个小得多的模型规模和潜在的改进的延迟。如此受欢迎的目标,就像我提到的,16位浮点,还有8位整数编码,我们得到一个大尺寸的好处以及在操作因素的性能提升。

有两种方法,我们可以量化。第一和最常见的可能是训练后。例如,这是非常有用的,如果你不能再培训一个模型或者不想。它要么太贵了再培训整个庞大的数据集,或者可能你可以但是你只是不想接受其他原因你不想花时间和精力。我们通常会放弃准确性。大多数时候,你可以针对16位浮点,动态范围或8位整数编码。所以我们可以看到,例如,《盗梦空间》和MobileNet在这种情况下,我们得到了一个减少做岗位培训量化的准确性。

和一个小模型,它实际上是一个更大的精度下降。

另一种方式,我们可以这样做实际上是通过培训有效地使用量化权重和量化的输入。这是更复杂的实现。但幸运的是你一些深度学习的图书馆将会允许我们这样做。但实际上,我们需要做的是考虑这一事实会有溢出。特别是诸如梯度计算。所以,渐变积累和更新会变得非常,非常小。这就是我们风险溢精密表示。的办法通常是保持较高的精度表示在特定的梯度和梯度更新和权重。最后,要么扔掉如果我们不需要他们或者做一些量化之后。这里的好处是,它是一个复杂多了。 And of course, it requires the original training data and we need to retrain the entire model. But we can get a very large efficiency gain with minimal accuracy, loss of injury. So you can see again, for an Inception model, a small decrease in accuracy, and somebody from MobileNet a much smaller decrease in accuracy.

所以,表示为一个大模型像《盗梦空间》可能是参数化的。因此减少模型尺寸精度低,实际上并不是打击我们的准确性与MobileNet太多已经更有效。所以通过减少信息的数量和近似模型和网络有效地发生,我们有一个更大的对性能的影响。

如果我们看一看帖子的延迟影响,影响大小量化的训练,对于大型的模型我们仍然获得效益增加25%延迟或减少延迟。而在本例中为较小的模型,我们会增加延迟但训练意识到量子化,双方都得到改善。大小和模型,得到模型的大小减少了75%,这是相当重要的。

幸运的是这曾经是很具有挑战性的事情,你必须滚自己的量子化。和有很多的手工工作。但现在深度学习的图书馆,我们有,有很多选择。,通常为TensorFlow模型优化和量化建于Pytorch,以及第三方库允许您以不同的方式做这件事。实际上变得更容易仅仅运行优化模型直接从图书馆,你可以用很简单的方式。

今天我们将讨论的最后一种技术称为蒸馏模型。所以像我们之前提到的前面部分的幻灯片,这些庞大的模型甚至是较小的,但毫无疑问大型复杂的是参数化。所以有很多低效率的方式,他们代表权重。所以模型蒸馏背后的理念是一个大的和非常复杂的参数化模型,并有效地使用它来教一个小得多的简单模型。所以你有一个学生模型,它很小,有点简单,和一名教师更大、更复杂的模型。如此有效,我们想提炼核心知识的大型模型分解成一个小模型,将是更高效的内存利用率,和计算资源的利用率。

所以你可以看到这里的核心理念是,老师模型将有一定数量的层通常学生模型将有一个小得多的层数和我们使用的有效预测教师教学生模型。

模型蒸馏

而且有点令人惊讶的是,如果我们在这个例子中,从原始模型蒸馏论文杰夫•辛顿有一个基线模型,如果我们作为老师的合奏10这些基线模型,我们可以得到一个蒸馏单模型,简单的学生模型,比基线,仅略低于一个合奏。再一次,这是表明这些参数化模型是有效的。我们可以提取核心的有效学习和核心知识的模型,并使用它们在一个简单的模型。可能也表明,还有很多工作要做在实际改善效率的核心架构和基线架构。

所以模型蒸馏当然是成功的在图像空间中,图像分类和计算机视觉空间,可能不会使用这些天相对于技术,特别是如量子化然后在某种程度上修剪。但在最近的进步自然语言处理基于变压器模型,但在特定的,精华已经非常成功。所以这里提到的几个人,DistilBERT TinyBERT。有很多人。但是在许多情况下,这些蒸馏模型成功地执行或在某些情况下执行更大,语言模型。再次,这是一个迹象表明这些巨大的模型,特别是这些巨大的语言模型训练在整个维基百科,例如,学到了很多,同时也有大量的冗余参数化。再一次表明,第一,我们可以创建一个更有效的模型部署到资源受限的环境中执行这个蒸馏过程,而且我们有很长的路要走在改善效率的核心架构。

总结一下,我们已经看到,这些新模型体系结构使网络更有效,特别是针对边缘设备和低资源环境,发展非常迅速。尤其是某些用例,正如我们所看到的计算机视觉和在某些情况下,自然语言处理。你可以找到适合你需要的东西,在这种情况下,你可以只使用EfficientNet MobileNet

他保证一个小版本的伯特模型。

但是在许多情况下,他们可能不是一种预先训练有效的架构或边缘设备目标架构你的需要。所以在这种情况下压缩技术,如修剪或量化可以产生很大的效率收益。他们很容易做到在主深度学习框架和支持库。你当然可以看结合这两种技术,修剪和量化,但是这样做可能稍微有点棘手,先做数字转换然后修剪还是相反。这当然是一个开放的研究领域。

有好的成功一起使用它们。但是它需要一些实验为任何特定的用例。你当然可以采取一个更高效的模型架构,已经被一个更大的组织和训练你仍然可以应用这个压缩技术。最后,模型蒸馏整体有点不那么受欢迎,

也可以说是很多更复杂的但可能令人信服的在一些用例中,特别是,NLP的新进展。这是一个研究领域的快速进化。有很多研究的学术机构和企业实验室。

和有很多的新工作

去年年底,今年年初甚至出来,正在飞速发展的空间。

今天非常感谢你加入。你可以找到我在Twitter和GitHub Mlnick。我鼓励你去看看codait.org我们列出所有开放源码项目数据和人工智能领域的工作。bob下载地址最后这些项目之一是资产交换的模型,这是一个自由和开放资源和存储库深度学习模型,先进的深度学习模型,在各种各样的领域包括计算机视觉和自然语言处理。你可以找到一些我提到的这些模型,对象检测、图像分类和分割。也可以找到几个选项部署深色容器,能够在较小的模式之间切换目标边缘设备环境为例,针对云环境和更大的模型。这是一个例子,你可以动态地使用不同的目标和不同的模型不同的部署环境。

最后我提供了一些参考,我们今天讨论的一些话题。非常感谢。我鼓励你接触我。

看更多的火花+人工智能会话

免费试着砖
«回来
关于尼克彭特里斯

IBM

尼克·彭特里斯首席工程师在IBM开源数据中心与人工智能技术(CODAIT),他工作在机器学习。以前,他创办了Graphflow,机器学习创业重点建议。他也曾在高盛(Goldman Sachs)、认知匹配,和Mxit公司——。他是一个Apache火花项目的提交者和PMC成员的作者与火花“机器学习”。尼克是热衷于商业重点结合机器学习和尖端技术构建智能系统,从数据中学习增加业务价值。
尼克已经在30多个会议、在线研讨会、聚会和世界各地的其他活动包括许多以前的火花峰会。