Press "Enter" to skip to content

大规模语言模型的快速推理:Habana Gaudi2加速器上的BLOOMZ

本文将向您展示如何使用🤗 Optimum Habana在Habana® Gaudi®2上轻松部署像BLOOM这样拥有数百亿参数的大型语言模型,这是Gaudi2和🤗 Transformers库之间的桥梁。正如本文所示,根据所展示的基准测试,这将使您能够比目前市场上任何GPU都更快地运行推理

随着模型越来越大,将它们部署到生产环境中进行推理变得越来越具有挑战性。硬件和软件都经历了很多创新来解决这些挑战,因此让我们深入了解如何高效地克服它们!

BLOOMZ

BLOOM是一个训练用于完成文本序列的1760亿参数自回归模型。它可以处理46种不同的语言和13种编程语言。作为BigScience计划的一部分,BLOOM是一个涉及世界各地大量研究人员和工程师的开放科学项目。最近,另一个具有完全相同架构的模型发布了:BLOOMZ,它是BLOOM在多个任务上进行了微调的版本,从而提高了泛化和零样本[^1]能力。

这样的大型模型在训练和推理方面提出了新的内存和速度挑战。即使在16位精度下,一个实例也需要352 GB的内存!您可能很难在目前找到具有如此大内存的任何设备,但像Habana Gaudi2这样的最新硬件确实可以以低延迟在BLOOM和BLOOMZ模型上执行推理。

Habana Gaudi2

Gaudi2是由Habana Labs设计的第二代AI硬件加速器。单个服务器包含8个加速器设备(称为Habana处理单元或HPUs),每个设备具有96GB的内存,可以容纳非常大的模型。然而,如果计算速度慢,那么托管模型就没有什么意义。幸运的是,Gaudi2在这个方面表现出色:它与GPU不同,其架构使得加速器能够并行执行通用矩阵乘法(GeMM)和其他操作,从而加快深度学习工作流程。这些特性使得Gaudi2成为LLM训练和推理的良好选择。

Habana的SDK SynapseAI™支持PyTorch和DeepSpeed加速LLM的训练和推理。SynapseAI图编译器将优化图中累积的操作的执行(例如操作融合、数据布局管理、并行化、流水线处理和内存管理以及图级优化)。

此外,SynapseAI最近引入了对HPU图和DeepSpeed推理的支持,这些对于延迟敏感的应用非常合适,如下面的基准测试所示。

所有这些功能都集成到了🤗 Optimum Habana库中,以便在Gaudi上部署您的模型非常简单。在此处查看快速入门页面。

如果您想获得Gaudi2的访问权限,请访问Intel开发者云并按照这个指南。

基准测试

在本节中,我们将提供BLOOMZ在Gaudi2、第一代Gaudi和Nvidia A100 80GB上的早期基准测试结果。尽管这些设备都有相当大的内存,但这个模型如此之大,以至于单个设备无法容纳一个BLOOMZ实例。为了解决这个问题,我们将使用DeepSpeed,这是一个深度学习优化库,它可以通过许多内存和速度改进来加速模型并使其适应设备。在这里,我们特别依赖于DeepSpeed推理:它引入了多个功能,例如模型(或管道)并行性,以充分利用可用设备。对于Gaudi2,我们使用Habana的DeepSpeed分支,它增加了对HPUs的支持。

延迟

我们测量了两种不同尺寸的BLOOMZ的延迟(一个样本的批处理):

  • 1760亿参数
  • 70亿参数

使用16位精度的DeepSpeed推理,在8个设备上运行,并使用键值缓存。请注意,尽管CUDA图在DeepSpeed中目前不支持模型并行性(DeepSpeed v0.8.2,请参阅此处),但HPU图在Habana的DeepSpeed分支中支持。所有基准测试都在进行100个令牌输出的贪婪生成。输入提示为:

“DeepSpeed 是一个机器学习框架”

使用 BLOOM 的分词器,由 7 个标记组成。

推理延迟的结果显示在下表中(单位为秒)。

更新:以上数据已经根据 Optimum Habana 1.6 和 SynapseAI 1.10 版本的发布进行了更新,与 A100 相比,在 Gaudi2 上使用 BLOOMZ 获得了 1.42 倍的加速。

Habana 团队最近在 SynapseAI 1.8 中引入了对 DeepSpeed 推理的支持,从而迅速实现了对 100 亿参数模型的推理。对于 1760 亿参数的检查点,Gaudi2 比 A100 80GB 快 1.42 倍。较小的检查点也呈现出有趣的结果。Gaudi2 在 BLOOMZ-7B 上比 A100 快 2.89 倍!值得注意的是,它能够从模型并行性中受益,而 A100 在单个设备上更快。

我们还在第一代 Gaudi 上运行了这些模型。虽然它比 Gaudi2 慢,但从价格的角度来看很有意思,因为 AWS 上的 DL1 实例每小时约花费 13 美元。BLOOMZ-7B 在第一代 Gaudi 上的延迟为 2.387 秒。因此,第一代 Gaudi 提供了比每小时超过 30 美元的 A100 更好的性价比!

我们预计 Habana 团队将在即将发布的 SynapseAI 版本中优化这些模型的性能。例如,在我们上次的基准测试中,我们发现 Gaudi2 在 Stable Diffusion 推理方面的性能比 A100 快 2.2 倍,这在 Habana 最新优化的帮助下进一步提高到 2.37 倍。随着 Optimum Habana 中新版本的 SynapseAI 的发布和集成,我们将更新这些数据。

在完整数据集上运行推理

我们编写的脚本可以使用您的模型在整个数据集上完成句子。这对于在 Gaudi2 上尝试 BLOOMZ 推理您自己的数据非常有用。

下面是一个使用 tldr_news 数据集的示例。它包含几篇文章的标题和内容(您可以在 Hugging Face Hub 上查看)。我们只保留了内容列,并将每个样本截断到前 16 个标记,以便模型生成后面的 50 个新标记。前五个样本如下:

批次编号 1
输入:['Facebook 发布了一份报告,显示了美国人在']
输出:['Facebook 发布了一份报告,显示了美国人在今年的 1 月至 6 月期间最广泛查看的内容。该报告基于该公司的移动广告平台的数据,显示 Facebook 上最受欢迎的内容是新闻,其次是体育、娱乐和政治。该报告还显示最']
--------------------------------------------------------------------------------------------------
批次编号 2
输入:['一种称为超吸收的量子效应使一组分子能够吸收更多的光']
输出:['一种称为超吸收的量子效应使一组分子能够比分子的吸收之和更强烈地吸收光。这种效应是由分子与电磁场的相干相互作用引起的。超吸收效应已经在多个系统中观察到,包括液晶、液晶中的']
--------------------------------------------------------------------------------------------------
批次编号 3
输入:['SpaceX 的 Starship 火箭原型在压力测试中爆炸。这是']
输出:['SpaceX 的 Starship 火箭原型在压力测试中爆炸。这是 Starship 原型首次在空中进行测试。爆炸发生在得克萨斯州博卡奇卡的 SpaceX 设施中。Starship 原型正在进行其耐受飞行压力的能力测试。爆炸发生在']
--------------------------------------------------------------------------------------------------
批次编号 4
输入:['Scalene 是 Python 的高性能 CPU 和内存分析器。']
输出:['Scalene 是 Python 的高性能 CPU 和内存分析器。它被设计为一种轻量级、便携式、易于使用的分析器。Scalene 是一个可以安装在支持 Python 的任何平台上的 Python 包。Scalene 是一个轻量级、便携式、易于使用的分析器']
--------------------------------------------------------------------------------------------------
批次编号 5
输入:['随着廉价小型“立方卫星”的兴起,初创公司现在能够']
输出:['随着廉价小型“立方卫星”的兴起,初创公司现在能够以传统发射的一小部分成本来发射自己的卫星。这导致小型卫星的大量增加,它们现在被用于各种应用。小型卫星最常见的用途是通信']

在下一部分中,我们将解释如何使用我们编写的脚本执行此基准测试,或者将其应用于来自Hugging Face Hub的任何你喜欢的数据集!

如何重现这些结果?

用于在Gaudi2和第一代Gaudi上进行基准测试的脚本可以在此处找到。在运行之前,请确保按照Habana提供的说明安装了最新版本的SynapseAI和Gaudi驱动程序。

然后,运行以下命令:

git clone https://github.com/huggingface/optimum-habana.git
cd optimum-habana && pip install . && cd examples/text-generation
pip install git+https://github.com/HabanaAI/DeepSpeed.git@1.9.0

最后,你可以按照以下方式启动脚本:

python ../gaudi_spawn.py --use_deepspeed --world_size 8 run_generation.py --model_name_or_path bigscience/bloomz --use_hpu_graphs --use_kv_cache --max_new_tokens 100

对于多节点推理,你可以参考Optimum Habana文档中的指南。

你还可以从Hugging Face Hub加载任何数据集,以获取将用于生成的提示,使用参数--dataset_name my_dataset_name

此基准测试使用的是Transformers v4.28.1、SynapseAI v1.9.0和Optimum Habana v1.5.0。

对于GPU,以下是在此博客文章中呈现的结果的脚本(这里是使用它的说明)。要使用CUDA图形,需要静态形状,而这在🤗 Transformers中不受支持。你可以使用Habana团队编写的这个存储库来启用它们。

结论

我们在本文中看到,Habana Gaudi2的BLOOMZ推理速度比Nvidia A100 80GB更快。而且,无需编写复杂的脚本,因为🤗 Optimum Habana提供了易于使用的工具,可在HPUs上运行具有数十亿参数的模型的推理。随着Habana的SynapseAI SDK性能的提升,我们将定期更新此基准测试,以便继续优化LLM推理在SynapseAI上的性能。我们也期待在Gaudi2上使用FP8推理带来的性能优势。

我们还介绍了使用第一代Gaudi实现的结果。对于较小的模型,它可以与甚至优于A100的性能相媲美,而价格只有其三分之一。对于运行BLOOMZ这样大型模型的推理,使用GPU的一个很好的替代选择。

如果你有兴趣使用最新的AI硬件加速器和软件库加速你的机器学习训练和推理工作流程,请查看我们的专家加速计划。要了解更多关于Habana解决方案的信息,请阅读我们的合作伙伴关系并联系他们。要了解有关Hugging Face努力使AI硬件加速器易于使用的更多信息,请查看我们的硬件合作伙伴计划。

  • 更快的训练和推理:Habana Gaudi-2 vs Nvidia A100 80GB
  • 利用DeepSpeed以更快更便宜的方式训练大规模Transformer模型,与Hugging Face和Habana Labs Gaudi合作

感谢阅读!如果你有任何问题,请随时通过Github或论坛与我联系。你也可以在LinkedIn上与我联系。

[^1]: “无监督学习”是指模型能够在新的或未见过的输入数据上完成任务的能力,即在没有提供此类数据的训练示例的情况下。我们向模型提供提示和一段描述我们想要模型完成的任务的文本序列,以自然语言形式。零样本分类不包括所需任务的任何完成示例。这与单样本或少样本分类不同,因为这些任务包括所选任务的一个或几个示例。

Leave a Reply

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