许可证:llama2
数据集:
- togethercomputer/RedPajama-Data-1T
- togethercomputer/RedPajama-Data-Instruct
- EleutherAI/pile
- togethercomputer/Long-Data-Collections
语言:
- en
库名称:transformers
LLaMA-2-7B-32K
模型描述
LLaMA-2-7B-32K 是由 Together 开发的一款开源长上下文语言模型,基于 Meta 原版 Llama-2 7B 模型微调而成。
该模型体现了我们为促进大语言模型开源生态快速发展所做的努力。
通过位置插值技术,该模型的上下文长度扩展至 32K,可应用于多文档问答、长文本摘要等任务。
新特性
本模型引入了多项改进与新功能:
- 扩展上下文:模型经过训练可处理长达 32K 的上下文,较先前版本有显著提升。
- 预训练与指令调优:我们公开了数据配方,包含预训练与指令调优数据的混合。
- 微调示例:提供了针对特定应用的微调示例,包括书籍摘要和长上下文问答。
- 软件支持:更新了推理和训练框架,支持 32K 上下文的高效推理与微调。
模型架构
模型沿用 Llama-2-7B 架构并扩展以支持更长上下文。结合最新发布的 FlashAttention-2 及其他优化技术,显著提升了推理和训练的速度与效率。
训练与微调
模型采用预训练与指令调优数据混合训练:
- 第一阶段持续预训练:数据混合包含 25% RedPajama 书籍数据、25% RedPajama 学术论文数据(含摘要)、25% RedPajama 其他数据,以及 25% UL2 Oscar 数据(来自 OIG 开放通用指令集),要求模型补全缺失文本片段。为增强长上下文能力,排除少于 2K 词的数据。UL2 Oscar 数据能有效促使模型阅读并利用长程上下文。
- 指令微调阶段:聚焦长上下文下的少样本学习能力,混合 20% Natural Instructions (NI)、20% Public Pool of Prompts (P3)、20% the Pile 数据。所有数据均经过 HELM 核心场景去污染处理。通过将示例打包为 32K 标记序列,教导模型利用上下文示例。为保留第一阶段习得的知识,加入 20% RedPajama 书籍数据和 20% RedPajama 学术论文数据。
微调应用示例
示例数据集存放于 togethercomputer/Long-Data-Collections
可使用 OpenChatKit 基于 LLaMA-2-7B-32K 微调自定义 32K 模型。
-
长上下文问答
以论文《Lost in the Middle: How Language Models Use Long Contexts》中的多文档问答任务为例。模型输入包含:(i) 需回答的问题;(ii) k 篇维基百科文档片段,其中仅一篇含答案,其余为干扰文档。模型需从上下文中识别并利用正确答案文档。
使用 OpenChatKit 运行以下命令微调:
bash training/finetune_llama-2-7b-32k-mqa.sh
-
摘要生成
以 BookSum 数据集为例,该数据集针对长篇叙事摘要任务设计,包含小说、戏剧等文学作品及其人工撰写的高度抽象摘要。此处聚焦章节级数据,要求模型完整阅读每个章节。
使用 OpenChatKit 运行以下命令微调:
bash training/finetune_llama-2-7b-32k-booksum.sh
推理
可通过 Together API 体验 LLaMA-2-7B-32K 的推理能力。更新后的推理框架支持高效推理。
本地运行强烈建议安装 Flash Attention V2 以获得最佳性能:
export CUDA_HOME=/usr/local/cuda-11.8
pip install transformers==4.31.0
pip install sentencepiece
pip install ninja
pip install flash-attn --no-build-isolation
pip install git+https://github.com/HazyResearch/flash-attention.git#subdirectory=csrc/rotary
可直接使用 Hugging Face 模型库中的模型,或通过 OpenChatKit 基于自有数据微调:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("togethercomputer/LLaMA-2-7B-32K")
model = AutoModelForCausalLM.from_pretrained("togethercomputer/LLaMA-2-7B-32K", trust_remote_code=True, torch_dtype=torch.float16)
input_context = "输入文本"
input_ids = tokenizer.encode(input_context, return_tensors="pt")
output = model.generate(input_ids, max_length=128, temperature=0.7)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(output_text)
若不使用 flash attention,可设置 trust_remote_code=False
。
局限性与偏差
与所有语言模型类似,LLaMA-2-7B-32K 可能生成错误或带有偏见的内容,使用时需注意。
社区
加入 Together Discord 参与讨论