让大型语言模型更懂“聊天”: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 了。


0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x