ML推理中的特征计算优化

下载幻灯片

用于执行ML推断的系统越来越重要,但速度远比预期慢,因为它们使用的技术是为传统数据服务工作负载设计的,忽略了ML推断的统计性质。作为替代方案,本次演讲将介绍Willump,一种用于ML推断的优化器。Willump通过两种新的统计驱动优化来加速ML推理应用程序,这些优化针对的是性能瓶颈是特征计算的ML应用程序。首先,Willump选择性地计算特征。它只使用高价值、低成本的特征自动对大多数数据输入进行分类,在没有统计上显著的准确性损失的情况下,将性能提高了5倍。其次,Willump准确地逼近ML top-K查询。它使用自动构建的近似模型丢弃低分输入,然后使用更强大的模型对剩余的输入进行排名,以最小的精度损失将性能提高10倍。这两种优化都会自动调优自己的参数,以最大化性能,同时满足目标精度水平。Willump将这些新颖的优化与强大的编译器优化结合起来,为ML应用程序自动生成快速推理代码。总的来说,Willump将实际ML推理应用程序的端到端性能提高了16倍。

点击这里观看更多Spark + AI课程

免费试用Databricks

视频记录

大家好,我是Peter Kraft,今天,我想和大家谈谈Willump,一个用于机器学习推理的端到端统计优化器。

问题:ML推断

所以,正如你已经知道的,机器学习推理在今天是一个越来越重要的问题。最近人们开始关注ML预测服务工具。

一个常见的瓶颈:特征计算

机器学习推理的一个常见瓶颈是特征计算。在许多ML推理应用程序中,转换管道从原始数据计算数值特征,然后在这些特征上执行模型。通常,这种特征计算是ML推断中最昂贵的部分。

在使用廉价的ML模型(如增强树或线性分类器)时,特征计算通常是一个瓶颈。但不是神经网络。在对表格或结构化数据执行ML推断时,最常发生这种情况。

特征计算经常是生产中的一个问题。例如,在微软对生产ML推理应用程序的研究中,他们发现某些应用程序的运行时中,特征计算占了99%以上。

目前最先进的

不幸的是,目前最先进的ML预测服务并没有尽其所能最大化未来计算的性能。他们使用传统的服务和编译器优化ML推理,这工作得很好,但忽略了机器学习应用程序的独特统计属性,而这些属性可以用来进一步提高性能。

ML的统计特性

机器学习的一个统计特性可以用来显著提高性能,那就是机器学习对近似的适应性。

例如,大多数ML分类工作负载包含简单和硬数据输入的混合。简单的数据输入可以通过计算简单的模型进行准确分类,但硬数据输入需要更强大的模型。现有的ML推理系统使用同样昂贵的模型来分类简单和硬数据输入。但是统计感知系统可以在简单的数据输入上使用计算成本低的模型,在硬数据输入上使用更昂贵的模型,因此可以显著提高性能。机器学习的另一个有趣的特性是,许多ML应用程序是作为高级应用程序(如Top-K查询)的一部分运行的。Top-K查询要求我们对数据集中得分最高的K个项目进行排名并返回。例如,用户最喜欢的10位艺术家。现有的系统会幼稚地用同样昂贵的模型预测数据集中的每一个项目,然后对前K进行排名并返回。

另一方面,统计感知系统可以使用计算成本较低的模型来识别和丢弃大部分得分较低的项目,然后对少数得分较高的项目使用更强大的模型来精确排序并返回它们,从而极大地提高性能。

之前的工作:统计感知优化

我刚才讨论的统计意识优化并不是新的,它们已经在工业界和学术界使用了一段时间。但是,它们的现有实现是特定于应用程序的自定义构建的。为了适应特定的工作负载和问题需求,您必须自己做大量工作。例如,通过构建你自己的近似模型。

推理困境

这就造成了一个困境。我们的无情系统很容易使用,但它们很慢,因为它们没有实现统计上的优化。优化要快得多,但是需要做大量工作来实现重要的ML和领域专业知识。

所以这就引出了一个问题,我们能否建立一个既快速又易于使用的ML推理系统?

Willump:概述

我们认为答案是肯定的。这就是为什么我们开发了Willump,一个用于机器学习推理的统计感知优化器。Willump优化了以特征计算为性能瓶颈的ML推理应用程序。它使用自动建模不可知、统计感知优化来显著提高真实世界ML推理工作负载的性能。

在接下来的演讲中,我将首先给出Willump系统的一个高水平的概述,然后更详细地讨论Willump的统计意识优化。然后评估Willump在实际工作负载下的性能。

Willump:目标

Willump在高层次上的目标是自动最大化ML推理应用程序的性能,这些应用程序的性能瓶颈是特征计算。

系统概述

Willump从一个ML推理应用程序开始,它被编写为一个从原始数据到特征再到预测的管道。Willump做的第一件事是推断这个应用程序的转换图,以找出哪些操作符在计算哪些特征。

接下来,Willump使用统计感知优化优化特征计算,我将在后面的演讲中讨论。

然后,Willump使用编译器优化优化各个操作符。

最后,Willump返回一个经过编译和优化的管道,准备执行ML推断。

现在我想谈谈Willump的第一个统计意识优化,端到端级联优化,它最大限度地提高分类工作负载的性能。

背景:级联模型

因此,正如我前面提到的,级联背后的高级思想是,大多数分类工作负载都包含简单和硬数据输入的混合。简单的数据输入可以通过计算成本低的模型进行准确分类,但硬数据输入需要更昂贵的模型。级联背后的想法是,您可以使用一个廉价的模型来识别和分类简单的数据输入,然后级联其他的数据,硬输入到一个更强大的模型。

级联已经存在了一段时间,用于图像分类和物体检测等任务。不幸的是,现有的级联系统是特定于应用程序的自定义构建的。如果希望使用级联,则必须手动构造自己的近似模型并调整其参数。这是非常困难的。它需要广泛的专业知识,包括机器学习和您的特定问题领域。

我们的优化:端到端级联

Willump的目标是让这变得更容易。Willump自动为任何性能瓶颈是特征计算的ML应用程序构建级联。它通过级联特征计算来做到这一点。对于简单的数据输入,只计算部分特性;对于硬数据输入,级联计算所有特性。

端到端级联:原始模型

默认情况下,ML推理应用程序计算所有数据输入的所有特征,使用模型进行预测并返回该预测。

端到端级联:近似模型

相反,Willump为每个数据输入计算少量高价值、低成本的选定特征,用一个近似模型进行预测,并返回该预测。不幸的是,近似模型本身不够精确,无法对所有数据输入进行分类。因此,我们只在它高于一个阈值时才返回它的预测,如果它对预测的置信度高于一个阈值,我们称之为级联阈值。

如果置信度没有超过这个阈值,我们将计算所有剩余的特征并级联到原始模型。

好了,以上就是对级联如何工作的一个高层次的概述。现在,让我来谈谈级联更有趣和更困难的方面,即我们如何为任何性能瓶颈是特征计算的ML应用程序自动构造它们。

端到端级联:构建级联

Willump在模型训练过程中自动为模型训练集和精度目标提前构造级联。

端到端级联:选择特性

像构建级联一样,需要回答的最重要的问题是在近似模型中选择哪些特征。我们的高价值、低成本功能是什么?

在给定精度目标的情况下,我们希望选择可以构建级联的特征,从而使预期查询时间最小化。

那么预期的查询时间是多少?当我们执行查询时,可能会发生两种情况之一。要么近似查询,要么不近似查询。

如果我们近似查询,那么我们只需要计算选定的特征。因此,期望查询时间表达式中的第一项是你可以近似的概率乘以计算所选特征的成本。

如果你不近似,那么你必须计算所有的特征。所以期望查询时间表达式中的第二项是你没有近似的概率乘以计算所有特征的成本。

把它们加起来,我们就得到了预期查询时间的完整表达式。

我们希望从特性集构建级联,以使预期查询时间最小化。

下面是我们要做的。首先,我们将选择几组潜在的功能成本。

然后,我们要找到最好的特征集对于我们所选的每一个代价都有这个代价。

接下来,我们将不得不找出哪一组功能总体上是最好的。为此,我们将训练近似模型,并为我们选择的每个特征集找到级联阈值。然后,我们将计算预期的无查询时间的特征集,并为一组总体性能最佳的特征构造级联。最小化预期查询时间的方法。因此,首先我们必须选择几个潜在的功能成本。这些都是简单的数字,比如总成本的十分之一总成本的五分之一等等。对于我们所选择的每一个代价,我们都想找到具有该代价的最佳特征集。我说的最好是什么意思?我的意思是,给定一个特性的代价是C-Max,我们想要找到一组使预期查询时间最小化的特性,前提是这些特性的代价等于C-Max。

这相当于找到一组特征,我们可以从中训练出最准确的近似模型,前提是这些特征的代价是C-max。

不幸的是,计算近似模型的精度是昂贵的。因此,我们将估计一个近似模型的准确性,以一组特征作为这些特征的排列重要分数的总和,将这个最小化问题变成一个我们可以轻松解决的背包问题。

现在我们有了几个最佳特征集的集合。我们必须找出这些最好的功能集中哪一个是最好的。为了做到这一点,我们将训练一个模型,并为每个集合找到一个级联阈值。

我们要训练小的,我们要用保留的数据来做这个实验。我们要在整个训练集的一部分上训练近似模型,音频特征集。

然后我们将预测训练集中的一个保留部分,然后使用该保留集中的预测来经验地确定级联阈值,确定我们在保持准确度高于目标的情况下可以近似的频率。一旦我们知道我们可以在保持所选择的每组特征的高精度的情况下进行近似的频率,我们就很容易计算出预期的查询时间,释放所选择的特征集,然后从特征集构建级联,从而使整体的预期查询时间最小化。通过遵循该算法,我们可以构建级联,使预期查询时间最小化,同时保持精度高于目标。

端到端级联:结果

在实践中,这在没有统计上显著的精度损失的情况下,提高了移动首次性能高达5倍。

好了,现在我想谈谈Willump的第二个优化,Top-K查询近似,它最大化了Top-K查询的性能。

Top-K近似:查询概述

Top-K查询要求我们对数据集中的K个得分最高的项目进行排名。例如,用户最喜欢的10位艺术家或10首歌曲。

Top-K近似:不对称

Top-K查询很有趣,因为它们是不对称的。他们需要对高价值的物品进行准确的预测和排名,因为这些物品将被退回。另一方面,低价值的物品只会被识别为低价值,然后它们就可以被丢弃,因为它们不会被退回。

Top-K近似:它是如何工作的

因此,我们可以通过使用近似模型来近似Top-K查询来识别和丢弃低分项目,然后使用更强大的模型对高分项目进行排序和返回。

现有的系统也做了类似的事情。然而,这些系统是特定于应用程序的定制构建的。它们要求用户手动构造自己的近似模型并调整参数。就像级联一样,这是一个困难且容易出错的过程。另一方面,Willump自动生成近似模型,并为任何ML推理应用程序的性能瓶颈是特征计算调整其参数。

Top-K近似:自动调优

就像在级联中一样,Willump自动选择特征和调优参数以最大化查询性能,同时保持精度高于目标。如果您对更多细节感兴趣,请参阅我们的论文。

Top-K近似:结果

总的来说,这将实际工作负载的性能提高了10倍。

好了,现在我想谈谈我们如何评估Willump的性能,并展示它在实际工作负载下的工作效果。

Willump评估:基准

我们根据从Kaggle和WSDM等主要数据科学竞赛中选出的表现最好的参赛作品,对Willump进行了基准评估。在这次演示中,我们将考察三个基准测试。报纸上有更多的内容。我们将看看music,它可以进行音乐推荐和查询远程存储的预先计算的特征。下一个基准购买,预测客户的下一个购买,并使用自动ML工具功能工具自动生成的表格特征。第三个基准测试toxic,执行有毒评论检测和计算字符串特征。

端到端级联评估:吞吐量

首先,我们将看看端到端级联优化在多大程度上提高了分类工作负载的吞吐量。我们将比较两个基准,一个是基准的原始实现,另一个是运行速度稍快的基准的编译版本。我们发现端到端级联将吞吐量提高了60%到5倍的总体基线。

端到端级联评估:延迟

接下来,我们将看看端到端级联优化可以在多大程度上改善延迟。我们发现优化显著提高了中位数延迟,但对尾部延迟的影响较小。因为为端到端级联优化的工作负载的尾部将是一组无法近似的数据输入,因此运行速度不会更快。

Top-K查询近似评估

最后,我们将看看有多少Top-K,我们将评估Top-K工作负载上的Top-K查询近似值。我们发现,相对于所有基线,它将吞吐量提高了2.7倍到10倍。

总之,我想让你们从这次演讲中了解到的是,通过统计优化,比如近似,可以显著提高ML推理的性能,现在我们可以使用简单的算法,比如我刚才描述的Willump算法,轻松自动地完成这些工作。如果你有兴趣了解更多,请在github上查看我们的源代码,或者查看我们今年早些时候发表的在线论文。

点击这里观看更多Spark + AI课程

免费试用Databricks
«回来
关于Peter Kraft

斯坦福大学

彼得是斯坦福大学研究生三年级的学生,导师是彼得·贝利斯和马泰·扎哈里亚。他的研究重点是系统,特别是提高机器学习应用程序的运行时性能。他的最新论文Willump,关于提高ML推理性能,将在MLSys 2020上发表。