3 月 19 日下午 2 点,锁定 NVIDIA 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) 和爱丁堡大学信息学学院以及哲学、心理和语言科学学院提供资金。

 

标签