WindowQuant:基于窗口级相似度的混合精度KV缓存量化技术,用于优化大语言模型推理性能

《ACM Transactions on Architecture and Code Optimization》:WindowQuant: Mixed-Precision KV Cache Quantization Based on Window-Level Similarity for VLMs Inference Optimization

【字体: 大 中 小 】 时间:2026年08月17日 来源:ACM Transactions on Architecture and Code Optimization 2.9

编辑推荐:

  摘要 近年来,视频语言模型已被应用于多个领域。然而,这类模型的视觉词元序列过长,会导致推理延迟和GPU内存使用率过高。现有方法基于词元粒度对VLM中的键值缓存进行混合精度量化,但这种方法在搜索过程中耗时较长,且在计算时存在硬件效率问题。本文提出了一种名为WindowQuant

  摘要
近年来,视频语言模型已被应用于多个领域。然而,这类模型的视觉词元序列过长,会导致推理延迟和GPU内存使用率过高。现有方法基于词元粒度对VLM中的键值缓存进行混合精度量化,但这种方法在搜索过程中耗时较长,且在计算时存在硬件效率问题。本文提出了一种名为WindowQuant的新方法,它采用窗口自适应混合精度量化来优化键值缓存。WindowQuant由两个模块组成:窗口级量化搜索和窗口级键值缓存计算。窗口级量化搜索能够根据视觉词元窗口与文本提示的相似度得分,快速确定键值缓存窗口的最佳位宽配置,从而保持模型精度。此外,窗口级键值缓存计算会在量化前重新排序缓存窗口,避免混合精度量化在推理过程中带来的硬件效率问题。大量实验表明,WindowQuant在各种数据集上均优于现有的最先进VLM模型及键值缓存量化方法。

AI生成的总结(实验版)
此总结是通过自动化工具生成的,并非由文章作者撰写或审核。它旨在帮助读者发现相关内容、评估文章相关性,以及让相关领域的读者更好地理解该研究。它是对作者提供的摘要的补充,而作者提供的摘要仍是论文的核心总结。完整文章才是最具权威性的版本。点击此处了解更多信息。点击此处对该总结的准确性、清晰度及实用性发表意见,您的反馈将有助于改进未来的生成版本。要查看此AI生成的通俗版总结,需拥有高级访问权限。

1 引言
大型语言模型因其出色的文本理解和生成能力,在学术界和工业界都广受欢迎。近年来,人们越来越希望将大型语言模型扩展到多模态数据处理领域,尤其是视频处理。通常,当使用大型语言模型处理视频时,首先需要将输入视频转换为一系列帧,然后通过时空视觉编码器将每帧转换为词元,即视觉词元(也称为视觉嵌入)。同时,还会提供一个文本提示作为指导,该文本也会通过文本编码器转换为词元,即文本词元(也称为文本嵌入)。这些视觉词元和文本词元会被拼接起来,送入大型语言模型进行处理。因此,用于视频理解的大型语言模型也被称作视觉语言模型。视觉语言模型已被应用于视频字幕生成、时间对齐、动作识别以及具身智能等多个领域。图1(a)展示了一个典型的视觉语言模型应用案例:该模型根据输入视频和文本提示中的线索,生成对文本提示中问题的回答。通过在大规模视频-文本数据集上的预训练,视觉语言模型为理解视频中的复杂时间动态和语义内容提供了强大的框架。

图1. (a) 视觉语言模型应用示例;(b) 处理不同长度视频时,LLava-OneVision-0.5B模型的键值缓存(包括视觉词元和文本词元)与模型权重的内存使用情况对比。左图:0.5秒视频;右图:30秒视频。

然而,当前的视觉语言模型在处理视频理解任务时,常常面临GPU内存不足和推理延迟过高的问题。这些问题的主要原因在于视觉词元的键值缓存。虽然视觉语言模型权重和文本提示的内存占用是固定的,但随着输入视频时长的增加,越来越多的视觉词元会导致键值缓存的内存消耗急剧上升。例如,在LLaVA-OneVision-0.5B模型中,模型权重的内存占用约为1GB。通常,一个文本提示包含数十个单词,会被转换为数十个文本词元,其内存占用约为4MB。而一张图像帧则会被转换为256个视觉词元。因此,对于30帧/秒、时长为30秒的视频,即使推理时的批量大小仅为1,视觉词元键值缓存的内存消耗也可能高达21.6GB,轻松超过普通GPU的内存限制。如图1(b)所示,当输入视频很短(仅0.5秒)时,模型权重仍占据主要内存消耗;而当输入视频稍长一些(30秒)时,内存瓶颈则转移到了视觉词元的键值缓存上。庞大的键值缓存不仅会导致GPU内存不足,还会显著增加推理延迟。因为在推理过程中需要将键值缓存数据在GPU内存与高速静态随机存取存储器之间传输,如此庞大的缓存量会带来巨大的数据传输延迟,进而增加整体推理延迟。图2展示了在不同键值缓存大小下,LLaVA-OneVision-Qwen2-7B模型生成一个词元所需的平均解码延迟变化情况。从图中可以看出,平均解码延迟几乎与键值缓存大小的增加呈线性关系。

图2. 不同键值缓存大小下LLaVA-OneVision-Qwen2-7B模型的平均解码延迟。

研究人员提出了多种压缩键值缓存的方法,如注意力剪枝[1, 3, 34]、删除或量化不重要的词元[15, 43, 48],以及从系统层面进行优化[7, 8, 19]。其中,最简单且最有效的方法就是量化。量化是指将键值缓存从原有的FP16格式转换为位宽更低的格式(如INT8、INT4甚至INT2)。不过,目前大多数键值缓存量化方法[24, 28, 35, 49]都是将键值缓存统一量化为单一位宽。实际上,键值缓存中各词元的重要性是分层的,有些词元比其他词元更为关键。因此,统一量化很容易导致模型精度下降。有一些研究[11, 16, 17, 46]提出根据词元的重要性实施混合精度量化来解决这一问题,但它们的量化搜索策略是在词元级别进行的,耗时较长。更糟糕的是,混合精度量化在推理过程中还会导致硬件效率降低,比如增加延迟和内存占用。

在本文中,我们提出在更大的粒度上,即窗口级别,对键值缓存实施混合精度量化。我们观察到了一个有趣的现象:在视觉语言模型的推理过程中,并非所有视觉词元都与文本提示相关,其中存在大量冗余信息。我们选取了一段较长的视频(可分割为89个窗口),模拟长上下文环境,并创建了10个文本提示,计算它们之间的相似度。如图3所示,对于每个文本提示,只有少量窗口具有高度相关性,而大部分窗口则无关紧要。由于文本提示是视觉语言模型的指导指令,那些与文本提示无关的视觉信息对任务本身的贡献很小。基于这一观察,我们需要为那些与文本提示高度相关的视觉词元窗口对应的键值缓存保留较高的精度,否则模型就会丢失关键信息。而对于那些与文本提示无关的视觉词元窗口对应的键值缓存,将其量化为非常低的位宽也不会对模型精度造成显著影响。基于以上分析,我们提出了一种名为WindowQuant的窗口自适应混合精度键值缓存量化方法。

图3. 视频与10个文本提示之间的相似度热图。大部分视频窗口与文本提示无关。

WindowQuant主要由两个模块组成:窗口级量化搜索和窗口级键值缓存计算。窗口级量化搜索会计算文本提示与每个视觉词元窗口之间的相似度得分,然后根据这些得分确定对应视觉词元窗口的键值缓存窗口的位宽配置。该模块能够快速有效地保持视觉语言模型的精度。由于我们的量化配置是从窗口层面确定的,而非像以往方法那样逐个词元分配,因此配置搜索时间大大缩短。此外,后续的量化也是在每个窗口基础上进行的,一个窗口内的所有词元会一起量化,这进一步降低了整体量化时间。我们还设计了窗口级键值缓存计算模块,以避免硬件效率问题。该模块会重新排序上下文键值缓存窗口,使得具有相同位宽配置的窗口在物理内存中连续排列。这一设计显著降低了视觉语言模型推理过程中的延迟和内存使用率。

总之,我们的贡献可归纳为以下几点:
— 我们提出了一种名为WindowQuant的窗口自适应混合精度键值缓存量化方法,可用于高效、有效的视觉语言模型推理。
— WindowQuant包含窗口级量化搜索模块,该模块根据视觉词元窗口与文本提示的相似度得分来确定键值缓存窗口的位宽配置,从而保持视觉语言模型的推理精度。
— WindowQuant还包含窗口级键值缓存计算模块,该模块会在量化前重新排序不同位宽配置的键值缓存窗口,避免混合精度量化在推理过程中导致的硬件效率问题。
— 大量实验表明,与现有的最先进方法相比,WindowQuant能够实现更高的模型精度、更高的解码吞吐量以及更低的内存使用率。

2 基础知识
在本节中,我们将简要回顾一些必要的背景知识和基础概念,以便读者更好地理解所提出的方法,尤其是那些对视觉语言模型推理系统不太熟悉的读者。这里介绍的内容主要是对先前研究中已有的设计和观察结果的总结,而非引入新的技术成果。本节的主要内容源自论文《Attention Is All You Need》[39]。

2.1 视觉语言模型架构
图4展示了一个典型的视觉语言模型架构[25, 26]。它主要由视觉编码器、文本编码器和大型语言模型三部分组成。输入的视频和文本提示首先经过多模态编码阶段。视频由视觉编码器和投影器(用于模态对齐)转换为视觉词元(也称为视觉嵌入),而文本提示则由文本编码器转换为文本词元(也称为文本嵌入)。这两种词元随后会被拼接起来,形成输入嵌入,再送入大型语言模型进行处理,最终生成输出结果。值得注意的是,视觉编码器和文本编码器的体积相对较小,大部分计算都在大型语言模型内部完成,而键值缓存也位于该模型中。因此,我们的重点在于优化大型语言模型的计算过程,为此,我们还详细介绍了大型语言模型的结构组成。

图4. 典型视觉语言模型的架构。

如图4所示,标准的大型语言模型架构由多个依次堆叠的块组成[39]。每个块通常包含三个核心组件:多头自注意力模块、前馈网络模块和层归一化模块。这些组件以级联方式运作,每个块都会以前一个块的输出特征作为输入,通过其内部的子模块进行变换。

大型语言模型架构的核心是MHSA模块中使用的自注意力机制。给定一组输入嵌入X=[x1,x2,…,xn],MHSA模块会利用查询权重矩阵WQ、键权重矩阵WK和值权重矩阵WV进行线性投影,从而计算出查询矩阵Q、键矩阵K和值矩阵V。其计算公式如下式所示:
Q=XWQ, K=XWK, V=XWV. (1)

随后,(Q,K,V)三元组会经历自注意力运算,其中注意力权重A首先是通过将文本提示矩阵Q与键矩阵K相乘来计算的,公式如下:
A=Attention(Q,K)=QKTdk. (2)

此处,dk表示词元嵌入的维度。之后,注意力权重会与值矩阵Vi相乘,从而得到输出特征Z,公式如下:
Zi=Softmax(Ai+M)Vi, (3)

其中,矩阵M为掩码矩阵,其作用是确保序列中当前词元之后的词元的注意力权重被设置为零。掩码矩阵仅在预填充阶段使用,在解码阶段则不存在。我们稍后会介绍预填充阶段和解码阶段。2.2 大语言模型推理过程图5展示了VLM中典型预训练大语言模型的推理过程,其中蓝色方块代表每个输出标记。推理过程可分为两个主要阶段:图5.典型大语言模型的推理过程。——预填充阶段:在预填充阶段,大语言模型接收由VLM的多模态编码过程生成的视觉标记和文本标记。随后,VLM将这两类标记拼接起来,一起输入到预训练的大语言模型中。该模型会并行计算这些输入标记,并生成第一个输出标记。——解码阶段:在解码阶段,VLM中的预训练大语言模型会将整个输入标记序列与已生成的输出标记结合,从而产生输出序列中的下一个标记。这一过程会不断重复,直到生成表示句子结束的标记为止。在上述VLM推理过程中,主要的计算负担在于前文提到的自注意力计算。由于解码阶段是迭代式的且无法并行化,这就带来了大型模型推理中的首个重大挑战:每一步解码都需要为整个输入标记序列以及已生成的输出标记重新计算K矩阵和V矩阵,从而导致大量冗余计算,显著增加推理延迟。为了解决这个问题,研究人员开发了KV缓存机制,它将输入标记以及已生成输出标记的K矩阵和V矩阵存储在GPU内存中。当需要计算时,这些矩阵会从GPU内存加载到GPU的高速SRAM中。在计算出新输出标记的K矩阵和V矩阵后,它们会被存储回GPU内存,并添加到现有的KV缓存末尾。然而,如第1节所述,过大的KV缓存会导致GPU内存消耗和推理延迟大幅增加。因此,如何优化KV缓存的大小已成为VLM优化中的一个关键问题。接下来,我们将介绍如何利用混合精度量化来缩小KV缓存的大小。3 方法在本节中,我们首先概述WindowQuant方法的整体架构,然后详细介绍WindowQuant的两个核心组成部分,即窗口级量化搜索和窗口级KV缓存计算。3.1 架构概览WindowQuant的架构如图6所示。输入视频首先被分割成若干个长度相等的短窗口(如果视频长度不能被窗口大小整除,那么视频末尾无法被整除的部分会被截断,这部分对应的KV缓存将保持FP16精度)。文本提示由文本编码器转换为文本标记,而视频窗口则由视觉编码器和投影器转换为视觉标记窗口。接着,窗口级量化搜索模块接收并处理这些视觉标记窗口和文本提示,输出量化位宽配置。之后,视觉标记窗口和文本标记会被送入预训练的大语言模型中进行正式推理。在预填充阶段,我们会重新排列由视觉标记窗口生成的KV缓存窗口。从这个模块输出的重新排列后的KV缓存窗口会根据窗口级量化搜索模块提供的配置进行量化(一个窗口内的所有标记会一起量化)。最后,在解码阶段结束后,预训练的大语言模型会输出结果。为了保持模型精度,我们仅对输入视觉标记的KV缓存进行量化,而输出标记和文本标记的KV缓存则保持FP16精度。鉴于在一般的VLM推理任务中,视觉标记的长度远远大于输出标记加上文本标记的总长度,我们认为这种策略不会带来显著的内存或推理延迟开销。图6.WindowQuant的架构概览。(a)窗口级量化搜索模块。(b)窗口级KV缓存计算模块。3.2 窗口级量化搜索3.2.1 量化配置确定窗口级量化搜索借鉴了检索增强生成(RAG)的概念。RAG会从外部知识源(如数据库或语料库)中检索相关文档或段落,以此补充当前大语言模型输入文本提示中的信息,从而获得更好的生成结果。在我们的方法中,我们会找出与文本提示相关的视频窗口,并仅保留对应它们的KV缓存。为了判断相关性,我们直接使用视觉标记窗口和文本标记来计算相似度。如图6所示,视频窗口和文本提示分别被发送到视觉编码器和文本编码器中。经过编码和模态对齐后,我们就得到了视觉标记窗口和文本标记。一个窗口中的视觉标记实际上是原始VLM视觉标记的子集,具体来说,它们是由视觉编码器从对应视频窗口内的视频帧中生成的标记。我们用以下公式表示原始视觉标记矩阵:V={v1,v2,…,vM}∈RM×D,(4)其中M是视觉标记的数量,D是编码器的维度,vi∈RD则表示第i个视觉标记的向量。对于由T帧组成的视频输入,视觉标记的总数则为:M=T×K,(5)其中K表示每帧的视觉标记数量,这个数值通常根据输入分辨率和视觉编码器的配置设置为256或576。类似地,我们用以下公式表示文本标记矩阵:T={t1,t2,…,tN}∈RN×D,(6)其中N是文本标记的数量,tj∈RD则表示第j个文本标记的向量,这里的D表示嵌入维度。假设窗口大小为S,那么第i个窗口的视觉标记矩阵可以表示为:Wi={w1,w2,…,wS}={vi×S,vi×S+1,…,vi×S+S?1}∈RS×D,(7)其中wk∈RD表示该窗口中第j个视觉标记的向量,总共有?MS?个窗口。接下来,我们会计算文本标记矩阵与每个视觉标记窗口矩阵之间的相似度,从而得到一个相似度分数列表。相似度计算公式为:sim(T,Wi)=1SN∑j=1N∑k=1Stj?wk||tj||×||wk||i=1,2,…,?MS?,(8)其中||?||表示L2范数。随后,我们设定两个阈值Tlow和Thigh(0 < Tlow < Thigh <1)。我们会将相似度分数列表中每个位置的分数与这两个阈值进行比较。如果相似度分数高于Thigh,那么该位置的视觉标记窗口就被认为与文本标记高度相似,对应的视频窗口也被认为与文本提示高度相关,我们会将其对应的KV缓存窗口的位宽配置设为FP16。如果相似度分数低于Tlow,那么该位置的视频窗口就被认为与文本提示的相关性较低,我们会将其对应的KV缓存窗口的位宽配置设为INT2。对于介于Tlow和Thigh之间的相似度分数,我们会采取折中策略,将其对应的KV缓存窗口的位宽配置设为INT4。关于如何设定这两个阈值,我们稍后会详细说明。3.2.2 第一个窗口的固定精度之前的研究者[43]已经证明,大语言模型起始位置的标记对模型的性能起着至关重要的作用,会显著影响其准确性。在我们的研究中,我们进一步探讨了VLM中的这一现象。我们通过实验分析了Llava-OneVision-Qwen2-7B模型预训练版本中不同层级中最初几个视觉标记的注意力权重(注意力权重就是公式(2)中的“Ai”,它能反映某个标记对模型推理准确性的贡献程度)。如图7所示,我们发现处于起始位置的视觉标记的注意力权重要高于后续位置的标记。这一发现强烈表明,序列开头的视觉标记具有很大的影响力,对确定模型的输出起着关键作用。这些初始视觉标记似乎能够捕捉到重要的上下文信息,而这些信息随后会传递到序列的其余部分。图7.Llava-Onevision-Qwen2-7B模型预训练版本中不同层级标记的注意力权重。基于这些观察结果,我们提议无论第一个视觉标记窗口的相似度分数如何,都将其精度固定为FP16。这样做可以确保序列开头视觉标记所携带的重要信息不会丢失,从而保障模型的准确性。3.2.3 阈值确定需要注意的是,大语言模型包含众多层级,不同层级对量化的敏感度可能有所不同。为了解究这一点,我们借鉴了SqueezeAttention[41]的思想,利用层注意力处理前后隐藏状态之间的余弦相似度来表示某一层对模型准确性的贡献程度。具体来说,相似度的计算公式如下:si=hi?hi′||hi||?||hi′||,(9)其中hi是第i层注意力计算之前的隐藏状态向量,hi′则是第i层注意力计算之后的隐藏状态向量。较大的si值表明,隐藏状态向量在经过第i层处理后变化不大,这意味着这一层对模型准确性的贡献较小。我们在三种不同VLM模型的预训练大语言模型上展示了层与层之间隐藏状态的相似度,结果如图8所示。在图中,颜色越接近白色表示相似度越低,而颜色越接近蓝色则表示相似度越高。从图中可以看出,在这三种模型中,大多数层的隐藏状态相似度都较高,只有少数最底层级的隐藏状态相似度较低。因此,VLM中的大多数层对模型准确性的贡献都很小,只有少数层对模型准确性至关重要。所以,我们可以为VLM中的不同层级采用不同的量化策略。图8.在三种不同VLM模型的预训练大语言模型上测试的层与层之间隐藏状态的相似度。从左到右,对应的VLM模型分别是LLaVA-QneVision-Qwen2-7B、Qwen2-VL-7B和Qwen2.5-VL-7B(图中的“OV”表示OneVision)。具体而言,对于那些si值较大的层,我们会尽可能将其KV缓存值量化为INT2,也就是说,我们会将Tlow和Thigh设置得相对较高,接近1。相应地,我们认为si值较小的层对模型准确性的贡献更大,因此不适合进行量化。对于这类层,我们会尽量保持其KV缓存值处于FP16格式,同时将Tlow和Thigh设置得相对较低,接近0。而对于其他层,我们会尽可能将其KV缓存中的值量化为INT4,也就是说,我们会设置一个接近0的较小Tlow值和一个接近1的较大Thigh值。最后,我们设计了这两个阈值函数来计算第i层的Tlow和Thigh值:Tlowi=f1(si)=eαsi?1eα?1,(10) Thighi=f2(si)=e?αsi?1e?α?1。(11)其中α是一个预先定义的超参数,用于控制阈值的大小。这两个函数完全符合上述要求:当si接近1时,f1(si)和f2(si)都接近1;当si接近0时,f1(si)和f2(si)都接近0。在其他情况下,f1(si)的值 tend to更接近0,而f2(si)的值则 tend to更接近1。此外,在[0, 1]区间内,f1(si)始终小于或等于f2(si),完全满足Tlow和Thigh的要求。我们窗口级量化搜索的整体算法如算法1所示。对于批量到达的请求,为了保持批量计算的便利性,我们会对批次内的所有请求应用相同的量化配置。具体流程如下:首先,对于每个请求,Tlow和Thigh的值都是相同的,因为它们只取决于当前的层索引和超参数α。其次,对于给定的窗口位置,我们会为批次中的所有请求计算该窗口的相似度,再通过将相似度与Tlow和Thigh进行比较来确定相应的量化配置。之后,我们会选择出现频率最高的量化配置,并将其应用于批次中所有请求的该窗口。该过程会重复进行,以确定所有窗口的量化配置。3.3 窗口级KV缓存计算3.3.1 KV缓存窗口重排。直接应用混合精度量化可能会导致在物理上连续但位宽不同的视觉令牌窗口,这在推理计算时会导致硬件效率降低。例如,现代GPU使用缓存行来优化数据读取,但不同位宽的数据无法正确对齐,可能需要跨越多个缓存行。这会导致需要加载更多缓存行,增加缓存未命中率和内存访问频率,从而显著提升推理延迟。此外,如果硬件设计为能够同时读取多字节数据,比如单指令多数据(SIMD)架构,那么一些位宽较窄的数据可能只能利用部分硬件资源,从而导致GPU内存浪费。因此,我们设计了窗口级KV缓存计算模块来解决硬件效率问题。该算法的伪代码如算法2所示(为便于书写,我们省略了方程式(2)中的标量因子dk除法)。具体而言,在预填充阶段,我们首先计算输出令牌,然后采用KV缓存窗口重排技术,将具有相同位宽配置的KV缓存窗口放在一起,使其在物理内存中连续。接着,根据KV缓存量化搜索模块确定的位宽配置对这些窗口进行量化。在解码阶段,我们将Q矩阵与K矩阵的三个不同位宽的转置块相乘,得到三个注意力矩阵块,再将这些块沿最后一维拼接起来形成注意力矩阵。随后将该注意力矩阵与掩码矩阵相加,并通过softmax函数处理。处理后的注意力矩阵再次被分成三个块,每个块分别与对应位宽的V矩阵块相乘,生成三个较小的输出矩阵,最终通过将这三个小输出矩阵相加得到最终输出矩阵。3.3.2 正确性证明。我们证明通过这种方式得到的输出与传统计算方法的结果一致。在传统计算方法中,假设存在N个视觉令牌窗口,那么K矩阵可以被分解为形式为[K1|K2|?|KN]T的块矩阵,V矩阵也可以被分解为形式为[V1|V2|?|VN]T的块矩阵,二者都是沿着令牌长度维度划分的。显然,注意力矩阵A也可以被分解为[A1|A2|?|AN]。根据块矩阵乘法,最终输出矩阵O为:O=[A1V1+A2V2+?+ANVN]。 (12)现在,如果我们进行KV缓存窗口重排,就相当于改变K矩阵和V矩阵中子块的顺序。假设重排后,K变为[Kx1|Kx2|?|KxN]T,V变为[Vx1|Vx2|?|VxN]T,其中{x1,x2,…,xN}是{1,2,…,N}的一个排列。由于softmax函数不受矩阵子块顺序的影响,因此其计算结果与先对原始注意力权重矩阵应用softmax函数再进行重排所得结果相同。也就是说,矩阵A的子块最终会以与K矩阵中子块相同的顺序排列,即A为[Ax1|Ax2|?|AxN]。最终输出O′将为:O′=[Ax1Vx1+Ax2Vx2+?+AxNVxN], (13)由于矩阵加法的交换不变性,该结果与矩阵O相等。图9展示了KV缓存窗口重排对注意力计算影响的示例,其中窗口数量为六个。从图中可以看出,重排前的结果为A1V1+A2V2+A3V3+A4V4+A5V5+A6V6,而重排后的结果为A1V1+A3V3+A2V2+A4V4+A3V3+A6V6。显然,经过KV缓存窗口重排前后,注意力计算结果仍然保持一致。图9.KV缓存窗口重排的示例。3.3.3 量化实现。在我们的方法中,我们采用了非对称四舍五入(RTN)量化方式。RTN量化是一种将高精度浮点数转换为目标位宽下最接近的可表示整数的方法。非对称量化允许量化范围发生偏移(与以零为中心的对称量化不同),从而能够更精确地表示那些中心不在零或分布不均的数据,非常适合用于KV缓存量化。量化与反量化的公式如下:量化:Q=clamp(?xs?,qmin,qmax)。 (14)反量化:X=s?(x?z), (15)其中Q为量化后的张量,x为原始精度的张量,X为反量化后的张量,s为缩放因子,z为零点,qmin和qmax为整数范围边界(b位无符号量化时为[0, 2b - 1],b位有符号量化时为[-2b?1, 2b?1-1]),??为四舍五入运算符。s和z的计算公式如下:s=xmax?xminqmax?qmin,z=qmin??xs?, (16)其中xmax和xmin为原始数据中的最大值和最小值。我们对KV缓存采用分组量化方式,每组的大小对应一个窗口。分组量化的理念源自GPTQ [13],即同一组内的所有元素共享统一的量化参数(即缩放因子和零点)。张量的不同区域可能存在不同的数值范围(例如大语言模型激活值中的异常值),分组量化能够适应这些局部差异,相比逐张量量化方式能降低量化误差。在推理过程中,由于softmax函数的计算需要高精度数据,因此我们需要在通过矩阵乘法得到注意力权重矩阵后对其进行反量化处理。无论是反量化操作还是矩阵乘法操作,都需要先将矩阵从GPU全局内存加载到GPU的高速SRAM中,计算完成后再将结果写回全局内存。这类操作会导致两次读写操作。为了进一步加快推理速度,我们采用了操作融合技术,将反量化和矩阵乘法这两个操作合并为一个新操作。操作融合的理念源自AutoTVM [4]。通过将这两个操作合并为一个,我们可以将内存事务减少为一次读写操作,同时确保所有中间计算都在GPU的高速SRAM体系中完成。在实际推理过程中,我们直接将量化的键矩阵和原始精度的Q矩阵输入到新操作中,该操作会为后续的softmax函数返回高精度的浮点数形式的注意力权重结果。在应用softmax函数之后,我们再次将量化的值矩阵和原始精度的注意力权重矩阵输入到新操作中,从而得到高精度的注意力输出结果。通过将不同的操作融合在一起,我们避免了反量化矩阵的高成本中间内存读写操作,显著降低了全局内存带宽压力,消除了操作之间的内核启动开销,还能形成更利于硬件的计算模式,从而最大化缓存利用率并降低推理延迟。3.3.4 局限性。需要注意的是,我们的重排方法仍存在一个局限性:重排会影响预填充阶段计算的输出结果。这是因为在Q矩阵和K矩阵相乘之后,会在预填充阶段生成注意力权重矩阵,此时还需要加入掩码矩阵以确保令牌生成过程中的因果关系。由于存在这个掩码矩阵,当将重排后的注意力权重矩阵输入到softmax函数时,会产生不同的结果。这种情况下,softmax的输出结果不再等于先对原始注意力权重矩阵应用softmax函数再进行重排所得的结果。在解码阶段,由于不会应用掩码矩阵,因此对KV缓存进行重排不会影响输出结果。因此,在实际推理过程中,我们首先在预填充阶段计算第一个输出令牌的结果,然后再进行重排和量化处理,得到重排且已量化的KV缓存(仅存储该KV缓存,无需重新计算第一个输出令牌)。此后,这个经过重排量化的KV缓存会参与后续的所有计算。在后面的解码阶段,我们可以在计算每个输出令牌之前正常进行重排操作。4 评估4.1 实验设置基准测试。我们在多个标准化的问答基准测试中,对WindowQuant的问答能力与几款最先进的视觉语言模型进行了全面比较,以此作为评估起点。我们的评估涵盖了三种广为认可的多选题问答数据集:NExT-QA,该数据集侧重于视频理解中的时间与因果推理能力;EgoSchema,旨在评估从自我中心视角出发的长视频理解能力;IntentQA,则用于测试模型从视觉内容中推断人类意图和动机的能力。这种多基准测试评估框架使我们能够全面了解WindowQuant在各种问答场景下的表现,涵盖时间推理、因果推断、意图识别以及长视频理解等多个方面。此外,我们还使用了名为MVBench的多任务视频理解数据集,对WindowQuant与最先进视觉语言模型的性能进行更为全面深入的对比。该基准测试即MVBench,它是一个综合性的视频理解测试平台。我们从MVBench中挑选了19项具有挑战性的视频任务,这些任务涵盖了视频理解中的九种不同类型的推理能力。MVBench中19项视频任务的详细信息如下:AA(动作反义词)、AC(动作计数)、AL(动作定位)、AP(动作预测)、AS(动作序列)、CO(角色顺序)、CI(反事实推理)、EN(自我中心导航)、ER(情节推理)、FA(细粒度动作)、MA(移动属性)、MC(移动计数)、MD(移动方向)、OE(物体存在性)、OI(物体交互)、OS(物体重排)、ST(场景转换)、SC(状态变化)、UA(意外动作)。值得注意的是,MVBench中的视频通常较短,对该数据集的评估也能反映WindowQuant在短视频任务上的表现。我们还使用了MileBench [36]这一综合性基准测试,来比较WindowQuant与其他量化方法的性能。我们从MileBench中选择了12项任务,包括物体存在性(OE)、物体交互(OI)、移动属性(MA)、自我中心导航(EN)、状态变化(SC)、场景转换(ST)、空间理解(SU)、网页问答(WQA)、教科书问答(TQA)、多模态问答(MQA)、幻灯片问答(SQA)以及文档问答(DQA)。基线模型。我们将WindowQuant与近年来几种最先进的视觉语言模型进行了性能对比,这些模型包括Video-LLaVA [22]、MovieChat+ [37]、Vista-LLaVA [29]、DeepStack-L [31]、M3 [2]、IG-VLM [18]、SF-LLaVA [45]、TS-LLAVA [33]、LLaVA-OneVision-Qwen2 [20]、Qwen2-VL [40]、InternVL2 [5]、Video-ChatGPT [30]、VideoLLaMA [47]、VideoLLaMA2 [6]、VideoChat [21]、ST-LLM [27]、PLLaVA [44]以及GPT-4V [32]。这些视觉语言模型中的大多数大型语言模型规模为70亿参数,也有少数为340亿参数。我们还将WindowQuant与基本的均匀RTN量化方法以及一些最先进的视觉语言模型量化方法进行了性能对比,这些方法包括SmoothQuant [42]、KIVI [28]和SKVQ [12]。实现方式。我们在多选题问答数据集上,针对三种著名的视觉语言模型评估了WindowQuant的性能,这三种模型分别是LlaVA-OneVision-Qwen2 [20]、Qwen2-VL [40]以及InternVL2 [5]。随后,我们又在MVBench数据集上的四种视觉语言模型上实现了WindowQuant,这四种模型分别为LLaVA-v1.5-7B、LLaVA-v1.5-13B、LLaVA-v1.6-vicuna-7B以及LLaVA-v1.6-mistral-7B [25, 26]。这些模型的原始全精度版本(即FP16版本)仅采用了标准的FlashAttention优化技术,没有使用其他额外的优化手段。所有实验都在一台配备80GB GPU内存的NVIDIA A800 GPU上开展,该GPU还搭配了一颗25核的AMD EPYC 7T83 CPU以及100GB内存。除非另有说明,否则在我们的实验中,通常将阈值参数设置为2,窗口大小设置为32,批量大小设置为1,并提取100帧视频画面。4.2 主要结果首先,我们对比了WindowQuant与各基线视觉语言模型在三种不同问答数据集上的性能表现。对于IntentVL2模型,我们的实验中只提取了25帧视频画面,因为其特征提取代码会占用大量GPU内存,若提取更多帧则会导致内存不足错误。相关结果如表1所示。(在表中,我们对本方法的结果进行了标记,以便读者更清晰地了解该方法带来的改进效果。表2和表3中也采用了相同的标记方式。)我们的WindowQuant方法在多项基准测试中都展现了显著的性能提升。在NExT-QA和EgoSchema数据集上,采用WindowQuant方法的模型取得了最佳性能。具体而言,作为一种量化技术,WindowQuant在不同基础模型上应用时都能带来一致的性能提升:在LLaVA-OneVision-Qwen2模型上,WindowQuant使得NExT-QA任务的性能从67.8提升至78.9,EgoSchema任务的性能从59.8提升至64.1,IntentQA任务的性能从64.9提升至69.4。而在Qwen2-VL模型上,WindowQuant使NExT-QA任务的性能略有下降,从75.2降至74.6,但在IntentQA任务上的性能依然保持竞争力,从88.6降至87.8。值得注意的是,采用WindowQuant的InternVL2模型取得了显著提升:NExT-QA从68.7提升至76.1,EgoSchema从48.8提升至55.8,IntentQA从67.5提升至75.9。表1. 模型、LLM大小、视觉编码器、各项指标数值Video-LLaVA7BViT-L60.537.0-Video-LLaMA27BCLIP-L-51.7-MovieChat+7BCLIP-G54.856.4-Vista-LLaMA7BCLIP-G60.7--DeepStack-L7BCLIP-L61.038.4-M37BCLIP-L63.136.858.8IG-VLM7BCLIP-L63.135.860.3SF-LLaVA7BCLIP-L64.247.260.1TS-LLaVA7BCLIP-L66.550.261.7LLaVA-OneVision-Qwen27BSigLIP67.859.864.9LLaVA-OneVision-Qwen2+WindowQuant7BSigLIP78.964.169.4Qwen2-VL7BViT-L75.254.688.6Qwen2-VL+WindowQuant7BViT-L74.653.287.8InternVL28BInternViT68.748.867.5InternVL2+WindowQuant8BInternViT76.155.875.9多选视频问答基准测试中各模型的性能比较部分数据引自TS-LLaVA[33]。随后,我们在多任务视频理解数据集MVBench上进行了性能实验。如表2所示,在所有子任务中,WindowQuant方法均表现出优异的性能,其中采用WindowQuant的InternVL2模型获得了最高的平均准确率。应用WindowQuant后,LLaVA-OneVision-Qwen2模型的平均性能也有显著提升(从59.8提升至64.1),Qwen2-VL模型的平均准确率也保持竞争力(从54.4提升至54.9),InternVL2的平均性能同样有显著提升(从53.5提升至58.2)。这些结果表明,作为量化优化策略的WindowQuant能够有效提升视频理解任务的性能,即便使用精度较低的数据。这是因为该方法采用了窗口级混合精度量化,从而成功保留了重要视频部分的精度。更为重要的是,由于模型输入包含一些冗余信息甚至噪声,我们的量化方法能够适当降低这类信息的影响,从而使模型性能优于全精度版本。不过,某些任务(如MA、MC和OE)的性能会出现下降,而其他任务则有所提升。这种差异源于不同任务对视觉Token表示精度的敏感度不同。对于那些需要细粒度、局部或短暂视觉信息的任务,WindowQuant采用的按组量化方式会使得每个窗口内的量化参数相同,这降低了Token之间的数值差异性,这种表示压缩会加剧这类任务中的量化误差,从而导致性能下降。而那些输入涉及多帧、主要依赖全局或冗余时间线索而非精确单个Token值的任务,量化误差的影响则不那么明显。此外,WindowQuant还能有效抑制噪声,突出这些场景中的稳定模式,进而提升整体性能。表2. 方法、LLM大小、视觉编码器、FAMA、MCMDOE、IOSSTSC、平均值。Video-ChatGPT7BCLIP-L62.030.520.026.023.533.035.529.526.032.7Video-LLaMA7BCLIP-G51.034.022.525.527.540.037.030.029.034.1VideoChat7BCLIP-G56.035.027.026.533.541.036.032.533.535.5VideoChat27BUMT-L83.539.023.047.566.036.565.535.049.551.1ST-LLM7BViT-G84.036.531.053.566.046.558.534.544.054.9PLLaVA7BCLIP-L55.539.526.049.058.053.551.030.541.046.6PLLaVA34BCLIP-L82.040.549.553.067.566.559.039.547.058.1GPT-4VGPT4未知72.039.040.563.555.552.011.031.046.543.5TS-LLAVA7BCLIP-L58.541.027.053.554.053.032.032.536.045.5TS-LLAVA34BCLIP-L73.546.539.047.561.066.539.042.546.552.6LLaVA-OV7BSigLIP72.036.032.040.047.942.041.529.531.560.5LLaVA-OV+WindowQuant7BSigLIP78.538.037.069.566.557.541.031.039.581.5Qwen2-VL7BViT-L81.543.035.042.055.346.559.536.033.073.5Qwen2-VL+WindowQuant7BViT-L74.653.287.8InternVL28BInternViT73.540.538.063.054.351.056.033.537.558.5InternVL2+WindowQuant8BInternViT77.035.534.570.069.146.572.033.536.562.5不同视频理解模型在MVBench数据集上的性能比较“LLaVA-OV”指的是LLaVA-OneVision-Qwen2。部分数据引自TS-LLAVA[33]。我们还比较了WindowQuant与其他VLM量化方法的性能。如表3所示,在全部四种模型上,WindowQuant的平均准确率都是最高的。在某些模型上(如LLaVA-v1.5-13B和LLaVA-1.6-mistral-7B),WindowQuant的表现也优于全精度版本。表3. 模型、方法、OEOIMAENSCSTWQATQAMQASQADQAA平均值。LLaVA-v1.5-7BFP1653.046.547.533.536.573.059.047.068.543.045.550.3RTN (INT4)46.043.547.528.535.558.543.043.562.541.537.544.4RTN (INT2)15.512.012.013.58.07.57.016.013.59.55.510.9SmoothQuant37.524.024.522.031.524.524.025.526.525.521.026.0KIVI18.016.024.020.021.516.013.018.527.519.018.019.3SKVQ35.039.014.020.040.548.524.520.554.527.013.530.6WindowQuant50.548.549.027.533.565.558.543.067.046.544.048.5LLaVA-v1.5-13BFP1646.045.050.026.537.070.564.055.074.551.046.051.4RTN (INT4)49.042.047.528.535.065.564.051.571.045.047.049.6RTN (INT2)27.012.019.511.520.08.56.515.019.514.513.015.2SmoothQuant36.026.523.021.031.025.024.027.026.525.524.526.4KIVI28.525.538.026.522.041.034.034.045.529.535.532.7SKVQ49.041.540.025.540.545.545.530.048.531.530.538.9WindowQuant47.547.050.026.536.575.065.049.570.553.047.051.6LLaVA-v.这一结果与预期一致,因为两个阈值函数f1(x)和f2(x)的曲线(见方程式(10)和(11))显示,随着α值的增大,两条曲线之间的中间区域会变宽(如图14所示),而落入该中间区域的标记正是那些被量化为INT4类型的。图13:(a)不同阈值参数α下WindowQuant的生成延迟;(b)不同阈值参数α下WindowQuant中不同位宽的标记数量。图14:不同α值下f1(x)和f2(x)的函数曲线。4.4 消融实验最后,我们通过消融实验来评估WindowQuant中三个模块的重要性。表7展示了我们测试的三种方法的配置。“模块I”指的是具有固定精度的第一个窗口,“模块II”指的是量化配置的确定,“模块III”则是指KV缓存窗口的重排序。此处,“无模块II”表示为每个窗口随机分配量化配置。我们将批量大小设置为60,从每个视频中提取5帧,并使用LLaVA-OneVision-Qwen2-7B模型在EgoSchema数据集上测试这些方法。表8显示了消融实验的结果。从表中可以看出,去掉第一个窗口的固定精度会导致模型精度略有下降,而延迟和内存使用量则有轻微提升。这是因为在这种情况下,第一个窗口也可能被量化,从而增加量化标记的数量。但由于第一个窗口非常重要,对其进行量化会降低模型精度。去掉量化配置确定功能则会导致精度下降更为明显,但延迟和内存使用量保持不变。这表明我们的量化配置确定功能在识别重要标记方面确实起着关键作用。当去掉KV缓存窗口重排序功能时,模型精度保持不变,这与我们之前得出的结论一致,即KV缓存窗口重排序不会影响精度。不过,内存使用量会有所增加,解码吞吐量也会显著下降,因为在物理上连续的内存中存在不同精度的KV缓存片段会降低硬件效率。表7. 方法模块I模块II模块III A×?? B?×? C??×WindowQuant???消融实验中每种方法的配置:“×”表示该方法没有该模块,“?”则表示该方法有该模块。表8. 方法精度(%)内存使用量(GB)解码吞吐量(tokens/s)全精度58.1 47.7 444A57.2 43.6 1276B55.2 43.7 1250C58.4 44.7 500WindowQuant58.4 43.7 1250消融实验中不同方法的精度、内存使用量和解码吞吐量我们还评估了操作符融合对延迟的影响,结果如表9所示(批量大小=20,帧数=5)。启用操作符融合后,解码单个标记的每层注意力计算延迟减少了0.43毫秒,从而使整体解码延迟降低了558毫秒。表9. 方法注意力延迟解码延迟操作符融合0.82毫秒1,640毫秒无操作符融合1.25毫秒2,198毫秒操作符融合对延迟的影响我们进一步将批量大小设置为1,帧数设置为100,以评估逐张量量化与分组量化以及不同相似度计算函数的效果。如表10所示,与逐张量量化相比,分组量化会使量化元数据的内存占用略增(约61.2MB,这一数值与量化带来的整体内存节省相比可以忽略不计),但能提升约5.5%的精度。因此,我们认为分组量化是非常值得采用的。表11对比了不同的相似度计算函数。我们评估了三种用于相似度计算的函数——皮尔逊相关系数、欧几里得距离和余弦相似度,并测试了它们的计算延迟和任务精度(批量大小=1,帧数=100)。结果显示,余弦相似度具有最低的延迟和最高的精度。因此,我们选择余弦相似度作为我们的相似度函数。表10. 量化方法精度量化元数据逐张量量化64.1% 61.4MB分组量化58.6% 0.2MB两种不同量化方法的比较表11. 相似度函数延迟精度皮尔逊相关系数55毫秒63.2%欧几里得距离49毫秒61.4%余弦相似度48毫秒64.1%不同相似度函数的比较5 相关工作5.1 KV缓存压缩过去的研究人员提出了多种压缩KV缓存的方法。有些方法建议裁剪KV缓存中的注意力模块[1, 3, 34]。例如,Shazeer[34]提出了MQA方法,该方法让所有注意力头共享同一组KV参数。还有一些方法建议从KV缓存中移除不重要的标记[15, 43, 48]。比如,Xiao等人[43]提出了streamingLLM方法,该方法仅保留最新的滑动窗口内的KV缓存以及最初的标记。Zhang等人[48]提出了Q-Hitter方法,该方法根据注意力矩阵中每个标记所在列的注意力分数之和来评估注意力的重要性。还有些人从系统层面来解决这个问题[7, 8, 19]。例如,Kwon等人[19]提出了PageAttention方法,该方法借鉴了传统操作系统的页面调度概念,通过页表将逻辑上连续的KV缓存页面映射到物理上不连续的页面上。Dao等人[8]提出了FlashAttention方法,该方法将某些复杂的运算重写为尽可能在GPU的高速SRAM中处理的格式。不过,这些方法的优化效果也不如量化方法显著。5.2 量化量化也是优化视觉语言模型内存占用和推理延迟的有效方法。早期的量化工作主要集中在对权重和激活值进行量化[9, 10, 13, 14, 23, 42]。例如,Xiao等人[42]提出了SmoothQuant方法,该方法分别对容易量化的权重和难以量化的激活值进行缩放处理。但在处理较长的输入序列时,KV缓存的大小往往会比权重和激活值还要大。因此,量化工作也扩展到了KV缓存领域[24, 28, 35, 49]。比如,Zhao等人[49]提出了Atom方法,该方法对KV缓存进行分组量化,将每个组映射为低位数,且每组拥有独立的量化参数。Liu等人[28]提出了KIVI方法,该方法对K缓存应用逐通道量化,而对V缓存则保持原有的逐标记量化方式。然而,这些将所有标记统一量化为相同位宽的量化方法无法有效保持模型精度。其他研究人员则提出了混合精度量化方法来处理重要的标记[11, 16, 17, 46]。例如,Kim等人[17]提出了SqueezeLLM方法,该方法将权重分为不含异常值的密集矩阵和包含异常值的稀疏矩阵,然后对密集矩阵应用低位数量化,而将异常值保持为FP16精度。Yang等人[46]提出了MiKV方法,该方法根据注意力分数识别不重要的标记,但选择对它们进行量化而非直接移除。Hooper等人[16]提出了KVQuant方法,该方法使用一种名为nuqX的自定义数据类型来表示混合精度量化的KV缓存。这些方法采用基于标记级的量化搜索,耗时较长,而且未能充分解决混合精度量化带来的硬件效率问题。6 结论本文介绍了WindowQuant,这是一种针对视觉语言模型推理的、具有窗口自适应能力的混合精度KV缓存量化方法。WindowQuant采用了窗口级量化搜索模块来确定视觉标记KV缓存窗口的位宽配置,同时还包含一个窗口级KV缓存计算模块,通过重新排序这些KV缓存窗口来避免硬件效率低下问题。在多个数据集和模型上的大量实验表明,WindowQuant的性能优于当前最先进的视觉语言模型及KV缓存量化方法。
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号