分类: 未分类

  • 让大型语言模型更懂“聊天”:StreamingLLM 的无限对话

    大型语言模型(LLM)已经彻底改变了人们的工作方式。以 GPT 系列模型为例,它被广泛应用于各种场景,帮助我们快速解答问题、调试代码等等,成为了许多应用的得力助手。

    然而,LLM 在实际应用中也面临着挑战。其中一个重要问题是,现有的 LLM 不适合用于流式应用,例如长时间的对话聊天。这是因为 LLM 在训练时会受到注意力窗口的限制,无法处理超过预定义训练序列长度的对话。此外,LLM 还会消耗大量的内存,这在实际应用中也是一个很大的问题。

    为了解决这些问题,研究人员提出了 StreamingLLM 框架。

    StreamingLLM:突破传统 LLM 的限制

    StreamingLLM 是由 Xiao 等人于 2023 年提出的一种框架,旨在解决流式应用中的问题。现有的方法之所以面临挑战,是因为 LLM 在预训练时会受到注意力窗口的限制。

    窗口注意力技术虽然效率很高,但在处理超过缓存大小的文本时就会失效。为了解决这个问题,研究人员尝试将几个初始 token 的键值对(KV)与最近的 token 结合起来,并将其称为“注意力汇聚”。下图展示了 StreamingLLM 与其他技术的对比:

    [StreamingLLM vs Existing Method (Xiao et al. (2023))]

    我们可以看到,StreamingLLM 利用注意力汇聚方法来解决挑战。注意力汇聚(初始 token)用于稳定注意力计算,并与最近的 token 结合起来,从而提高效率并在更长的文本上保持稳定性能。

    此外,现有的方法在内存优化方面也存在问题。然而,LLM 通过在最近 token 的键值对上维护一个固定大小的窗口来避免这些问题。作者还提到,StreamingLLM 比滑动窗口重新计算基线快 22.2 倍。

    从性能方面来看,StreamingLLM 在基准数据集上的准确率远超其他方法,如下表所示:

    [StreamingLLM accuracy (Xiao et al. (2023))]

    上表表明,StreamingLLM 的准确率可以超过其他方法。因此,StreamingLLM 在许多流式应用中具有巨大的潜力。

    如何尝试 StreamingLLM?

    您可以访问 StreamingLLM 的 GitHub 页面,将代码库克隆到您的目标目录,并在 CLI 中使用以下代码设置环境:

    conda create -yn streaming python=3.8
    conda activate streaming
    
    pip install torch torchvision torchaudio
    pip install transformers==4.33.0 accelerate datasets evaluate wandb scikit-learn scipy sentencepiece
    
    python setup.py develop

    然后,您可以使用以下代码运行带有 LLM 流式解码功能的 Llama 聊天机器人:

    CUDA_VISIBLE_DEVICES=0 python examples/run_streaming_llama.py  --enable_streaming

    下图展示了 StreamingLLM 在更长的对话中的表现:

    [StreamingLLM showed outstanding performance in more extended conversations (Streaming-llm)]

    总结

    在流式应用中使用 LLM 可以帮助企业在长远发展中获得优势,但实现起来也面临着挑战。大多数 LLM 无法超过预定义的训练序列长度,并且会消耗大量的内存。Xiao 等人 (2023) 开发了一个名为 StreamingLLM 的新框架来解决这些问题。使用 StreamingLLM,现在可以在流式应用中使用 LLM 了。


  • 大型语言模型的无限对话:StreamingLLM 如何实现高效流式解码

    大型语言模型(LLM)已经成为自然语言处理领域不可或缺的一部分,但它们在处理长文本时却面临着巨大的挑战。传统的 LLM 在解码过程中需要缓存所有先前解码的 token 的键值对(KV),这会导致内存占用量随着对话长度的增加而线性增长,并且模型的性能也会受到限制。

    StreamingLLM 应运而生,它是一种高效的框架,可以使 LLM 在不进行任何微调的情况下,将有限长度的注意力窗口推广到无限序列长度,从而实现高效的流式解码。

    窗口注意力的瓶颈:为什么需要 StreamingLLM?

    为了解决传统 LLM 解码过程中的内存占用和性能下降问题,研究人员提出了窗口注意力机制,它只缓存最近的 KV,从而减少了内存占用。然而,当文本长度超过缓存大小时,窗口注意力机制就会失效。

    StreamingLLM 的核心思想是利用注意力汇聚(Attention Sink)现象。研究人员发现,即使一些初始 token 在语义上并不重要,但模型仍然会对它们保持很强的注意力。这种现象被称为注意力汇聚。

    Attention Sink 的发现:解开窗口注意力的秘密

    通过分析 LLM 在处理长文本时的注意力机制,研究人员发现了一个有趣的现象:模型会将大量的注意力集中在初始 token 上,即使这些 token 在语义上并不重要。他们将这种现象称为“注意力汇聚”。

    为什么会出现注意力汇聚? 这是因为 Softmax 函数的特性,它要求所有上下文 token 的注意力分数之和为 1。即使当前查询在许多之前的 token 中没有强匹配,模型仍然需要将这些不必要的注意力值分配到某个地方,以使它们加起来为 1。

    初始 token 成为注意力汇聚的原因也很直观: 由于自回归语言模型的特性,初始 token 对所有后续 token 都可见,而后续 token 只能对有限的后续 token 可见。因此,初始 token 更容易被训练成注意力汇聚,从而捕获不必要的注意力。

    StreamingLLM 的工作原理:高效利用注意力汇聚

    StreamingLLM 框架基于以下几个关键原则:

    • 保留注意力汇聚: 保留初始 token 的 KV,以弥补窗口注意力机制的不足。
    • 滑动窗口: 使用滑动窗口机制,只缓存最近的 token 和注意力汇聚,从而减少内存占用。
    • 预训练优化: 在预训练过程中添加一个占位符 token 作为专门的注意力汇聚,进一步提高流式部署的性能。

    StreamingLLM 的优势:高效、稳定、无需微调

    • 高效的流式解码: StreamingLLM 可以实现高效的流式解码,即使在处理非常长的文本时,也能保持良好的性能。
    • 无限序列长度: StreamingLLM 可以处理无限长度的文本,突破了传统 LLM 的限制。
    • 无需微调: StreamingLLM 不需要对 LLM 进行任何微调,就可以实现高效的流式解码。

    实验结果:实证验证 StreamingLLM 的有效性

    研究人员对多个流行的 LLM 家族(包括 Llama-2、MPT、Falcon 和 Pythia)进行了实验,结果表明:

    • StreamingLLM 在处理长文本时,其性能与滑动窗口重新计算基线相当,而传统的窗口注意力机制则会失效。
    • StreamingLLM 可以处理超过 400 万个 token 的文本,并且在处理超长文本时仍然保持稳定。
    • 在预训练过程中添加一个专门的注意力汇聚 token 可以进一步提高 StreamingLLM 的性能。

    StreamingLLM 的应用场景:无限对话、实时翻译、文本摘要

    StreamingLLM 在许多场景中都有广泛的应用,例如:

    • 多轮对话: StreamingLLM 可以用于构建高效的聊天机器人,实现流畅的对话交互。
    • 文本摘要: StreamingLLM 可以用于对长文本进行摘要,并保留关键信息。
    • 实时翻译: StreamingLLM 可以用于实时翻译,提供流畅的翻译体验。

    未来展望:更强大、更智能的流式解码

    StreamingLLM 的出现为 LLM 的流式应用开辟了新的可能性。未来,研究人员将继续探索如何进一步优化 StreamingLLM 框架,使其在更多场景中发挥更大的作用。


    https://arxiv.org/pdf/2309.17453

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 9390 | UV: 4302
Last updated: 2025-07-27 13:46:54
沪ICP备2024052574号-1