• 本地部署 streaming-llm


    streaming-llm 是什么

    streaming-llm 可以部署实现无限长度的输入大语言模型,而不会牺牲效率和性能。

    streaming-llm 通过仅保留最新的令牌和注意力池,丢弃中间令牌来解决“处理无限长度的输入”的问题。这使得模型能够从最近的标记生成连贯的文本,而无需重置缓存。

    streaming-llm github 地址

    https://github.com/mit-han-lab/streaming-llm

    streaming-llm 的关注点

    在流式应用程序中部署大型语言模型(LLMs),如多轮对话,其中需要长时间的交互,是迫切需要的,但面临两个主要挑战。首先,在解码阶段,缓存先前令牌的关键和值状态(KV)会消耗大量内存。其次,流行的LLMs 不能推广到比训练序列长度更长的文本。窗口注意力,只缓存最近的KV,是一种自然的方法,但我们发现当文本长度超过缓存大小时,它会失败。我们观察到一个有趣的现象,即“注意力漏底”,即保留初始令牌的KV将大大提高窗口注意力的性能。在本文中,我们首先证明了注意力漏底的出现是由于对初始令牌的强烈关注得分,即使它们在语义上并不重要。基于上述分析,我们引入了StreamingLLM,这是一个高效的框架,使LLMs在有限长度的注意力窗口下训练,而无需任何微调即可推广到无限序列长度。我们展示了StreamingLLM可以使Llama-2、MPT、Falcon和Pythia在高达400万个令牌或更多的情况下执行稳定和高效的语言建模。此外,我们发现在预训练期间添加一个专用的注意力漏底令牌可以进一步改善流式部署。在流式设置中,StreamingLLM 的性能超过了滑动窗口重新计算基线,速度提升高达22.2倍。

    部署 streaming-llm

    克隆代码,

    git clone https://github.com/mit-han-lab/streaming-llm.git; cd streaming-llm
    
    • 1

    创建虚拟环境,

    conda create -n streaming-llm python=3.10.12 -y
    conda activate streaming-llm
    
    • 1
    • 2

    安装依赖库,

    pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
    pip install transformers==4.33.0 accelerate datasets evaluate wandb scikit-learn scipy sentencepiece
    
    python setup.py develop
    
    • 1
    • 2
    • 3
    • 4

    环境配置

    python setup.py develop
    
    • 1

    运行 Streaming Llama Chatbot

    python examples/run_streaming_llama.py  --enable_streaming
    
    • 1

    常见问题

    1. 对于 LLMs 来说,“处理无限长度的输入”意味着什么?

    使用 LLMs 处理无限长度的文本是有挑战的。值得注意的是,存储所有先前的键和值 (KV) 状态需要大量内存,并且模型可能难以生成超出其训练序列长度的文本。 StreamingLLM 通过仅保留最新的令牌和注意力池,丢弃中间令牌来解决这个问题。这使得模型能够从最近的标记生成连贯的文本,而无需重置缓存——这是早期方法中没有的功能。

    1. LLM 的上下文窗口(context window)是否扩大了?

    不会。上下文窗口保持不变。仅保留最新的令牌和注意力池,丢弃中间的令牌。这意味着该模型只能处理最新的令牌。上下文窗口仍然受到其初始预训练的限制。例如,如果 Llama-2 使用 4096 个令牌的上下文窗口进行预训练,则 Llama-2 上 StreamingLLM 的最大缓存大小仍为 4096。

    1. 我可以将大量文本(例如书籍)输入到 StreamingLLM 中进行摘要吗?

    虽然您可以输入很长的文本,但该模型只会识别最新的标记。因此,如果一本书是输入,StreamingLLM 可能只会总结结论段落,这可能不是很有洞察力。正如前面所强调的,我们既不扩大 LLMs 的上下文窗口,也不增强他们的长期记忆。 StreamingLLM 的优势在于从最近的标记生成流畅的文本,而无需刷新缓存。

    1. StreamingLLM 的理想用例是什么?

    StreamingLLM 针对流应用程序进行了优化,例如多轮对话。它非常适合模型需要持续运行而不需要大量内存或依赖于过去数据的场景。一个例子是基于 LLMs 的日常助理。 StreamingLLM 将使模型持续运行,根据最近的对话做出响应,而无需刷新其缓存。早期的方法要么需要在会话长度超过训练长度(丢失最近的上下文)时重置缓存,要么根据最近的文本历史记录重新计算 KV 状态,这可能非常耗时。

    1. StreamingLLM 与上下文扩展的最新工作有何关系?

    StreamingLLM 与最近的上下文扩展方法正交,并且可以与它们集成。在 StreamingLLM 的上下文中,“上下文扩展”是指使用更大的缓存大小来存储更新的令牌的可能性。有关实际演示,请参阅 streaming-llm 论文中的图 9,其中我们使用 LongChat-7B-v1.5-32K 和 Llama-2-7B-32K-Instruct 等模型实现 StreamingLLM。

    完结!

  • 相关阅读:
    LeetCode(力扣)53. 最大子数组和Python
    行业报告 | 智慧三角:长三角掀起AI产业热潮
    .NET性能优化-推荐使用Collections.Pooled
    从mysql 数据库表导入数据到elasticSearch的几种方式
    Python获取免费代理IP,并全部测试一遍,结果大失所望
    Mac上使用Royal TSX快速连接到OCI主机
    【好玩的开源项目】Docker部署cook菜谱工具
    【数据结构(二)】队列(2)
    Mybatis plus注解@TableField详解
    计算机毕业设计Java校园失物招领系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://blog.csdn.net/engchina/article/details/134082751