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

发布于 2023 年 3 月 28 日
在 GitHub 上更新

本文将向您展示如何使用 🤗 Optimum Habana(它是 Gaudi2 和 🤗 Transformers 库之间的桥梁)在 Habana® Gaudi®2 上轻松部署像 BLOOM 这样拥有数千亿参数的大型语言模型。正如本文中提供的基准测试所示,这将使您能够以比目前市场上任何 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 处理单元,或 HPU),每个设备有 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 分支,它增加了对 HPU 的支持。

延迟

我们测量了两种不同大小的 BLOOMZ(均具有数十亿参数)的延迟(单样本批次)

运行是在 16 位精度下,使用 8 个设备和 键值缓存,通过 DeepSpeed 推理执行的。请注意,虽然 CUDA 图目前与 DeepSpeed 中的模型并行不兼容(DeepSpeed v0.8.2,参见此处),但 Habana 的 DeepSpeed 分支支持 HPU 图。所有基准测试都进行 100 个 token 输出的贪婪生成。输入提示是

"DeepSpeed is a machine learning framework"

使用 BLOOM 的 tokenizer 包含 7 个 token。

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

模型 设备数量 Gaudi2 延迟(秒) A100-80GB 延迟(秒) 第一代 Gaudi 延迟(秒)
BLOOMZ 8 3.103 4.402 /
BLOOMZ-7B 8 0.734 2.417 3.321
BLOOMZ-7B 1 0.772 2.119 2.387

更新:上述数字已根据 Optimum Habana 1.6 和 SynapseAI 1.10 的发布进行了更新,使得 Gaudi2 上的 BLOOMZ 速度比 A100 快 1.42 倍。

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

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

我们预计 Habana 团队将在即将发布的 SynapseAI 版本中优化这些模型的性能。例如,在我们上次的基准测试中,我们发现 Gaudi2 执行 Stable Diffusion 推理比 A100 快 2.2 倍,此后通过 Habana 提供的最新优化,这一数字已进一步提高到 2.37 倍。随着 SynapseAI 新版本的发布并集成到 Optimum Habana 中,我们将定期更新这些数字。

在完整数据集上运行推理

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

以下是 tldr_news 数据集的示例。它包含几篇文章的标题和内容(您可以在 Hugging Face Hub 上查看)。我们只保留了 content 列,并将每个样本截断为前 16 个 token,以便模型生成序列的其余部分,包含 50 个新 token。前五个样本如下所示

Batch n°1
Input: ['Facebook has released a report that shows what content was most widely viewed by Americans between']
Output: ['Facebook has released a report that shows what content was most widely viewed by Americans between January and June of this year. The report, which is based on data from the company’s mobile advertising platform, shows that the most popular content on Facebook was news, followed by sports, entertainment, and politics. The report also shows that the most']
--------------------------------------------------------------------------------------------------
Batch n°2
Input: ['A quantum effect called superabsorption allows a collection of molecules to absorb light more']
Output: ['A quantum effect called superabsorption allows a collection of molecules to absorb light more strongly than the sum of the individual absorptions of the molecules. This effect is due to the coherent interaction of the molecules with the electromagnetic field. The superabsorption effect has been observed in a number of systems, including liquid crystals, liquid crystals in']
--------------------------------------------------------------------------------------------------
Batch n°3
Input: ['A SpaceX Starship rocket prototype has exploded during a pressure test. It was']
Output: ['A SpaceX Starship rocket prototype has exploded during a pressure test. It was the first time a Starship prototype had been tested in the air. The explosion occurred at the SpaceX facility in Boca Chica, Texas. The Starship prototype was being tested for its ability to withstand the pressure of flight. The explosion occurred at']
--------------------------------------------------------------------------------------------------
Batch n°4
Input: ['Scalene is a high-performance CPU and memory profiler for Python.']
Output: ['Scalene is a high-performance CPU and memory profiler for Python. It is designed to be a lightweight, portable, and easy-to-use profiler. Scalene is a Python package that can be installed on any platform that supports Python. Scalene is a lightweight, portable, and easy-to-use profiler']
--------------------------------------------------------------------------------------------------
Batch n°5
Input: ['With the rise of cheap small "Cube Satellites", startups are now']
Output: ['With the rise of cheap small "Cube Satellites", startups are now able to launch their own satellites for a fraction of the cost of a traditional launch. This has led to a proliferation of small satellites, which are now being used for a wide range of applications. The most common use of small satellites is for communications,']

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

如何重现这些结果?

用于在 Gaudi2 和第一代 Gaudi 上对 BLOOMZ 进行基准测试的脚本可在此处获取。在运行之前,请确保已按照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 提供了易于使用的工具,可在 HPU 上运行数十亿参数模型的推理。预计 Habana 的 SynapseAI SDK 的未来版本将提高性能,因此随着 SynapseAI 上 LLM 推理优化的不断推进,我们将定期更新此基准测试。我们还期待 Gaudi2 上 FP8 推理带来的性能优势。

我们还展示了第一代 Gaudi 所取得的成果。对于较小的模型,它的性能可以与 A100 相媲美甚至更优,而价格仅为其三分之一左右。对于运行像 BLOOMZ 这样的大型模型的推理,它是使用 GPU 的一个很好的替代方案。

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

相关主题


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

[^1]:“零样本”指的是模型对新的或未见过的数据执行任务的能力,即无需提供任何此类数据的训练示例。我们向模型提供一个提示和一段文本序列,用自然语言描述我们希望模型做什么。零样本分类不包括任何已完成所需任务的示例。这与单样本或少样本分类不同,因为这些任务包含一个或几个选定任务的示例。

社区

注册登录以发表评论