Skip to content

StreamingLLM:让大语言模型拥有无限长生成能力

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 什么是 StreamingLLM?

StreamingLLM 是一种高效的流式语言模型推理方法,其核心思想是让大语言模型在不牺牲推理速度和生成效果的前提下,支持无限长度的流式文本输入与生成。

  • 论文Efficient Streaming Language Models with Attention Sinks
  • 论文地址https://arxiv.org/pdf/2309.17453.pdf
  • 核心能力:可实现超过 400 万个 token 的流式输入,相比带重计算的滑动窗口注意力机制实现 22.2 倍的速度提升

提示:StreamingLLM 不需要重新训练模型,可直接兼容目前的主流大语言模型并改善推理性能。

2. 为什么需要 StreamingLLM?

传统大语言模型在长文本处理中面临以下核心挑战:

问题描述
上下文长度限制LLM 在预训练期间只能在有限的注意力窗口下训练,难以处理超长上下文
KV Cache 内存膨胀多轮对话场景下,key 和 value 的缓存会消耗大量显存,无法无限扩展
泛化能力不足二次微调后的模型无法很好地泛化到比训练序列长度更长的文本
用户体验影响上下文长度限制直接影响 ChatGPT 等应用与用户互动的质量

3. StreamingLLM 的核心思路是什么?

3.1 Attention Sink 现象

通过观察注意力模块中 Softmax 的输出,研究者发现了 attention sink(注意力沉陷) 现象:

  • 注意力机制会为每一个 token 分配一个注意力值
  • 文本最初的几个 token 总是会被分配到大量无用的注意力
  • 当使用滑动窗口注意力机制时,一旦这几个初始 token 被踢出窗口,模型生成效果会迅速崩溃
  • 只要一直保留这几个 token 在窗口内,模型就能稳定生成高质量文本

3.2 核心机制

┌──────────────────────────────────────────────┐
│  KV Cache 结构(窗口大小 = 10)               │
├──────────────────────────────────────────────┤
│  [初始token] [初始token] [中间token...]      │
│  ↑ 蓝色: 始终保留    ↑ 黄色: 动态踢出/新增   │
└──────────────────────────────────────────────┘
  • 始终保留文本开始的几个 token(attention sink tokens)
  • 随着新 token 生成,踢出窗口中间的旧 token
  • 由于 token 位置会发生变化,计算注意力时需要重新注入位置信息

注意:StreamingLLM 不会直接提高模型能访问的上下文窗口大小,而是能够在支持流式超多轮对话的同时保证模型的生成效果。

4. StreamingLLM 与其他注意力机制对比

注意力机制计算复杂度生成效果无限长度支持
Dense Attention(密集注意力)不支持
Window Attention(窗口注意力)差(窗口溢出后崩溃)不支持
Sliding Window w/ Re-computing中(需重计算)支持(但慢)
StreamingLLM(Attention Sink)支持

5. StreamingLLM 的优点

  1. 无限长度流式输入:可可靠地实现超过 400 万个 token 的流式输入
  2. 推理速度提升:比带重计算的滑动窗口注意力机制高出 22.2 倍的速度提升
  3. 无需重新训练:直接兼容主流大语言模型
  4. 生成质量稳定:在不牺牲生成效果的前提下实现长文本处理
  5. 即插即用:改善推理性能,无需修改模型权重

6. 总结

StreamingLLM 通过发现和利用 attention sink 现象,巧妙地解决了大语言模型在长文本处理中的核心瓶颈。其核心创新在于:

  • 保留初始 token 作为注意力锚点
  • 动态滑动窗口管理中间 token
  • 重新注入位置信息以适应 token 位置变化

该方法为大模型多轮对话推理提供了低成本、高效率的解决方案,是流式推理领域的重要突破。