2024开年大模型密集发布,Long Context会逐渐成为大模型的标配,本文对主流上下文长度超过100K的Long LLM进行了梳理,从模型汇总、训练难点、训练方案、大海捞针评测、推理、落地应用等维度展开,方便有兴趣的小伙进行全面的了解。
模型汇总
当前世界主流的长上下文大模型图谱:
训练难点
那么训练超长上下文LLM(100k、200k)的难点在哪:
-
资源消耗:GPU显存的占用与序列长度的平方成正比,使训练量急剧上升;
-
知识遗忘:基于已有的模型结构,序列越长,模型的attention越分散,模型越容易忘记前序内容;
-
数据稀缺:当前LLM的训练数据集很多,但是长度适合用于100K、200K训练的数据集却很少。
训练方案
- 原生Long Context模型方案:直接进行长序列的预训练,但会导致训练量成平方倍的提升,Transformer训练过程的很多内存的大小很多是正比于输入序列长度的二次方的,有的是正比于输入长度(200K)乘以总的token数量(对于llama模型来讲是200K * 32000也很大)。
- 微调方案:通过位置编码的插值或外推拓展序列长度,这种方法会降低位置编码的分辨率,从而降低大模型输出效果。
从万象XVERSE-13B-256K、 InternLM(200K)、Anima-7B-100K公布的训练方案来看是采用第 二种微调方案 ,例如:
元象一种长文本大模型训练方案
LLM长度外推理论概述
- Transformer 位置编码 方法:
- 有绝对位置编码(将位置信息融入到输入)
- 相对位置编码(将位置信息写入attention分数计算)
- 旋转位置编码
- 旋转位置编码RoPE 是研究最火热的,它 通过绝对位置编码的形式,实现了相对位置编码的效果,但与相对位置编码相比,又能更好地提升大模型的外推潜力:
- 进一步激发采用RoPE位置编码的大模型的外推能力方法分两类:
- 限制注意力 :包括 ALiBi、xPos、BCA 等,MIT提出的StreamingLLM,可以让大模型实现无限的输入长度(但并不增加上下文窗口长度)也属于这类;
- 调整旋转角 :典型代表如 线性内插、Giraffe、Code LLaMA、 RoPE ABF 等。
知乎:详解基于调整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,则认为成功从“大海”里捞起了“针”。
“大海捞针”任务示例,图片来源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大模型有很广阔的应用场景, 比如大规模数据分析、多文档阅读理解、跨领域知识融合任务,未来能推动大模型应用深层次的产业落地,比如在科研(文献、论文)、金融(研报、财报)、司法(法律条文)等领域发力。
金融领域超长研报解读
专业领域超
长文档解读
资源汇总
数据模型镜像网站,直接下载: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