法学硕士如何用有限的内存处理无限的上下文

用 114 倍更少的内存实现无限上下文《法学硕士如何使用有限内存处理无限上下文》一文首先出现在《走向数据科学》上。

来源:走向数据科学

1. 简介

两年来,我们见证了 AI 语言模型中序列长度的竞赛。我们逐渐从 4k 上下文长度发展到 32k,然后是 128k,再到 Gemini 1.5 pro 等模型首次承诺的巨大 100 万代币窗口。这个承诺很诱人:将整个代码库或小说转储到模型中,并让它对整个事物进行推理。

但是,这种几乎“无限”的上下文长度有一个很少被提及的隐性成本:内存。

在标准 Transformer 架构中,整个提示的记忆和推理并不是免费的。随着输入序列的增长,模型必须存储每个标记的键和值 (KV) 状态以计算注意力分数。对于 100 万个令牌序列,该 KV 缓存可以快速增加到数百 GB,这反过来又需要跨多个数据中心的大型 GPU 集群,所有这些都只是将会话保存在内存中。

2. 动机

在标准注意力机制中(Vaswani et al., 2017),模型生成的每个新标记都需要“回顾”提示中之前的每个标记,以充分理解上下文。为了使多代高效,该模型将先前令牌的键 (K) 和值 (V) 向量缓存在 GPU VRAM 中。这称为 KV 缓存。

线性增长陷阱

虽然缓存键和值向量(KV 缓存)可以节省时间(因为我们不必为每个新标记重新计算过去),但它具有巨大的内存占用量,并且随着输入序列长度线性增长。

换个角度来看:在只有 20,000 个令牌的上下文中存储标准 500B 参数模型的 KV 缓存需要大约 126GB 内存。如果我们将其扩展到现代 LLM 1T+ 参数的参数数量,并在任何给定时间为数百万用户提供服务,那么总内存占用将成为一个天文数字。

从历史上看,我们有两种处理顺序数据的方法,但都不是完美的:

3. 解决方案:无限注意力