24年2月加拿大华为的论文“Beyond the Limits: A Survey of Techniques to Extend the Context Length in Large Language Models”。
该综述对旨在延长LLM序列长度的最新技术和方法进行包容性回顾,从而增强他们的长上下文理解能力。 特别是,回顾和分类广泛的技术,包括架构修改,例如修改的位置编码和改变的注意机制,这些技术旨在增强较长序列的处理,同时避免计算要求的成比例增加。 本研究中多种方法可以在LLM的不同阶段(即训练、微调和推理)中利用。 这使得LLM能够有效地处理扩展序列。 最后讨论当前方法的局限性以及对未来研究方向的建议,强调序列长度在LLM持续发展中的重要性。
如图是长上下文LLM的分类,包括五个不同的部分:长度外推、注意近似、无注意transformer、模型压缩和硬件-觉察Transformer。 还建立各种方法及其相关适用场景之间的联系。 有些需要从头开始训练新模型,有些需要微调预训练的模型,有些需要在不更新超参的情况下实现推理。
位置外推法和插值法成为扩展模型能力的关键方法,可以处理比LLM最初训练序列更长的序列。 此外,上下文窗口分割和滑动是一种关键技术,可将输入序列变成较小的片段或移动上下文窗口以处理较长的序列。 另外,提示压缩策略,是一种在保留基本信息的同时有效压缩输入提示的方法。
位置外推和插值是指调整与输入tokens相关的位置嵌入 (PE) 的技术,从而修改这些tokens在模型架构中的定位和解释方式。 PE 在 Transformer 模型的架构中发挥着关键作用,因为它们赋予输入tokens至关重要的意义,使模型能够识别序列中每个token的特定位置。 这确保模型可以有效地捕获和利用输入数据中固有的顺序信息。
位置外推是指模型处理超过其训练长度输入序列的能力,从而能够保留扩展序列的上下文和连贯性。 此功能对于负责理解和生成冗长文档或对话的模型至关重要。另一方面,位置插值涉及模型在现有序列中插入或集成新信息的熟练程度。
基于 Transformer 的 LLM 本质上受到有限的上下文窗口的限制,使得它们无法直接集成或利用长序列中的全部信息。 为了减轻这种限制,人们开发了各种方法来将输入划分为多个片段,并应用滑动窗口方法来管理上下文。
提示压缩是指在保留重要信息的同时缩短原始提示的方法。 提示压缩过程通过压缩大量提示输入或通过学习获取提示的简洁表示来加快 LLM 输入的处理。
注意近似的基础在于降低普通自注意的计算和记忆复杂性,其相对于序列长度 n 呈二次方增加,即 O(n^2)。 这可以通过用低秩版近似全秩注意图、利用注意层中的稀疏模式或解构普通注意的与softmax相关的复杂性以获得简化但有效的近似来实现。
低秩分解方法可以通过减少矩阵中的参数量来使注意计算更加有效。解决 Transformer 中自注意模块的计算和内存挑战的另一种策略是利用稀疏模式。
普通注意的功效通常归因于 softmax 操作,它是捕获远程依赖关系的重要元素。 然而,此操作在时间和空间上引入了二次复杂性,阻碍Transformer无缝扩展和/或将长序列tokens作为输入。 Softmax 运算的替代有可能降低计算复杂性,为提高处理大量tokens序列的效率铺平道路。 这类方法称为无 softmax 注意。
无注意Transformer是指在不依赖传统注意机制的情况下提供tokens之间依赖信息的计算方法。 这些机制为依赖计算提供了不同的视角,同时保持次二次的内存复杂性。 其中有两个不同的子类别,即状态空间模型(SSM)和位置依赖注意。
SSM 是一种统计序列-到-序列 (seq2seq) 模型,它采用隐藏状态的线性投影来根据输入序列计算输出序列。 SSM引入类似RNN的seq2seq模型,没有非线性,可以实现并行训练并优化推理效率。 基于状态的 seq2seq 操作可以展开,类似于具有参数化内核的卷积操作。 理论上,与 RNN 类似,这种卷积运算可以扩展到无限长度,从而无需计算各个状态即可计算输出。 在使用整个输入序列的训练阶段,该卷积过程可以异常快速且并行,这使其与传统的 RNN 不同。
位置相关注意在这个独特的类别中,出现一种独特的依赖计算形式,其中依赖取决于tokens的位置而不是它们之间的交互。
另一种可以使 LLM 支持更长序列的方法是模型压缩。 各种模型压缩方法都有不同的重点。 有些人专注于通过消除冗余权重来最小化 LLM 架构的大小,从而减少计算和内存需求。 其他一些人优先考虑降低计算精度以减轻计算复杂性。 此外,某些方法强调提高内存效率和优化数据存储方法。
量化被认为是提高通用神经网络的计算时间和能量效率的有前途方法。 此外,神经网络足够强大,可以量化为较低的位带宽,对网络精度的影响相对较小。 这提供利用量化来降低 LLM 复杂性的想法,从而使它们能够支持更长的输入序列。 根据量化实施的阶段,LLM的量化技术可以分为量化感知训练(QAT)和训练后量化(PTQ)。
剪枝是指删除对模型不太重要的冗余参数来减小 LLM 的大小。 剪枝可以帮助优化模型的部署,并使模型在计算复杂度和内存使用方面更加高效。 因此,剪枝可以被认为是一种使语言模型能够支持更长的序列长度同时保持所需的复杂性和性能的方法。 一般来说,模型剪枝可以分为结构化剪枝和非结构化剪枝。
虽然多头注意已经证明了其在表征tokens之间相关性方面的有效性,但由于随输入序列长度增加造成重复加载大 KV 张量,在推理过程中它受到了增加的内存带宽成本和更长延迟的影响。
应对LLM中长序列带来的挑战,可行的解决方案包括算法适配硬件、提高效率并能够处理更长的序列。 为了解决 IO-觉察、资源管理、多设备分布式注意和内存管理的不同方面,讨论不同的方法。
像 Transformer 这样的深度神经网络模型中的一个关键问题是不断需要对内存进行读/写操作。所以需要IO-觉察的处理解决方案,比如FlashAttention。
不过这种IO-觉察方法并不只适用于基于注意的Transformer; 类似的技术已被应用于加速 SSM。 由于线性可扩展性和卷积实现的可行性,SSM 成为 Transformer 的替代,但在训练期间卷积主导的计算时间方面提出挑战。
FlashAttention 和 BPT 都利用 GPU 中不同的流式多处理器 (SM) 来并行处理不同的块。 然而,SRAM 的有限大小对序列长度施加了限制。 在多个 GPU 上分配注意计算可以扩展来适应很长的序列,比如Ring Attention。
有效的内存管理对于LLM至关重要,尤其是在自回归推理阶段。 针对每个请求重复顺序生成tokens会导致内存限制的工作负载,从而限制 GPU 利用率和服务吞吐量。 为了提高吞吐量,批处理多个请求需要高效的内存管理,特别是KV缓存。 KV 缓存增长的动态性质及其不可预测的生命周期需要自适应策略,在不同的上下文长度下实现最佳内存利用率。
模型复杂性、处理速度和准确性之间的权衡仍然是长序列 LLM 设计和实现的关键考虑因素。 未来的研究可以集中于进一步优化LLM的架构,提高其处理长序列的效率。 创新可能涉及开发注意机制或网络结构,这些机制或网络结构可以更有效地处理长序列,同时不增加计算成本。 此外,将LLM与外部知识相结合可以提高他们理解和生成更长连贯且上下文准确的序列的能力。 在语言生成过程中探索有效的知识整合和检索方法也将是有益的。 此外,可以研究新的训练方法,以提高模型理解和保留较长序列信息的能力。 诸如课程学习之类的技术,即模型在训练过程中逐渐接触越来越长的序列,可能是一个值得探索的方向。 最后但并非最不重要的一点是,还需要全面的基准测试和评估框架,以准确检查LLM处理长序列的能力。 这包括创建专门挑战LLM长上下文处理能力的数据集。