分类: 🌏

  • 长文本大模型:一场新的军备竞赛

    近年来,人工智能领域掀起了一股大模型热潮,而最近,长文本大模型的出现,更是将这场军备竞赛推向了新的高度。

    Kimi Chat的横空出世,让业界意识到长文本大模型的巨大潜力。它能够处理高达200万字的上下文,这在以往是难以想象的。

    百度文心一言也紧随其后,宣布下个月版本升级,将开放200万-500万字的长度。360智脑更是内测500万字,并计划将其整合到360AI浏览器中。阿里通义千问也开放了1000万字的处理能力。

    海外方面,GPT4-turbo支持128K长度,Claude也支持200K. ��

    这场长文本大模型的竞赛,究竟意味着什么?

    长文本:大模型的“内存”

    我们可以将大模型本身看作一个操作系统,它支持的文本上下文长度就如同操作系统的内存。内存越大,大模型一次性能够处理的信息就越多,也就能更好地理解和处理复杂的文本内容。

    以往的大模型,由于内存有限,只能通过实时读写硬盘获取信息,类似于RAG(Retrieval-Augmented Generation)技术。这种方式需要先进行检索,提取相关信息,再进行处理和输出答案。

    长文本大模型的出现,则意味着大模型拥有了更大的“内存”,能够直接处理更长的文本,无需依赖外部检索,从而提高效率和准确性。

    长文本处理:两条路

    目前,长文本处理主要分为两种方式:

    • 有损压缩:对上下文进行压缩,以减少内存占用。
    • 无损工程化硬怼:通过工程优化,尽可能保留原始信息。

    Kimi号称其200K超长上下文是无损实现,但具体的技术方案尚未公开。

    工程优化:突破瓶颈

    如何实现无损超长上下文? 这成为了众多研究者关注的焦点。

    知乎上的一些技术方案推测,主要集中在工程优化方面,例如:

    • 优化内存管理:利用更先进的内存管理技术,例如KV Cache,来提高内存利用率。
    • 优化Attention计算:例如Flash Attention和Ring Attention,利用GPU硬件特性或分布式计算,降低计算量和内存占用。

    Dr.Wu在知乎上的回答非常精辟:“这个领域的研究十分割裂,容易出现NLP领域的paper一顿优化,kv cache一点没变,去优化那个attention的计算量,找错了瓶颈……”

    以往的优化主要集中在算法层面,例如对Attention机制进行改进,以减少计算量。但这些方法往往会导致信息丢失,属于有损压缩。

    Full Attention仍然是主流的计算方式,但其计算量巨大,尤其是对于长文本而言。

    Full Attention:计算量之殇

    Attention机制的计算公式如下:

        \[Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V\]

    其中,Q. ��K、V分别由文本输入向量乘以对应权重矩阵产生,维度为[seq_length, dim]。

    当上下文长度很长时,seq_length会非常大,导致QK^T矩阵的维度也极其庞大,需要大量的内存空间来存储,并进行后续计算。

    优化方案:Flash Attention & Ring Attention

    Flash Attention利用GPU硬件特性,将计算尽可能地在SRAM这一层完成,降低GPU内存读取/写入。

    Ring Attention则采用分布式计算,将Q. ��K、V矩阵分割到不同的硬件上,分别计算Attention,最后进行聚合,避免创建庞大的矩阵,从而降低内存占用和计算量。

    长文本大模型:未来可期

    长文本大模型的出现,为我们打开了新的视野。它不仅能够处理更长的文本,还能更好地理解和分析复杂的信息。

    未来,随着技术的发展,长文本大模型将会在更多领域发挥重要作用,例如:

    • 更精准的机器翻译:能够理解更长的上下文,翻译更加准确自然。
    • 更强大的对话系统:能够进行更深入的对话,理解更复杂的语境。
    • 更有效的文本摘要:能够提取更准确、更完整的文本信息。

    长文本大模型的未来充满希望,让我们拭目以待!

    参考文献

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


人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 知差(chai)网
快取状态: No
内存使用量: 9.1303 MB
资料库查询次数: 2
页面产生时间: 0.286 (秒)