LLM推理部署(七):FireAttention——通过无损量化比vLLM快4倍

news2024/10/5 2:49:08

       Mixtral作为第一个在数万亿tokens上训练的OSS模型,最近在人工智能社区掀起了波澜,它支持“混合专家”(MoE),并且训练和推理速度非常快。

       Fireworks AI是第一个托管Mixtral的平台,在Mixtral公开发布之前就托管了。

       虽然最初的炒作已经平息,但有这样一个问题需要回答:

我们能为MoE模型开发出一种更高效的服务,而对质量的影响可以忽略不计吗?

       为了回答这个问题,作者提出了Fireworks LLM服务,其中基于FP16和FP8的FireAttention是核心部分。与其他OSS替代品相比,它具有4倍的加速。下面将介绍基于Mixtral模型的质量和性能研究。

Mixtral在8个H100 GPU上以不同的请求延迟截止值每秒实现的请求数(越高越好)(有关详细信息,请参阅下面的性能分析)

一、实验设置

       由于LLM性能领域不存在“一刀切”的问题,因此在本文中,我们希望关注最典型的用例之一:提示长度=1K,生成的tokens数量=50。此设置涵盖了长提示、短生成的用例。作者认为,短提示和/或长生成需要完全不同的优化策略。

      在衡量模型质量时,将重点关注语言理解。使用MMLU度量,它有足够的测试数据集示例(超过14K),Mixtral模型在该度量上表现相当好(70.6%的准确率),但不太好。

       生产环境通常具有“给定延迟预算的最佳吞吐量”要求。因此,作者将使用两个度量进行评估:一个是在给定数量的请求/秒(RPS)的前提下,评估tokens的生成延迟;第二个是给定RPS,评估总请求延迟。不同的服务设置可以将延迟从预填充转换为生成,反之亦然。通过测量这两个指标,我们可以清楚地看到整体情况。

二、FireAttention

       FireAttention是一个自定义的CUDA内核,针对多查询注意力模型进行了优化(Mixtral就是其中之一)。它还专门针对新硬件中的FP16和FP8支持进行了优化,尤其是H100。对于各种批处理大小和序列长度,它在生成过程中运行时接近硬件内存带宽限制。

       FireAttention集成到Fireworks专有的LLM服务堆栈中,该堆栈由CUDA内核组成,针对FP16和FP8进行了优化。

三、质量分析

      以半精度运行模型会留下很多性能,因为与half/bfloat16类型相比,现代GPU的INT8/FP8类型有2倍FLOPs。此外,由于内存带宽是生成过程中的瓶颈,我们应该尝试收缩weights和K/V Cache。

     用于LLM的int量化方法有很多,根据Huggingface的推荐(https://huggingface.co/blog/mixtral),作者已经尝试了一些,而且还评估了FireAttention FP8的性能。FireAttention FP8为每个token分配3个专家(而不是默认的2个)。具体的推理细节,请参考:https://twitter.com/FireworksAI_HQ/status/1737232544687665500。

       作者使用标准的5-shot模板在基本Mixtral模型测量了MMLU度量。

GPTQ模型是从GPTQ 8位和GPTQ 4位检查点获得的。

LLM.int8()是通过传递load_in_8bit=True,dtype=float16从原始模型中获得的。

QLoRA 4 bit版本是通过将load_in_4bit=True、bnb_4bit_compute_dtype=float16传递给模型构造函数而获得的。

      虽然LLM.int8()(以及在某种程度上QLoRA)与原始模型的质量相匹配,但上面提到的int量化方法都没有任何推理加速,尤其是在batch大小大于1的情况下运行时。具体分析,可以参考:https://huggingface.co/Qwen/Qwen-72B-Chat-Int8#%E6%8E%A8%E7%90%86%E9%80%9F%E5%BA%A6%E5%8F%8A%E6%98%BE%E5%AD%98%E4%BD%BF%E7%94%A8-inference-speed--gpu-memory-usage。

       其他方法,如SmoothQuant和AWQ,试图提高模型的性能,但仍然达不到要求,尤其是在生成过程中。int量化的基本问题仍然存在。问题是LLM激活不具有均匀分布,因此对int方法提出了挑战。

       另一方面,FP8提供了一个非常有前景的机会,因为它更灵活地适应利用硬件支持的非均匀分布。

      浮点量化在LLM中的优越性在许多论文中都有介绍。下面是一些引文:

ZeroQuant FP(Wu,X.等人2023)值得注意的是,FP8的激活超过了INT8,尤其是在更大的模型中。此外,FP8和FP4的权重量化要么与它们的INT等价物竞争,要么超过它们。

Which GPU(s) to Get for Deep Learning(Dettmers T.2023)我们可以一点一点地看到,FP4数据类型比Int4数据类型保留了更多的信息,从而提高了4个任务的平均LLM零射击精度。

FP8 Quantization: The Power of the Exponent (Kuzmin A,et al.2022)主要结论是,当对大量网络进行后训练量化时,FP8格式在准确性方面优于INT8,并且指数位数的选择是由网络中异常值的严重程度驱动的。

       尽管如此,在OSS LLM服务实现中,对FP8的实际支持仍然相当匮乏。

        作者还运行了比较FP16和FP8的其他主要基准测试。以下是完整的列表:

       由于示例数量较少,arc-c/winogrande/gsm8k基准测试结果的差异仅在~1%时有意义。

       基于这些结果,可以得出结论,Fireworks FP8的实现对基础模型质量的影响非常小,在具体的微调版本中可以忽略不计。

四、性能分析

       作者无法在OSS中的Mixtral中实现FP8(TensorRT LLM在选定的少数模型上支持Mixtral和单独的FP8,但FP8目前不能与Mixtral一起工作)。相反,将把Fireworks FP16与Fireworks FP8进行比较,并将与一个非常著名的用于FP16数字的OSS替代vLLM进行交叉检查。

       作者还在GPTQ Int8模式下运行vLLM。不幸的是,目前vLLM Int8量化无法在多gpu模式下工作,所以作者只使用了一个gpu。虽然在多gpu模式下运行时延迟应该会有所改善,但我们不希望它能超过vLLM FP16的数字。

       作者还在AWQ Int4模式下运行vLLM。不幸的是,即使是单个并发请求的总请求延迟也超过了3秒的截止时间。

       作者已经在8个H100 GPU上部署了Mixtral模型,并测量了tokens生成延迟以及总请求延迟,同时改变了并发请求的数量。

      作者已经在许多配置中部署了vLLM:2、4和8个GPU(超过张量并行),将得到的QPS分别乘以4、2和1,这些图形显示了给定QPS的最佳延迟值。

       作者已经使用许多不同的配置部署了Fireworks LLM服务,与vLLM类似,只显示了获胜配置的数字。

五、结论

  1. Fireworks FP16 在Mixtral模型的性能优于vLLM;

  2. 与已经相当高效的Fireworks FP16相比,Fireworks FP8性能显著提升;

  3. 由于FP8将模型尺寸缩小了2倍,因此可以实现更高效的部署。与内存带宽和FLOP相结合,可以加快速度,使有效请求每秒提高2倍;

  4. LLM性能不存在“一刀切”的问题。vLLM和Fireworks LLM服务的不同配置在不同的设置中显示了它们的优势。

       总体而言,Fireworks FireAttention FP8为LLM在精度/性能权衡曲线上的服务提供了最佳权衡。

PS:如果想获得SOTA LLM性能,包括基于FP8的FireAttention或者通过API端点访问,请查看Fireworks GenAI平台,链接:https://fireworks.ai/。

参考文献:

[1] https://blog.fireworks.ai/fireattention-serving-open-source-models-4x-faster-than-vllm-by-quantizing-with-no-tradeoffs-a29a85ad28d0?gi=582bc74161a0&source=email-c63e4493b83d-1705085890948-digest.reader--a29a85ad28d0----8-98------------------2f6dc0a1_9ebb_4f10_ae02_b137b7296add-1

[2] https://fireworks.ai/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1386354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音识别(一)

官方文档链接:https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件,目前该插件仅认证后的小程序。 语音识别…

༺༽༾ཊ—游戏-01_2D-开发—ཏ༿༼༻

首先利用安装好的Unity Hub创建一个unity 2D(URP渲染管线)项目 选择个人喜欢的操作格局(这里采用2 by 3) 在Project项目管理中将双栏改为单栏模式(个人喜好) 找到首选项(Preferences&#xff09…

2024 解决matplotlib中文字体问题

第一种代码(失败代码) import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font_manager import FontPropertiesfont_path /Users/huangbaixi/Desktop/SimHei.ttfdef plot_demo():#print(mpl.get_cachedir())# 绘制折线图font…

【记忆化搜索】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 前言 记忆化搜索是一种优化搜索算法的方法,它可…

Apache StringUtils:Java字符串处理工具类

简介 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。如果只用 String 类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。现在有…

GL Logger和CANFDLog-OTL-128两款记录仪都是如何实现高效的报文录制的?

GL Logger是Vector推出的记录CAN/CAN FD、LIN、FlexRay和MOST数据通信的工具。以GL2400为例带着大家一步步地实现路试过程中通过整车OBD口进行CAN/CANFD报文的录制。 Step1 设备配置 设备配置即设备录制方式、录制内容、设备休眠唤醒策略等。 ▷ 打开Vector Logger Configurat…

调试ad5245的总结

调试ad5245的总结 这个ad5245是通过IIC与FPGA进行通信的,首先要理解IIC协议。 经验总结: 1、SCL和SDA端的要有上拉电阻,且上拉电阻能正常工作; 2、要往SDA数据线上写三个字节才能调节ad5245的电阻值,第三个字节就是…

html中的flex是什么?——弹性布局

在HTML中,flex是一种布局方式,用于处理容器中的子元素的布局。它是CSS3的一部分,也被称为弹性布局。 通过使用flex布局,可以将容器中的子元素进行灵活的定位和扩展,以适应不同的屏幕尺寸和设备。它提供了一种简单而强…

flink 1.18 sql gateway /sql gateway jdbc

一 sql gateway 注意 之所以直接启动gateway 能知道yarn session 主要还是隐藏的配置文件,但是配置文件可以被覆盖,多个session 保留最新的applicationid 1 安装flink (略) 2 启动sql-gatway(sql-gateway 通过官网介绍只能运行…

【时光记:2023的心灵旅程】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

tree数据处理

接口获取数据oldArr [{"deptCode": "01","parentCode": "000","sortKey": 4,"deptName": "办公室(党委办公室、董事会办公室)","children": [{"deptCode":…

九、Qt C++ 毕业设计 数据库相关

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计-CSDN博客》 …

从JVM角度对java中引用的理解

学java这么久了,对java引用越来越深刻,好好梳理一下下面三个问题,带着问题进行理解。 什么是引用?引用存放在jvm哪个区域? 引用是一种变量类型。引用类型占四个字节。 变量类型分为基本类型和引用类型。 我们知道jav…

2023年跨国企业如何实现跨境数据传输合规化(上)

一、什么是数据跨境传输? 首先了解一个概念,什么是数据跨境传输? 数据跨境传输简单概括就是指信息通过互联网等网络媒介,在跨国企业之间进行传递和交换的过程。 有一则官方网站关于全球化数字化的数据统计:仅2019 年…

【Web】什么是 XSS 攻击,如何避免?

🍎个人博客:个人主页 🏆个人专栏:Web ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 常见方法: 结语 我的其他博客 前言 在当今数字化时代,网络安全成为信息技术领域中的一项至关重要的任务。X…

视频和音频怎么合并在一起?分享3个轻松合并的实用技巧

视频和音频怎么合并在一起?在数字媒体时代,视频和音频是制作多媒体内容不可或缺的元素。有时我们需要将视频和音频合并在一起,以创建更丰富、更有趣的多媒体内容。那么,如何将视频和音频合并在一起呢?下面将介绍一些实…

NLP论文阅读记录 - 2022 | WOS 用于摘要法律文本的有效深度学习方法

文章目录 前言0、论文摘要一、Introduction1.1目标问题 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Effective deep learning approaches for summarization of legal texts(22&#x…

第一个Python程序_获取网页 HTML 信息[Python爬虫学习笔记]

使用 Python 内置的 urllib 库获取网页的 html 信息。注意,urllib 库属于 Python 的标准库模块,无须单独安装,它是 Python 爬虫的常用模块。 获取网页 HTML 信息 1) 获取响应对象 向百度(http://www.baidu.com/)发起…

计算3种颜色粉刷立方体的所有可能方法

“(伯恩赛德引理)设G是一个作用在有限集合X上的有限群,令N为轨道的个数,则 其中Fix(x)是被τ固定的x∈X的个数.“ *高等近世代数 Joseph J. Rotman P78 “设G是一个有限群,作用在集合X上。对每个g属于G令X^g表示X中在g…

电力能源监测管理系统,在医院中有哪些作用?

随着经济全球化的发展,节能减排成为当前社会发展必须关注的问题。电力能源监测管理系统,可以分析电力管理能源的现状,并根据现状提出对应的策略,为快速高效建成绿色智能化医院提供有力支撑和技术保障。 医院能源管理现状 1、人力…