【2024】一篇Loooooong LLM全面综述

火山方舟向量数据库云通信

2024开年大模型密集发布,Long Context会逐渐成为大模型的标配,本文对主流上下文长度超过100K的Long LLM进行了梳理,从模型汇总、训练难点、训练方案、大海捞针评测、推理、落地应用等维度展开,方便有兴趣的小伙进行全面的了解。

模型汇总

当前世界主流的长上下文大模型图谱:

picture.image

训练难点

那么训练超长上下文LLM(100k、200k)的难点在哪:

  • 资源消耗:GPU显存的占用与序列长度的平方成正比,使训练量急剧上升;

  • 知识遗忘:基于已有的模型结构,序列越长,模型的attention越分散,模型越容易忘记前序内容;

  • 数据稀缺:当前LLM的训练数据集很多,但是长度适合用于100K、200K训练的数据集却很少。

训练方案

  • 原生Long Context模型方案:直接进行长序列的预训练,但会导致训练量成平方倍的提升,Transformer训练过程的很多内存的大小很多是正比于输入序列长度的二次方的,有的是正比于输入长度(200K)乘以总的token数量(对于llama模型来讲是200K * 32000也很大)。
  • 微调方案:通过位置编码的插值或外推拓展序列长度,这种方法会降低位置编码的分辨率,从而降低大模型输出效果。

从万象XVERSE-13B-256K、 InternLM(200K)、Anima-7B-100K公布的训练方案来看是采用第 二种微调方案 ,例如:

元象一种长文本大模型训练方案

picture.image

LLM长度外推理论概述

  • Transformer 位置编码 方法:
  • 有绝对位置编码(将位置信息融入到输入)
  • 相对位置编码(将位置信息写入attention分数计算)
  • 旋转位置编码
  • 旋转位置编码RoPE 是研究最火热的,它 通过绝对位置编码的形式,实现了相对位置编码的效果,但与相对位置编码相比,又能更好地提升大模型的外推潜力:
  • 进一步激发采用RoPE位置编码的大模型的外推能力方法分两类:
  • 限制注意力 :包括 ALiBi、xPos、BCA 等,MIT提出的StreamingLLM,可以让大模型实现无限的输入长度(但并不增加上下文窗口长度)也属于这类;
  • 调整旋转角 :典型代表如 线性内插、Giraffe、Code LLaMA、 RoPE ABF 等。

picture.image


          
知乎:详解基于调整RoPE旋转角度的大模型长度外推方法
          
知乎:RoPE外推的缩放法则 —— 尝试外推RoPE至1M上下文
      

Long LLM微调数据

现在大语言模型的训练数据集很多,但是长度适合用于100K、200K训练的数据集却很少。Long LLM微调的数据最好 不是基于信息稀疏分布的假设,答案需要的关键信息最好是全文分布的。 最好是需要每一个局部的信息经过一个非线性映射才能得出答案。

构建数据的一个思路:挑选了一些长文本的问答数据,比如narrative qa的问答数据集中,有一些问题输入数据是一本很长的书,可能达到接近100k个token的长度。模型需要针对这本书的内容回答一些问题。这样的训练数据,会强迫模型提升针对prompt中长数据的attention能力,模型必须有能力看懂整个100k的输入数据,并根据prompt定位关键信息,才能回答正确问题。用这样的数据训练模型能够逼着模型提升100k输入的处理能力。

类似的可以构建一些垂直金融领域数据,比如经验研报、财报数据,单篇长度是可以达到十几、二十万字的。

大海捞针评测

OpenCompass大海捞针评测

https://github.com/open-compass/opencompass

大海捞针试验 ”:通过将关键信息随机插入一段长文本的不同位置构造问题,测试模型是否能从长文本中提取出关键信息。比如,把“小明最喜欢的地点”这一根“针”放到由多篇文档拼接成的超长文本中。每次测试投放一根针、投放位置会均匀覆盖整个文档。在输入末尾,提出问题Q,如果模型正确回答A,则认为成功从“大海”里捞起了“针”。

picture.image

“大海捞针”任务示例,图片来源InternLM

推理

安装:

pip install lmdeploy

LMDeploy 实现了 dynamic ntk,支持长文本外推。使用如下代码,可以把 InternLM2 的文本外推到 200K

from lmdeploy import pipeline, TurbomindEngineConfig
engine_config = TurbomindEngineConfig(session_len=200000,
rope_scaling_factor=2.0)
pipe = pipeline("internlm/internlm2-chat-7b", backend_engine=engine_config)
gen_config = GenerationConfig(top_p=0.8,
top_k=40,
temperature=0.8,
max_new_tokens=1024)
response = pipe(prompt, gen_config=gen_config)
print(response)

应用场景

Long Context大模型有很广阔的应用场景, 比如大规模数据分析、多文档阅读理解、跨领域知识融合任务,未来能推动大模型应用深层次的产业落地,比如在科研(文献、论文)、金融(研报、财报)、司法(法律条文)等领域发力。

金融领域超长研报解读

picture.image

专业领域超

长文档解读

picture.image

资源汇总


          
数据模型镜像网站,直接下载:https://hf-mirror.com/
          
maxlen 100K英文数据集:https://hf-mirror.com/datasets/lyogavin/longer_training_max100k_v3
          
Anima-7B-100K https://hf-mirror.com/lyogavin/Anima-7B-100K
          
1.1w金融研报数据 https://modelscope.cn/datasets/modelscope/chatglm_llm_fintech_raw_dataset/summary
          
长上下文评测:LongBench
          
月之暗面产品,免费使用:https://kimi.moonshot.cn/
          
猎户星空App Demo,免费使用:https://hf-mirror.com/spaces/OrionStarAI/Orion-14B-App-Demo-CN
      
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
基于火山引擎 EMR 构建企业级数据湖仓
火山引擎 EMR 是一款云原生开源大数据平台,提供主流的开源大数据引擎,加持了字节跳动内部的优化、海量数据处理的最佳实践。本次演讲将为大家介绍火山引擎 EMR 的架构及核心特性,如何基于开源架构构建企业级数据湖仓,同时向大家介绍火山 EMR 产品的未来规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论