乐趣区

关于人工智能:大语言模型快速推理-在-Habana-Gaudi2-上推理-BLOOMZ

本文将展现如何在 Habana® Gaudi®2 上应用 🤗 Optimum Habana。Optimum Habana 是 Gaudi2 和 🤗 Transformers 库之间的桥梁。本文设计并实现了一个大模型推理基准测试,证实了通过应用 Optimum Habana 你将可能在 Gaudi2 上取得 比目前市面上任何可用的 GPU 都快的推理速度

随着模型越来越大,将它们部署到生产环境中以用于推理也变得越来越具备挑战性。硬件和软件都须要很多翻新来应答这些挑战,让咱们来深刻理解 Optimum Habana 是如何无效地克服这些挑战的!

BLOOMZ

BLOOM 是一个 1760 亿参数的自回归模型,经训练后可用于文本生成。它能够解决 46 种不同的语言以及 13 种编程语言。作为 BigScience 打算的一部分,BLOOM 作为一个凋谢迷信我的项目,来自寰球的大量的钻研人员和工程师参加了模型的设计和训练。最近,咱们又公布了架构与 BLOOM 完全相同的模型: BLOOMZ,它是 BLOOM 在多个工作上的微调版本,具备更好的泛化和零样本 1 能力。

如此大的模型在 训练 和 推理 两个场景下都对内存和速度提出了新的挑战。即便是应用 16 位精度,一个模型也须要 352 GB 的内存!目前你可能很难找到一个具备如此大内存的设施,但像 Habana Gaudi2 这样先进的硬件已能让低提早 BLOOM 和 BLOOMZ 模型推理变得可能。

Habana Gaudi2

Gaudi2 是 Habana Labs 设计的第二代 AI 硬件加速器。单个服务器蕴含 8 张加速卡 (称为 Habana 处理单元 (Habana Processing Units),或 HPU),每张卡有 96GB 的内存,这为包容超大模型提供了可能。然而,如果仅仅是内存大,而计算速度很慢,也没方法将其用于模型托管服务。侥幸的是,Gaudi2 在这方面证实了本人,大放异彩: 它与 GPU 的不同之处在于,它的架构使加速器可能并行执行通用矩阵乘法 (General Matrix Multiplication,GeMM) 和其余操作,从而放慢了深度学习工作流。这些个性使 Gaudi2 成为 LLM 训练和推理的现实计划。

Habana 的 SDK SynapseAI™ 反对 PyTorch 和 DeepSpeed 以减速 LLM 训练和推理。SynapseAI 图编译器 会优化整个计算图的执行过程 (如通过算子交融、数据布局治理、并行化、流水线、内存治理、图优化等伎俩)。

此外,最近 SynapseAI 还引入了 HPU graphs 和 DeepSpeed-inference 的反对,这两者非常适合提早敏感型的利用,上面的基准测试后果即很好地阐明了这一点。

以上所有性能都集成进了 🤗 Optimum Habana 库,因而在 Gaudi 上部署模型非常简单。你能够浏览 相应文档 疾速起步。

如果你想试试 Gaudi2,请登录 英特尔开发者云 (Intel Developer Cloud) 并依照 指南 申请。

测试基准

在本节中,咱们将提供 BLOOMZ 在 Gaudi2、第一代 Gaudi 和 Nvidia A100 80GB 上的晚期基准测试。尽管这些设施内存都不小,但因为模型太大,单个设施还是放不下整个 BLOOMZ 模型。为了解决这个问题,咱们要应用 DeepSpeed,这是一个深度学习优化库,它实现了很多内存优化和速度优化以减速模型推理。特地地,咱们在这里依赖 DeepSpeed-inference,它引入了几个个性,如 模型 (或管道) 并行 以充分利用可用设施。对 Gaudi2,咱们应用 Habana 的 DeepSpeed 分支,其增加了对 HPU 的反对。

提早

咱们测量了两种不同大小的 BLOOMZ 模型的提早 (batch size 为 1),两者参数量都有数十亿:

  • 1760 亿 参数
  • 70 亿 参数

咱们应用 DeepSpeed-inference 以 16 位精度在 8 张卡上运行推理,同时咱们开启了 key-value 缓存 优化。请留神,只管 CUDA graphs 以后与 DeepSpeed 中的模型并行不兼容 (DeepSpeed v0.8.2,请参见 脚本第 158 行的内容,但 Habana 的 DeepSpeed 分支是反对 HPU graphs 的。所有基准测试都应用 贪婪搜寻 生成 100 个词元。输出提醒为:

“DeepSpeed is a machine learning framework”
该提醒会被 BLOOM 分词器分成 7 个词元。

推理提早测试后果如下表所示 (单位为 )。

模型 卡数 Gaudi2 提早 (秒) A100-80GB 提早 (秒) 第一代 Gaudi 提早 (秒)
BLOOMZ 8 3.717 4.402 /
BLOOMZ-7B 8 0.737 2.417 3.029
BLOOMZ-7B 1 1.066 2.119 2.865

Habana 团队最近在 SynapseAI 1.8 中引入了对 DeepSpeed-inference 的反对,从而疾速反对了 1000 多亿参数模型的推理。对于 1760 亿参数的模型,Gaudi2 比 A100 80GB 快 1.2 倍 。较小模型上的后果更有意思: 对于 BLOOMZ-7B,Gaudi2 比 A100 快 3 倍。乏味的是,BLOOMZ-7B 这种尺寸的模型也能受害于模型并行。

咱们还在第一代 Gaudi 上运行了这些模型。尽管它比 Gaudi2 慢,但从价格角度看很有意思,因为 AWS 上的 DL1 实例每小时大概 13 美元。BLOOMZ-7B 在第一代 Gaudi 上的提早为 2.865 秒。因而,对 70 亿参数的模型而言,第一代 Gaudi 比 A100 的性价比更高,每小时能省 30 多美元

咱们预计 Habana 团队将在行将公布的新 SynapseAI 版本中持续优化这些模型的性能。在咱们上一个基准测试中,咱们看到 Gaudi2 的 Stable Diffusion 推理速度比 A100 快 2.2 倍,这个劣势在随后 Habana 提供的最新优化中进一步提高到了 2.37 倍。在 SynapseAI 1.9 的预览版中,咱们看到 BLOOMZ-176B 的推理提早进一步升高到了 3.5 秒。当新版本的 SynapseAI 公布并集成到 Optimum Habana 中时,咱们会更新最新的性能数字。

在残缺数据集上进行推理

咱们的脚本容许反对模型整个数据集上逐句进行文本补全。如果你想在本人的数据集上尝试用 Gaudi2 进行 BLOOMZ 推理,这个脚本就很好用。

这里咱们以 tldr_news 数据集为例。该数据每一条都蕴含文章的题目和内容 (你能够在 Hugging Face Hub 上可视化一下数据)。这里,咱们仅保留 content 列 (即内容) 并对每个样本只截前 16 个词元,而后让模型来生成后 50 个词元。前 5 条数据如下所示:

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.8.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.27.1、SynapseAI v1.8.0,而 Optimum Habana 是从源码装置的。

对于 GPU,此代码库 里蕴含了 可用于复现这篇文章后果的脚本。要应用 CUDA graphs,须要应用静态数据尺寸,而 🤗 Transformers 中不反对这一用法。你能够应用 Habana 团队的 参考代码 来使能 CUDA graphs 或 HPU graphs。

总结

通过本文,咱们看到,Habana Gaudi2 执行 BLOOMZ 推理的速度比 Nvidia A100 80GB 更快。并且无需编写简单的脚本,因为 🤗 Optimum Habana 提供了易于应用的工具用于在 HPU 上运行数十亿参数模型的推理。Habana 的 SynapseAI SDK 的后续版本无望进步性能,因而随着 SynapseAI 上 LLM 推理优化的一直推动,咱们将定期更新此基准。咱们也期待 FP8 推理在 Gaudi2 上带来的性能劣势。

咱们还介绍了在第一代 Gaudi 上的后果。对于更小的模型,它的性能与 A100 比肩,甚至更好,而价格仅为 A100 的近三分之一。对于像 BLOOMZ 这样的大模型,它是代替 GPU 推理的一个不错的抉择。

如果你有趣味应用最新的 AI 硬件加速器和软件库来减速你的机器学习训练和推理工作流,请查看咱们的 专家减速打算。要理解无关 Habana 解决方案的更多信息,能够 从前面的链接理解咱们单方的相干单干并分割他们。要具体理解 Hugging Face 为使 AI 硬件加速器易于应用所做的工作,请查看咱们的 硬件合作伙伴打算。

相干话题

  • 更快训推: Habana Gaudi-2 与 Nvidia A100 80GB
  • 在 Hugging Face 和 Habana Labs Gaudi 上用 DeepSpeed 训练更快、更便宜的大规模 Transformer 模型

感激浏览!如果你有任何问题,请随时通过 Github 或 论坛 与我分割。你也能够在 LinkedIn 上找到我。


英文原文: https://huggingface.co/blog/habana-gaudi-2-bloom

作者: Régis Pierrard

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的利用及大规模模型的训练推理。

审校、排版: zhongdongy (阿东)


  1. “零样本”是指模型在新的或未见过的输出数据上实现工作的能力,即训练数据中齐全不含此类数据。咱们输给模型提醒和以自然语言形容的指令 (即咱们心愿模型做什么)。零样本分类不提供任何与正在实现的工作相干的任何示例。这区别于单样本或少样本分类,因为这些工作还是须要提供无关当前任务的一个或几个示例的。↩
退出移动版