Press "Enter" to skip to content

案例研究:使用Hugging Face Infinity和现代CPU实现毫秒级延迟

介绍

迁移学习改变了机器学习领域,从自然语言处理(NLP)到音频和计算机视觉任务,提高了准确性。在Hugging Face,我们努力使这些新的复杂模型和大型检查点尽可能易于访问和使用。但是,虽然研究人员和数据科学家已经转向了Transformer的新世界,但很少有公司能够在生产规模上部署这些大型复杂模型。

主要瓶颈是预测的延迟,这可能使大规模部署变得昂贵,并使实时应用场景变得不切实际。解决这个问题对于任何机器学习工程团队来说都是一个困难的工程挑战,并且需要使用先进的技术将模型优化到硬件层面。

通过Hugging Face Infinity,我们提供了一个容器化解决方案,可以轻松部署低延迟、高吞吐量、硬件加速的推理流水线,适用于最受欢迎的Transformer模型。公司可以在简单易用的包装中获得Transformer的准确性和大规模部署所需的效率。在本博客文章中,我们想分享Infinity在最新一代英特尔Xeon CPU上运行的详细性能结果,以实现Transformer部署的最佳成本、效率和延迟。

什么是Hugging Face Infinity

Hugging Face Infinity是一个容器化解决方案,供客户在任何基础设施上部署端到端优化的最先进的Transformer模型的推理流水线。

Hugging Face Infinity包括两个主要服务:

  • Infinity Container是作为Docker容器交付的硬件优化推理解决方案。
  • Infinity Multiverse是一个模型优化服务,用于针对目标硬件优化Hugging Face Transformer模型。Infinity Multiverse与Infinity Container兼容。

Infinity Container专门用于在目标硬件架构上运行,并公开一个HTTP /predict端点以运行推理。

图1. Infinity概述

Infinity Container旨在为1个模型和1个任务提供服务。任务对应于转换器流水线文档中定义的机器学习任务。截至撰写本博客文章时,支持的任务包括特征提取/文档嵌入、排序、序列分类和标记分类。

您可以在hf.co/infinity找到有关Hugging Face Infinity的更多信息,如果您有兴趣自行测试,请在hf.co/infinity-trial上注册免费试用。


基准测试

推理性能基准测试通常只测量模型的执行时间。在本博客文章中,以及在讨论Infinity的性能时,我们始终测量包括预处理、预测和后处理在内的端到端流水线。与其他延迟测量相比,请记住这一点。

图2. Infinity端到端流水线

环境

作为基准环境,我们将使用亚马逊EC2 C6i实例,这些实例是由第三代英特尔Xeon可扩展处理器提供支持的计算优化实例。这些基于英特尔的新实例采用冰湖工艺技术,并支持英特尔AVX-512、英特尔Turbo Boost和英特尔深度学习增强。

除了机器学习工作负载的卓越性能外,英特尔冰湖C6i实例还提供出色的性价比,我们建议在亚马逊网络服务上部署Infinity。了解更多信息,请访问EC2 C6i实例页面。

方法

在对类似BERT的模型进行基准测试时,最常采用两个指标:

  • 延迟:模型进行单次预测所需的时间(预处理、预测、后处理)
  • 吞吐量:在一个固定时间内执行的执行次数,尊重物理CPU核心、序列长度和批量大小的基准配置

这两个指标将用于在不同的设置下对Hugging Face Infinity进行基准测试,以了解本博客文章中的优势和权衡。


结果

为了运行基准测试,我们为EC2 C6i实例(冰湖)创建了一个Infinity容器,并使用Infinity Multiverse优化了一个用于序列分类的DistilBERT模型。

这个针对冰湖优化的Infinity Container与现有的基于卡斯卡德湖的实例相比,可以实现高达34%的更低延迟和吞吐量,并与在冰湖上运行的基本Transformer相比,可以实现高达800%的更低延迟和吞吐量。

我们创建的基准测试包括192个不同的实验和配置。我们运行了以下实验:

  • 物理CPU核心数:1、2、4、8
  • 序列长度:8、16、32、64、128、256、384、512
  • 批量大小:1、2、4、8、16、32

在每个实验中,我们收集以下数据:

  • 吞吐量(每秒请求数)
  • 延迟(最小值、最大值、平均值、P90、P95、P99)

您可以在此Google电子表格中找到基准测试的全部数据:🤗 Infinity: CPU Ice-Lake Benchmark。

在这篇博文中,我们将重点介绍一些基准测试的结果,包括最佳延迟和吞吐量配置。

除此之外,我们还将基准测试中使用的DistilBERT模型部署为一个API端点,使用了2个物理核心。您可以测试它并了解Infinity的性能。下面是一个curl命令,用于向托管的端点发送请求。API会返回一个包含端到端流水线持续时间的x-compute-time HTTP头。

curl --request POST `-i` \
  --url https://infinity.huggingface.co/cpu/distilbert-base-uncased-emotion \
  --header 'Content-Type: application/json' \
  --data '{"inputs":"我喜欢你。我爱你"}'

吞吐量

下面是在两个物理核心上运行Infinity,批量大小为1时的吞吐量比较,与普通transformers相比。

图3. 吞吐量:Infinity vs Transformers

延迟

下面是在两个物理核心上运行Hugging Face Infinity,批量大小为1时的延迟结果。令人惊讶的是,Infinity的延迟非常稳定,对于p95、p99或p100(最大延迟)几乎没有偏差。这个结果在基准测试的其他实验中也得到了确认。

图4. 延迟(批量大小=1,物理核心=2)


结论

在本文中,我们展示了Hugging Face Infinity在新的Intel Ice Lake Xeon CPU上的性能。我们创建了一个详细的基准测试,包含了190多个不同的配置,共享了在使用Hugging Face Infinity在CPU上时所期望的结果,以及优化Infinity容器延迟的最佳配置和最大化吞吐量的最佳配置。

Hugging Face Infinity与普通transformers相比,吞吐量提高了高达800%,对于长度不超过64个标记的序列,延迟可以降低到1-4毫秒。

优化transformer模型以获得吞吐量、延迟或两者的灵活性使得企业可以减少相同工作负载的基础设施成本,或者实现以前无法实现的实时应用场景。

如果您有兴趣尝试Hugging Face Infinity,请在hf.co/infinity-trial上注册您的试用。

资源

  • Hugging Face Infinity
  • Hugging Face Infinity试用
  • Amazon EC2 C6i实例
  • DistilBERT
  • DistilBERT论文
  • DistilBERT模型
  • 🤗 Infinity: CPU Ice-Lake基准测试
Leave a Reply

Your email address will not be published. Required fields are marked *