AI 大模型给人类生活带来了便利,但其在处理长文本的时候,存在一个被大多数人忽略的代价。当你把一篇十万字的文档交给它,仅仅是把所有内容记住这件事就要占用几十个 G 的显存。普通显卡基本装不下,就算勉强装下了,推理速度也会慢得让人无法接受。
近日,英属哥伦比亚大学和微软研究院的研究人员研发了一种名为 SeKV 新方法,共同作者之一是武汉大学本科校友、牛津大学博士毕业生、目前在微软研究院担任高级研究员的何宇航(音)。
该方法把长文本处理时的显存占用减少了一半以上,同时模型的回答准确率基本不受影响。在 128K 长度的文本上,显存占用比完整缓存减少了一半以上。在只使用原来十分之一显存的条件下,准确率比现有的语义压缩方法平均提高了接近六个百分点。
更重要的是,本次方法不依赖更贵的硬件,也不需要重新训练大模型,它只是在现有模型上增加了一个低于万分之五参数的小模块,就能实现上述性能。这意味着,假如你手里有一块 24G 显存的消费级显卡,原本跑不动 100K 以上的长文本,用了 SeKV 方法之后可以跑接近 300K。
这一方法旨在解决大模型在处理长文本的如下瓶颈,大模型在阅读文章的时候,会将每一个词的键值对缓存下来,留着生成回答内容的时候反复使用。这个缓存是必要的,没有它模型就会忘记前面到底读过了什么。
但是它有一个致命的缺点,它会随着文本长度发生线性增长。当文章从一万字变成十万字,缓存占用也会从几个 G 变成几十个 G,而这个增长是乘法式的增长,这就导致显卡显存的增长速度远远赶不上文本长度的增长速度。
以往的解决办法大多是在做取舍,有些方法干脆扔掉一部分缓存,只剩下最近出现的内容或者看起来最重要的词,这样做确实可以省显存,但是一旦扔掉了后面就再也找不回来了。
如果你要问的问题恰恰和被扔掉的那段文字有关,这时模型就只能靠猜了。还有一些方法把缓存压缩成摘要,但是压缩决策在做完阅读的那一刻就给框死了,当在后面发现需要细节的时候,就再也解不回来了。
SeKV 换了一条路径,它是把内容按照语义切分成段落,每个段落只留下一个浓缩的摘要放在显卡里用于快速检索,原文的详细内容被压缩之后放在了 CPU 内存里,当模型发现某个段落和当前提问有关的时候,它会再从 CPU 里把详细数据调出来。
这个办法无需扔掉任何信息,所有的文字依然都在,只不过大部分时间处于压缩状态,显卡里只放着摘要和少数的关键锚点。打个比方,很多人都去图书馆借过书,一般书架上只有目录和索引,为了找到需要的哪一本,有时需要先在图书馆的电脑上查出来位置,有时需要问真人图书管理员。
在本次方法里,那些语义边界上的关键锚点就像书的封面和标题,永远摆在了显眼的位置,这就好比你是去商场里的网红书店找书,书店为了卖书都会将书封面摆出来,这种情况下自然也就方便找书。
把详细内容压缩到二十分之一体积但却不丢失核心信息,依靠的是奇异值分解,这是一种从数据里提取主要特征的数学策略,每一个段落的键值矩阵被分解成为三个小矩阵,只留下最重要的几十个成分。
当需要恢复某个段落的时候,只需要把这三个小矩阵乘回去,就可以得到一个足够接近原始内容的近似版本。如果你平时也进行内容创作,可能有过把自己的文章链接生成一个二维码的经历,受众在需要看内容的时候,用手机扫一下就能看。上述恢复某个段落的过程,和把文章生成二维码的过程在原理上是一样的。
在本次研究之中,整个系统仅需要训练一个很小的路由模块,由此就能学到如何判断哪些段落跟当前问题相关,参数数量仅有基础模型的万分之五,在八张 A100 显卡上训练两到六个小时就可以完成,还能直接用在现有的大模型上,完全无需重新训练或者微调。
从实际应用场景来看,这项技术将能带来以下好处:无论是律师或法务要审阅几百页的合同,无论是科研党要通读几十篇论文,亦或是小说迷想让 AI 帮忙总结一本长篇小说,这些需求将不会在面临被卡在显存上的问题,SeKV 为它们提供了一个可行的中间方案,能够通过牺牲少量精度换取成倍的显存节省,将这道门槛往下削了一截。
参考资料:
相关论文https://arxiv.org/pdf/2606.31145
https://www.linkedin.com/in/yuhang-he-7b20344b/
排版:胡巍巍
注:封面/首图由 AI 辅助生成