你正在参加OpenAI的研究科学家面试。 面试官问: “你将如何将LLM的上下文长度从2K扩展到128K个token?” 你:“我将对模型进行微调,以适应128K上下文的更长文档。” 面试结束。 你错过了以下内容:
扩展上下文窗口不仅仅是关于更大的矩阵。 在传统的变换器中,将令牌扩展8倍会由于注意力的平方复杂性使内存需求增加64倍。请参见下面的图像! 那么,我们该如何管理呢? 继续...👇
1) 稀疏注意力 它通过以下方式将注意力计算限制在一部分标记上: - 使用局部注意力(标记仅关注其邻近标记)。 - 让模型学习关注哪些标记。 但这在计算复杂性和性能之间存在权衡。
在ModernBERT中使用了类似的想法。 → 每第三层进行全局注意 → 其他层进行局部注意(128个token) 结果: - 序列长度增加16倍 - 性能大幅提升 - 最具内存效率的编码器 简单而强大。👇
以下是论文中提到的一个直观解释: 想象一下你在读一本书。对于你阅读的每一句话,你是否需要完全了解整个情节才能理解大部分内容(全局注意力)? 还是说只需关注当前章节就足够了(局部注意力),只要你偶尔回想一下它与主情节的关系(全局注意力)? 在绝大多数情况下,答案是后者。
2) 闪电注意力 这是一种快速且内存高效的方法,保留了传统注意力机制的准确性,即它使用全局注意力,但效率更高。 整个想法围绕着优化GPU内存中的数据移动。 让我们来理解一下!
一些背景细节: - 线程是最小的执行单元。 - 几个线程形成一个区块。 另外: - 区块中的线程共享一种快速(但稀缺)的内存,称为SRAM。 - 所有区块共享一种称为HBM的全局内存(丰富但慢)。 查看这个👇
注意在SRAM和HBM之间移动大型矩阵: 计算QK: - 将矩阵分配给线程 - 计算,并且 - 将结果发送到HBM 计算softmax: - 将结果分配给线程 - 计算,并且 - 将输出发送到HBM 对所有层重复此操作。 查看这个👇
闪电注意力涉及硬件级优化,利用SRAM缓存中间结果。 通过这种方式,它减少了冗余移动,提供了比标准注意力方法快多达7.6倍的速度提升。 查看这个👇
98.94K