🚀 LLaMA-2-7B-32K
LLaMA-2-7B-32K 是一款开源的长上下文语言模型,由 Together 基于 Meta 原始的 Llama-2 7B 模型进行微调。该模型致力于推动大语言模型开源生态的快速发展,通过位置插值将上下文长度扩展至 32K,可应用于多文档问答、长文本摘要等场景。
🚀 快速开始
你可以使用 Together API 对 LLaMA-2-7B-32K 进行推理。更新后的推理栈可实现高效推理。
若要在本地运行该模型,强烈建议安装 Flash Attention V2,这是获得最佳性能的必要条件:
# 请更新 `CUDA_HOME` 的路径
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 = "Your text here"
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
。
✨ 主要特性
扩展上下文
该模型经过训练,可处理长达 32K 的上下文,相较于之前的版本有了显著提升。
预训练和指令微调
共享了数据配方,包含预训练和指令微调数据的混合。
微调示例
提供了如何针对特定应用微调模型的示例,包括书籍摘要和长上下文问答。
软件支持
更新了推理和训练栈,以实现 32K 上下文的高效推理和微调。
📦 安装指南
若要在本地运行该模型,需安装 Flash Attention V2 以获得最佳性能:
# 请更新 `CUDA_HOME` 的路径
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
💻 使用示例
基础用法
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 = "Your text here"
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)
高级用法
长上下文问答
以论文 “Lost in the Middle: How Language Models Use Long Contexts” 中的多文档问答任务为例。模型的输入包括(i)一个需要回答的问题和(ii)k 个文档,这些文档是从维基百科中提取的段落。值得注意的是,只有其中一个文档包含问题的答案,其余 k - 1 个文档(称为“干扰”文档)不包含答案。为了成功完成此任务,模型必须从其输入上下文中识别并利用包含答案的文档。
使用 OpenChatKit(OCK),只需运行以下命令进行微调:
bash training/finetune_llama-2-7b-32k-mqa.sh
摘要
另一个示例是 BookSum,这是一个专门用于解决长篇叙事摘要挑战的独特数据集。该数据集的源文档来自文学领域,包括小说、戏剧和故事,并提供了人工编写的高度抽象的摘要。这里主要关注章节级别的数据。BookSum 带来了一系列独特的挑战,要求模型全面阅读每个章节。
使用 OCK,只需运行以下命令进行微调:
bash training/finetune_llama-2-7b-32k-booksum.sh
📚 详细文档
模型架构
该模型遵循 Llama-2-7B 的架构,并对其进行扩展以处理更长的上下文。它利用了最近发布的 FlashAttention-2 和一系列其他优化,以提高推理和训练的速度和效率。
训练和微调
模型使用预训练和指令微调数据的混合进行训练:
- 在持续预训练的第一阶段,数据混合包含 25% 的 RedPajama 书籍、25% 的 RedPajama ArXiv(包括摘要)、25% 的 RedPajama 其他数据和 25% 的 UL2 Oscar 数据(属于 OIG,即 Open-Instruction-Generalist),要求模型填充缺失的部分或完成文本。为了增强长上下文能力,排除了字数少于 2K 的数据。包含 UL2 Oscar 数据能有效促使模型阅读和利用长距离上下文。
- 然后对模型进行微调,使其专注于长上下文中的小样本能力,包括 20% 的 Natural Instructions(NI)、20% 的 Public Pool of Prompts(P3)、20% 的 The Pile。对所有数据进行了针对 HELM 核心场景的净化处理。通过将示例打包成一个 32K 标记的序列,教导模型利用上下文示例。为了保留从第一部分数据中学到的知识,纳入了 20% 的 RedPajama-Data 书籍和 20% 的 RedPajama-Data ArXiv。
示例数据集位于 togethercomputer/Long-Data-Collections。你可以使用 OpenChatKit 在 LLaMA-2-7B-32K 上微调自己的 32K 模型。具体步骤请参考 OpenChatKit。
🔧 技术细节
训练数据
属性 |
详情 |
模型类型 |
LLaMA-2-7B-32K |
训练数据 |
togethercomputer/RedPajama-Data-1T、togethercomputer/RedPajama-Data-Instruct、EleutherAI/pile、togethercomputer/Long-Data-Collections |
局限性和偏差
与所有语言模型一样,LLaMA-2-7B-32K 可能会生成不正确或有偏差的内容。使用该模型时请牢记这一点。
📄 许可证
本模型使用 LLaMA-2 许可证。
👥 社区
加入我们的 Together Discord 社区。