我们如何将Transformer推理加速100倍,以满足🤗 API客户的需求

如何将Transformer推理加速100倍以满足🤗 API客户需求?

🤗 Transformers已经成为全球数据科学家探索最先进的自然语言处理模型并构建新的自然语言处理特性的默认库。它有超过5000个预训练和微调模型,支持超过250种语言,是一个丰富的场所,并且无论您使用哪个框架,都可以轻松访问。

在🤗 Transformers中进行模型实验很容易,但是将这些大型模型部署到生产环境中以实现最大性能,并将其管理到与使用情况相适应的架构中,对于任何机器学习工程师来说都是一个艰巨的工程挑战

这种100倍的性能提升和内置的可扩展性是我们托管的加速推理API的订阅者选择在其之上构建其自然语言处理特性的原因。要达到最后10倍的性能提升,优化需要是底层的、针对特定模型和目标硬件的。

本文分享了我们为客户挤取每一滴计算能力的一些方法。🍋

实现首次10倍加速

优化之旅的第一步是最容易的,它主要涉及使用Hugging Face库提供的最佳组合技术,与目标硬件无关。

我们使用了Hugging Face模型管道内置的最高效方法,以减少每个前向传递中的计算量。这些方法特定于模型的架构和目标任务,例如,在GPT架构上进行文本生成任务时,我们通过专注于每次传递中最后一个标记的新注意力来减少注意力矩阵计算的维度:

在推理过程中,分词往往是效率的瓶颈。我们使用了🤗 Tokenizers库中最有效的方法,结合模型分词器的Rust实现和智能缓存,从而使整体延迟加速高达10倍。

借助Hugging Face库的最新功能,与开箱即用的部署相比,我们实现了可靠的10倍加速,适用于给定的模型/硬件组合。由于Transformers和Tokenizers通常每月发布新版本,因此我们的API客户无需不断适应新的优化机会,他们的模型只需要不断运行得更快。

编译FTW:难以获得的10倍加速

现在,事情变得非常棘手。为了获得最佳性能,我们需要修改模型并对其进行编译,以针对特定的推理硬件。硬件的选择本身将取决于模型的大小(内存)和需求配置文件(请求批处理)。即使从同一模型提供预测,一些API客户可能会从加速CPU推理中获益更多,而另一些客户则从加速GPU推理中获益更多,每种情况都应用不同的优化技术和库。

一旦为使用案例选择了计算平台,我们就可以开始工作了。下面是一些可以使用静态图应用的特定于CPU的技术:

  • 优化图(删除未使用的流程)
  • 合并层(使用特定的CPU指令)
  • 量化操作

使用开源库的开箱即用功能(例如🤗 Transformers与ONNX Runtime)无法产生最佳结果,或者可能导致显著的准确性损失,尤其是在量化过程中。并没有银弹,最佳路径对于每种模型架构都不同。但是通过深入研究Transformers代码和ONNX Runtime文档,可以实现另外10倍的加速。

不公平的优势

Transformer架构是机器学习性能的决定性拐点,从自然语言处理开始,过去3年中自然语言理解和生成的改进速度急剧加快。相应地,另一个加速的度量标准是模型的平均大小,从BERT的1.1亿参数到现在的GPT-3的1750亿参数。

这一趋势给机器学习工程师在将最新模型部署到生产环境中带来了艰巨的挑战。要达到100倍的加速需要很高的门槛,这是实时消费者应用程序中提供具有可接受延迟的预测所需的。

作为Hugging Face的机器学习工程师,我们在与🤗 Transformers和🤗 Tokenizers维护者共事的(虚拟)办公室中确实具有不公平的优势 😬。我们还非常幸运与英特尔、NVIDIA、高通、亚马逊和微软等硬件和云供应商进行开源合作,使我们能够通过最新的硬件优化技术来调整我们的模型 x 基础架构。

如果您想在我们的基础设施上感受速度,请开始免费试用,我们会与您联系。如果您想从我们在您自己的基础设施上优化推理的经验中受益,请参加我们的🤗 专家加速计划。