智能体/生成式 AI

动态内存压缩技术

尽管大语言模型(LLMs)作为通用 AI 工具取得了成功,但其对计算资源的高需求使其在许多真实场景中的部署具有挑战性。模型的大小和对话状态受到可用高带宽内存的限制,限制了可服务的用户数量和最大对话长度。

目前,两种最热门的 LLM 架构是 Transformers 和选择性状态空间模型 (SSMs),它们位于频谱的另一端:

  • Transformer:对话状态由序列中每个元素的不同表示组成,其大小会迅速爆炸。
  • SSMs:将整个序列压缩为单个表示形式,由于容量有限,可能会忘记过去的信息。对话状态的压缩可释放内存,对于在相同内存限制下运行更大的模型、一次处理更多的 tokens 或降低延迟至关重要。

为此,NVIDIA 的研究人员开发了一项称为动态内存压缩(Dynamic Memory Compression,DMC)的新技术,该技术可以大幅提高 LLMs 部署的效率,并在不会耗尽内存的情况下将其视野扩展到更长的序列。

DMC 开启了第三种方式,即训练 Transformer 模型以自适应压缩对话状态并实现所需的压缩率。这样可以在不替换熟悉的 Transformer 架构的情况下显著减少对话状态大小。DMC 不需要从头开始训练,因为可以通过少量额外训练来改装现有模型,这比容易出错的无训练方法更可靠。

哪些因素会影响 LLM 推理性能?

LLM 推理包含两个阶段:

  • 预填充:用户查询被输入。
  • 自动回归生成:响应一次生成一个 token。

在生成过程中,为执行自注意力操作,Transformers 会为缓存中的每个 token 附加一对表示 (键值对或 KVP)。系统会为每个层和注意力头存储不同的 KVP。

因此,KVP 缓存会随序列长度按比例增长。由于 KVP 缓存必须与 LLM 权重一起装入 GPU 内存,因此 KVP 缓存可能会占用显存的大部分空间,甚至耗尽显存。

 A graph describing the rising memory usage the longer the sequence gets.
图 1、在批量大小为 32 的 bfloat16 精度下,Llama-2-7B 推理期间的 GPU 内存使用情况

此外,KVP 缓存越大,执行单个推理步骤所需的时间越长。这是因为计算注意力分数是受内存限制的运算。每个查询都有自己要加载的 KVP 缓存。

注意力层或 FFN 层的线性投影的情况则不同,如果 GPU 同时并行处理许多查询,则所有查询都必须将 每个权重矩阵从 HBM 加载到 SRAM 中一次 。

过去的研究试图通过 量化 KVP 缓存的表征、 共享 注意力头或从其中 移除令牌 来减小 KVP 缓存的大小。但是,这些方法会降低原始性能,因为它们会从内存中删除信息,而不会改变原始 LLM 的行为。

动态显存压缩 

动态内存压缩 (DMC) 是一种在推理期间压缩 KV 缓存的简单方法,不会导致性能下降。模型使用以下公式分别决定每个 token、层和头,以及是否应将新的键值对附加到 KV 缓存中 (就像在普通 Transformer 中一样),还是累加到最后一个:

k_i = \alpha k_{i-1} + k_{new_i}

这个方程是 DMC 的核心,可将密钥的子序列转换为特定的前缀和,这让人联想到 xLSTM 或 RWKV 等热门 SSM。

在推理过程中,alpha 的值严格是二进制的。当 \alpha=1 时,令牌会在不扩展 KVP 缓存的情况下直接求和,实现压缩行为。平均决策频率决定了 DMC 的压缩率。

A gif showing the difference between a vanilla transformer and a Dynamic Memory Compression model that decides if the cache should be extended or merged with the previous cache.
图 2. 在推理期间在普通 Transformer (左) 和支持 DMC 的模型 (右) 中扩展 KVP 缓存

在普通模型中,缓存一次扩展一个 KVP。借助 DMC,决策变量可确定是否应扩展缓存,还是应将新的缓存对与 KVP 缓存中的最后一个缓存对合并。

DMC 的一个关键组成部分是 改造 过程,该过程教会了 LLM 这种行为:

  • 使用 2 – 8%的原始训练数据混合训练预先存在的 LLM (例如 Llama 系列的 LLM)。
  • 初始化决策模块,以便始终将 KVP 附加到 KVP 缓存中
  • 通过对新配对与追踪配对的平均值施加压力,逐渐过渡到 DMC。在改装过程中,目标压缩率从 1x 提升到所需水平。
  • 达到目标压缩率后,进行修复,以完成改装和整合的最后步骤。

决定是否附加或合并是独立的。要使用梯度下降训练 LLMs,您可以通过 Gumbel-Sigmoid 分布持续松此决策,从而在训练期间生成部分附加和部分合并的内存元素。

为了模拟 token 无法进入中间合并阶段的推理时间 DMC (图 2),您可以增强 Transformers 的因果关系掩码,以越来越多地阻止对这些状态的访问。

Two images: the left one showing an additive attention mask used in DMC, the right one showing why the mask is necessary.
图 3、用于部分令牌遮罩的加法注意力遮罩 (左),以及需要在训练期间遮罩部分累加令牌的推理时场景 (右)

总体而言,此过程可让您在继续预训练期间避免出现困惑峰值。事实上,我们发现 像通用查询注意力(general query-attention) 这样的方法在继续预训练之前会显著改变模型架构,很难恢复原始性能。

成果 

对于我们进行基准测试的所有下游应用,包括 真实性 (MMLU)、 常识问答和编码 (HumanEval),DMC 的性能可与普通模型相比。

至关重要的是,DMC 可以与量化和 GQA 等其他 KVP 缓存缩减方法结合使用。

  DMC 压缩率 MMLU (真实性) 常识问答 HumanEval (编码)
Llama-2 -7B 1 倍 44.6 70.5 14.0
Llama-2 -7B 4 倍 44.2 70.2 16.5
Llama-2 -7B 8 倍 41.8 70.1 16.5
Llama-2 -13B 1 倍 54.5 73.5% 17.5
Llama-2 -13B 4 倍 54.2 73.2 22.0
Llama-2 -13B 8 倍 52.1 73.3% 21.3%
Llama-2 -70B+GQA 8 倍 68.8 78.0 29.6
Llama-2 -70B
*GQA
16 倍 68.8 77.9 29.9%
表 1. 原始模型(1 倍压缩率)和启用 DMC 的模型推理期间的下游任务准确性
  Llama-2 -7B+DMC 4x Llama-2-7B + DMC 4x (8 位量化) Llama-2 -7B+DMC 8x Llama-2-7B + DMC 8x (8 位量化)
(8-bit quantization)
MMLU (真实性) 44.2 44.6 41.8 41.7
表 2、支持 DMC 的模型的 MMLU 分数,并将 FP8 量化应用于权重、激活函数和 KVP 缓存

在某些情况下,性能甚至会得到提升。我们推测这是由于缓解压缩的现象,例如 中间丢失 的 tokens,不过还需要更多证据来证实这一点。

对话状态的压缩释放了内存,而内存可用于容纳更大的批量大小。由于模型受内存限制,这通常几乎直接转化为同等的吞吐量增加。

例如,选择适合内存的最大批量大小 (在 NVIDIA H100 GPU 上压缩 8 倍) 意味着每秒生成的令牌比 Vanilla 模型多 700%。

在达到一定的压缩率后,计算注意力分数会受到计算限制,因此延迟可能会增加,同时提供更多的查询。

Two graphs comparing inference throughput on both the A100 and H100.
图 4、4K 令牌序列的最后 1K 令牌生成时的推理吞吐量平均值

在图 4 中,x 轴显示了适用于 Vanilla LLM 以及 DMC 2x、4x、6x 和 8x 模型的单个 GPU (7B 和 13B) 或两个具有张量并行度 (70B) 的 GPU 上显存的最大批量大小。

如果批量大小保持不变,延迟会降低。在实践中,调整批量大小有助于优化延迟吞吐量权衡。

A graph describing the latency change as throughput increases. The larger the throughput, the greater the latency change.
图 5. 推理吞吐量 – 延迟 Pareto 前端,通过使用 DMC 8x 改变批量大小来绘制图表

在图 5 中,在特定批量大小下,模型受内存限制,可以相同延迟处理其他示例。除此之外,模型的计算能力也越来越受限。我们在 NVIDIA H100 GPU 上对 4K 令牌序列的最后 1K 令牌的生成进行了测量。

由于能够以不同的速率灵活地压缩不同的注意力头和层,DMC 还揭示了有关 LLMs 内部功能的新见解。例如,顶层受到的压缩最多,因为其 KVP 是最冗余的。

A gif showing the compression ratios for each layer and head during training.
图 6、训练期间头部 (x 轴) 和各层 (y 轴) 的平均压缩比热图

在图 6 中,头部按最高压缩级别到最低自上而下级别排列。

结束语 

DMC 有望进一步推动 LLM 的发展。

它提供了一种自适应显存机制,该机制介于 Transformer 中 的线性显存和 SSM 的常量显存之间,并能更好地在容量和空间之间进行权衡。这在不牺牲质量的情况下提高了 Transformer LLM 的吞吐量,并且能够在相同的硬件限制条件下适应更长的上下文。这对于通过思维链实现推理时扩展至关重要,因为这需要生成长序列的 token。

DMC 还开辟了新的途径,通过重新利用现有架构,以经济实惠的方式创建原型和生产级 LLM。 使用现成的代码 改造您自己的 Transformer LLM,或者阅读 论文 以深入了解 Dynamic Memory Compression。

有关更多信息,请参阅以下资源:

致谢 

在此,我们要感谢 Mostofa Patwary 和 Szymon Migacz 所提供的帮助,并感谢 Przemysław Strzelczyk、Daniel Korzekwa 和 Bryan Catanzaro 在发表此论文时提供的有益讨论和支持。这项工作得到了 UKRI Centre for Doctoral Training in Natural Language Processing 的部分支持,该中心由 UKRI (grant EP/S022481/1) 和爱丁堡大学信息学学院以及哲学、心理和语言科学学院提供资金。

 

标签