在InternVL-2.5上实现10倍吞吐量提升,模型性能几乎无损失。
最新1-bit多模态大模型KV cache量化方案CalibQuant来了。
通过结合后缩放和校准方法,可显著降低显存与计算成本,无需改动原模型即可直接使用。
多模态大语言模型在各种应用中展现出了卓越的性能。然而,它们在部署过程中的计算开销仍然是一个关键瓶颈。
虽然KV cache通过用显存换计算在一定程度上提高了推理效率,但随着KV cache的增大,显存占用不断增加,吞吐量受到了极大限制。
为了解决这一挑战,作者提出了CalibQuant,一种简单却高效的视觉KV cache量化策略,能够大幅降低显存和计算开销。
具体来说,CalibQuant引入了一种极端的1比特量化方案,采用了针对视觉KV cache内在模式设计的后缩放和校准技术,在保证高效性的同时,不牺牲模型性能。
作者通过利用Triton进行runtime优化,在InternVL-2.5模型上实现了10倍的吞吐量提升。
这一方法具有即插即用的特性,能够无缝集成到各种现有的多模态大语言模型中。
当前的多模态大语言模型在实际应用中常常需要处理大尺寸、高分辨率的图像或视频数据,KV cache机制虽然能提升效率,
但其显存占用与输入长度(如视觉帧数、图像尺寸等)成正比。
当输入数据的规模增大(例如更多的视觉帧、更高的图像分辨率)时,KV缓存的显存使用量迅速增加,成为限制吞吐量的瓶颈。
尽管当前有些针对LLM KV cache量化的方法可以将其压缩至2比特,但这些方法没有针对多模态问题中特有的视觉冗余做分析优化,
导致其无法在极限情况1比特下被使用。
本文通过分析多模态大语言模型中的视觉KV cache的冗余,设计了适合多模态模型特有的KV cache量化方案。
本文在通道维度量化的基础上提出了针对反量化计算顺序的后缩放优化方案和针对注意力权重优化的校准策略。
一种广泛使用的方法是均匀整数量化。给定一个比特宽度b>0和一个输入值x,它位于某个范围[α,β]内,则将其映射到一个离散整数
,计算过程为:
然后,通过上述过程对K中的每一行向量进行量化,其中乘法操作是逐元素进行的。作者同样将这种按通道的量化方法应用于V cache。
量化后的K cache可以用离散化的整数值、一个缩放因子(scale factor)和一个偏置项(bias term)来表示。
在解码阶段,这些值被用于对K cache进行反量化,并随后与Q相乘。
然而,通道维度的量化需要为每个通道分别指定不同的缩放因子和偏置向量,这将导致产生大量不同的数值,增加了反量化过程中的计算开销。
此外,这种方式也使得CUDA内核中的计算效率降低。
作者观察到量化后的K仅具有有限数量的离散取值(例如,对于2比特量化,其取值仅为0、1、2、3),
于是提出利用简单的计算顺序重排来减少存储需求,并提高计算效率。具体过程如下:
1比特量化的一个限制是经过反量化之后的数值往往会包含大量的极端值。
这是因为1比特量化的码本总是包含了最小值和最大值,导致那些接近边界的输入值在反量化后直接映射到了极端值。
因此,重建后的KV cache通常包含过多的大绝对值,最终导致注意力分数产生明显的失真。
如下图所示,校准方法(Quant-C,红色)有效减轻了极端值的影响,
使调整后的注意分数分布相较于未经校准的量化方法(Quant,蓝色)更接近全精度(Exact)分布。
作者将提出的量化方法分别应用在LLaVA和InternVL model上,测试了其在captioning,VQA,Video QA三个不同的任务上的性能。
以captioning任务为例,下图展示了本文所提出的方法在cococaption benchmark下和其他方法如KIVI,VLCache的对比。
在不同比特数(8,4,2,1)下,本文提出的方法在大部分测试指标上都优于其他两种方法。
例如对于llava-1.5-7b,本文的方法在8比特下达到最高的CIDEr 分数 1.105,与全精度持平,并在1比特下提升至1.109,超过了VLCache(1.053)。
同样地,对于InternVL-2.5-26B,本文的方法在4比特和2比特下分别取得了最高的CIDEr分数1.32和1.313,均优于VLCache和KIVI。
为了展示本文提出的量化方法对解码效率的影响,作者使用InternVL-2.5系列模型,
将所提出的1比特量化方法与16比特基线进行了吞吐量评估(即每秒生成的token数)。作者考虑了两种视觉token长度的情况:n=3328和8192。
作者将GPU最大内存从5GB变化到30GB,并在每种内存限制下,寻找能够容纳的最大batch size,测量解码阶段的吞吐量。
如下图展示,1比特量化方法在所有显存预算下始终优于基线方法。
例如,当n=3329且使用80亿参数模型时,本文的方法在5GB显存下实现了126.582tokens/s的吞吐量(基线为11.628tokens/s),
在30GB下提升至459.016tokens/s(基线为40.816tokens/s)。
这意味着相比基线,本文方法的吞吐量提升约为9.88×到11.24×,充分展示了该方法在受限显存条件下显著提升解码速率。
本文探讨了多模态大语言模型中视觉KV cache的压缩方法。简单地将量化应用到极低比特数常常会引发分布偏移,导致模型性能下降。
为了解决这一问题,本文提出了一种新颖的校准策略,作用于softmax之前的注意力分数,有效缓解了量化带来的失真。
此外,本文还引入了一种高效的通道维度后缩放技术以提高计算和存储效率。
作者在InternVL和LLaVA模型系列上,针对COCO Caption、MMBench-Video和DocVQA等基准任务进行了实验,结果验证了所提出方法的有效性。
作者利用Triton实现了本文所提出的方法,runtime分析表明本文提出的方法相较于全精度模型有大约10倍的吞吐量提升。
论文标题:CalibQuant:1-Bit KV Cache Quantization for Multimodal LLMs
论文地址:https://arxiv.org/abs/2502.14882
代码地址:https://github.com/insuhan/calibquant
文章来自于微信公众号 “量子位”,作者 :CalibQuant团队
【开源免费】DeepBI是一款AI原生的数据分析平台。DeepBI充分利用大语言模型的能力来探索、查询、可视化和共享来自任何数据源的数据。用户可以使用DeepBI洞察数据并做出数据驱动的决策。
项目地址:https://github.com/DeepInsight-AI/DeepBI?tab=readme-ov-file
本地安装:https://www.deepbi.com/
【开源免费】airda(Air Data Agent)是面向数据分析的AI智能体,能够理解数据开发和数据分析需求、根据用户需要让数据可视化。
项目地址:https://github.com/hitsz-ids/airda
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI