大语言模型快速推理: 在 Habana Gaudi2 上推理 BLOOMZ
本文将展示如何在 Habana Gaudi2 上使用 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),两者参数量都有数十亿:
我们使用 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 (阿东)
“零样本”是指模型在新的或未见过的输入数据上完成任务的能力,即训练数据中完全不含此类数据。我们输给模型提示和以自然语言描述的指令 (即我们希望模型做什么)。零样本分类不提供任何与正在完成的任务相关的任何示例。这区别于单样本或少样本分类,因为这些任务还是需要提供有关当前任务的一个或几个示例的。 ︎
大语言模型快速推理: 在 Habana Gaudi2 上推理 BLOOMZ的更多相关文章
- Sqlserver数据库日志太大如何快速删除
sqlserver使用在windows系统中,如果文件超上百GB了,我们还直接删除不了,这个问题我以前的apache日志就碰到过,至今还没删除呢,那么Sqlserver数据库日志太大如何快速删除呢,有 ...
- vue 快速入门 系列 —— vue loader 上
其他章节请看: vue 快速入门 系列 vue loader 上 通过前面"webpack 系列"的学习,我们知道如何用 webpack 实现一个不成熟的脚手架,比如提供开发环境和 ...
- 如何用Baas快速在腾讯云上开发小程序-系列4:实现客户侧商品列表、商品详情页程序
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/431172001487671163 来源:腾云阁 h ...
- 国内各大安卓(Android)市场的上传方式、认领、通过审核有哪些不同,有什么值得注意的地方?
6 个回答 赞同89反对,不会显示你的姓名 唐元鹏,扯淡爱好者 Jc droid.李明亮.知乎用户 等人赞同 作为一个android菜鸟开发者,代码水平不咋样,却练就了一身上传app的本领,大体说一下 ...
- webpack 快速入门 系列 - 自定义 wepack 上
其他章节请看: webpack 快速入门 系列 自定义 wepack 上 通过"初步认识webpack"和"实战一"这 2 篇文章,我们已经学习了 webpac ...
- 使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片
查看本章节 查看作业目录 需求说明: 使用 jQuery 操作页面元素的方法,实现浏览大图片的效果,在页面上插入一幅小图片,当鼠标悬停到小图片上时,在小图片的右侧出现与之相对应的大图片 实现思路: 在 ...
- 十大技巧快速提升原生APP开发性能
移动应用市场用户争夺战日益激烈,原来做APP拼想法拼创意拼是否抓住用户痛点.现在,精细化用户体验成为了一个APP能否留存用户的关键问题,一旦用户觉得体验不畅,马上就有竞品APP后补,如何开发高性能的移 ...
- 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!
DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然!——和一个句子的分词算法CRF没有区别!注:传统DDos检测直接基于IP数据发送流量来识别, ...
- 大数据BI系统挖掘企业业务上的价值
相信关注过我们的肯定知道BI是什么,但是老话常谈以防新朋友不知道BI的含义,BI(Business Intelligence)即商务智能,它是一套完整的解决方案,用来将企业中现有的数据进行有效的整合 ...
- net core天马行空系列-各大数据库快速批量插入数据方法汇总
1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...
随机推荐
- C#——》Web Api 操作MySQL数据库公共类:MySql.Data
使用MySql.Data 连接mysql 数据库,需先引用MySql.Data ,用过MySql.Data.dll操作Mysql数据库. 1,在工具-Nuget包管理器-管理解决方案的Nuget程序包 ...
- 接口返回JSON字符串压缩和解压
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.IO;usi ...
- Python数据分析第七周作业-MySQL的安装及应用
项目 MySQL 博客名称 2003031126-石升福-Python数据分析第七周作业 班级链接 20级数据班(本) 作业链接 第七周作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自 ...
- 水印 canvas 实现
let str = info; let c = document.createElement("canvas"); document.body.appendChild.c; let ...
- Qt滚动条样式
Qt手动设置滚动条的qss样式 QScrollBar:vertical { width: 14px; margin: 16px 0 16px 0; background: #eaeaea; } QSc ...
- 【内存管理】ION内存管理器浅析(system contig heap)
system contig heap与system heap 从代码中我们看到system contig heap与system heap同属一个文件中,ion_system_heap.c 相同点:它 ...
- Spring Boot 配置文件加载位置及优先级
内容摘自http://c.biancheng.net/spring_boot/config-order.html 说明如下: /myBoot:表示 JAR 包所在目录,目录名称自定义: /childD ...
- 使用npm包API Promise化
- 转发:Midway Serverless 发布 2.0,一体化让前端研发再次提效
自去年 Midway Serverless 1.0 发布之后,许多业务开始尝试其中,并利用 Serverless 容器的弹性能力,减少了大量研发人员对基础设施和运维的关注.对前端开发者而言,他们只需写 ...
- 2021.01.08 oss is not defined
背景: 视频点播使用阿里云的oss(Object storage services),然后总是报错oss is not defined, 在网上搜索了一些文章,基本上都是一模一样的,我也就不吐槽啦(这 ...