long_llama

GitHub
1.5k 85 简单 2 次阅读 2周前Apache-2.0语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

LongLLaMA 是一款专为处理超长文本上下文而设计的大型语言模型。它基于 OpenLLaMA 架构,并创新性地采用了“聚焦变换器”(Focused Transformer, FoT)方法进行微调,能够轻松驾驭长达 256k 甚至更多的 token 上下文,有效解决了传统模型在面对长篇文档、复杂代码库或海量对话历史时容易“遗忘”关键信息或无法完整输入的痛点。

该项目的独特之处在于其高效的训练策略:FoT 技术允许模型仅在部分注意力层访问记忆缓存,从而实现在较短输入数据上的训练,却能赋予模型处理百万级 token 上下文的卓越能力。此外,LongLLaMA 提供了包括 3B 基础版、指令微调版以及针对代码优化的 Code 版本在内的多种模型权重,且部分版本采用宽松的 Apache 2.0 协议开源,可直接替换现有 LLaMA 实现中的模型。

LongLLaMA 非常适合 AI 研究人员、大模型开发者以及需要处理长文本分析的企业用户。研究人员可利用其提供的 PyTorch 指令微调和 JAX 持续预训练代码探索上下文扩展机制;开发者则能将其集成到应用中,构建支持长文档摘要、全代码库理解或长程对话的智能系统。无论是学术探索还是工程落地,LongLLaMA 都为突破长度限制提供了强大且灵活的基础设施。

使用场景

某法律科技团队正在开发一款智能合同审查系统,需要让 AI 一次性读取并分析长达数百页的并购协议全文,以识别潜在的风险条款。

没有 long_llama 时

  • 上下文截断导致遗漏:传统模型受限于 4k 或 8k 的窗口长度,被迫将合同切分成碎片处理,导致跨章节的风险关联(如前文的定义与后文的违约责任)无法被识别。
  • 人工拼接效率低下:开发人员必须编写复杂的逻辑来手动管理文本切片和摘要拼接,不仅增加了代码维护成本,还引入了信息丢失的隐患。
  • 关键细节模糊:在处理超长文档时,模型往往出现“中间迷失”现象,对文档中段的关键免责条款或细微的金额限制反应迟钝,准确率大幅下降。
  • 推理延迟高企:为了弥补上下文不足,系统需要多次调用模型进行滚动总结,导致单次审查任务的响应时间从秒级延长至分钟级。

使用 long_llama 后

  • 全量上下文无损输入:凭借 256k+ 的超长上下文能力,long_llama 可直接吞下整份百页合同,精准捕捉跨越数十页的逻辑依赖和风险链条。
  • 架构简化开发提速:团队移除了繁琐的切片与重组代码,直接将长文本传入模型,系统架构回归简洁,新功能的迭代周期缩短了一半。
  • 长程记忆精准定位:基于 Focused Transformer 技术,long_llama 在海量文本中仍能像“聚光灯”一样精准聚焦于文档任何位置的关键条款,消除了“中间迷失”问题。
  • 单次推理即时响应:无需多轮滚动查询,long_llama 一次前向传播即可完成全篇分析,将复杂合同的审查耗时压缩回秒级,大幅提升用户体验。

long_llama 通过突破上下文长度瓶颈,让 AI 真正具备了像人类专家一样通读并理解海量文档的核心能力。

运行环境要求

操作系统
  • 未说明
GPU
  • 未明确说明具体型号,但基于 PyTorch/CUDA 运行且处理长上下文(最高 256k tokens)及 3B/7B 参数量,强烈建议使用支持 CUDA 的 NVIDIA GPU
  • 显存需求取决于上下文长度和模型大小(7B 模型通常需要 14GB+,长上下文会显著增加 KV Cache 显存占用)
内存

未说明(建议 16GB+ 以应对长上下文数据处理)

依赖
notes1. 该工具包含两个主要部分:推理代码基于 PyTorch 和 Hugging Face;继续预训练代码(FoT continued pretraining)则依赖 JAX 和 Flax。2. 加载模型时必须设置 trust_remote_code=True。3. 模型支持作为 LLaMA 的直接替代品使用,但若不使用专用推理代码,上下文长度将限制在 2048 tokens。4. 针对长上下文生成,可通过调整 last_context_length、mem_dtype(如 bfloat16)和 mem_attention_grouping 参数来优化显存使用和速度。
python未说明
transformers==4.33.2
sentencepiece
accelerate
torch
long_llama hero image

快速开始

LongLLaMA

LongLLaMA:面向上下文扩展的聚焦Transformer训练

简述

本仓库包含 LongLLaMA 的研究预览版,这是一款能够处理长达 256k 个标记甚至更多上下文的大型语言模型

LongLLaMA 基于 OpenLLaMA 构建,并采用 聚焦Transformer (FoT) 方法进行微调。 LongLLaMA Code 则基于 Code Llama 构建。 我们以宽松的许可证(Apache 2.0)发布了一个较小的 3B 基础版本(未进行指令调优)的 LongLLaMA 模型,并在 Hugging Face 上提供了支持更长上下文的推理代码。我们的模型权重可以作为现有实现中 LLaMA 的直接替代品(适用于短上下文,最多 2048 个标记)。此外,我们还提供了评估结果以及与原始 OpenLLaMA 模型的对比。

除此之外,我们还发布了用于 指令调优(PyTorch)FoT 持续预训练(JAX) 的代码。

概述

基础模型

聚焦Transformer:面向上下文扩展的对比学习(FoT)提出了一种简单的方法,使语言模型能够在训练时使用显著较短的输入,却具备处理可能包含数百万个标记的上下文的能力。FoT 允许一部分注意力层访问由 (key, value) 对组成的内存缓存,从而扩展上下文长度。FoT 的独特之处在于其训练过程,借鉴了对比学习的思想。具体而言,我们会有意将记忆注意力层暴露于相关和不相关的 key 中(类似于来自无关文档的负样本)。这一策略促使模型区分与语义多样化的 value 相关的 key,从而增强其结构。这样一来,就能将有效上下文长度外推到远超训练时所见的范围。

LongLLaMA 是一款基于 OpenLLaMA 并采用 FoT 方法微调的模型,其中三层层被用于上下文扩展。关键在于,LongLLaMA 能够将上下文长度外推至远超训练时所见的水平:8k。例如,在密钥检索任务中,它能够处理长度达 256k 的输入LongLLaMA Code 是一款基于 Code Llama 并采用 FoT 方法微调的模型。

LongLLaMA-3B LongLLaMA-3Bv1.1 LongLLaMA-Code 7B
来源模型 OpenLLaMA-3B OpenLLaMA-3Bv2 CodeLLaMA-7b-hf
来源模型标记数 1T 1 T 2T + 0.5 T
微调标记数 10B 5B 35B
内存层 6, 12, 18 6, 12, 18 8, 16, 24

FoT 持续预训练

fot_continued_pretraining 子文件夹中,我们提供了可用于使用 FoT 调整 LLaMA 模型的代码。 该代码使用 JAXFlax 编写,并基于 EasyLM

指令/聊天调优

instruction_fine_tuning 子文件夹中,我们提供了用于创建 LongLLaMA-指令-3Bv1.1 的代码,它是 LongLLaMA-3Bv1.1 的指令调优版本。我们在调优过程中使用了 OpenOrca(指令)和 zetavg/ShareGPT-Processed(聊天)数据集。 该代码利用了 PyTorchHugging Face 训练器

推理代码

src 子文件夹中,我们提供了 FoT 模型的推理代码。
该代码使用 PyTorch 编写,并基于 Hugging Face 的 LLaMA 实现
代码应支持标准的 Hugging Face API。更多详情请参阅 使用说明 部分。

使用说明

另请参阅:

需求

pip install --upgrade pip
pip install transformers==4.33.2 sentencepiece accelerate

加载模型

import torch
from transformers import LlamaTokenizer, AutoModelForCausalLM

tokenizer = LlamaTokenizer.from_pretrained("syzymon/long_llama_3b_v1_1")
model = AutoModelForCausalLM.from_pretrained("syzymon/long_llama_3b_v1_1", 
                                            torch_dtype=torch.float32, 
                                            trust_remote_code=True)

输入处理与生成

LongLLaMA 使用 Hugging Face 接口,输入给模型的长文本将被分割成上下文窗口并加载到内存缓存中。

prompt = "My name is Julien and I like to"
input_ids = tokenizer(prompt, return_tensors="pt").input_ids
outputs = model(input_ids=input_ids)

在调用模型时,可以提供参数 last_context_length(默认值为 $1024$),用于指定最后一个上下文窗口中保留的标记数。调整此参数可以改善生成效果,因为模型的前几层无法访问内存缓存。详细信息请参阅 LongLLaMA 如何处理长输入

generation_output = model.generate(
    input_ids=input_ids,
    max_new_tokens=256,
    num_beams=1,
    last_context_length=1792,
    do_sample=True,
    temperature=1.0,
)
print(tokenizer.decode(generation_output[0]))

其他配置

LongLLaMA 还有若干其他参数:

  • mem_layers 用于指定具有记忆功能的层(应为空列表或检查点描述中列出的所有记忆层的列表)。
  • mem_dtype 允许更改内存缓存的数据类型。
  • mem_attention_grouping 可以在速度和减少内存使用之间进行权衡。
    当设置为 (4, 2048) 时,记忆层每次最多可同时处理 $4 \times 2048$ 个查询(每组 4 个注意力头,每个头处理 2048 个查询)。
import torch
from transformers import LlamaTokenizer, AutoModelForCausalLM

tokenizer = LlamaTokenizer.from_pretrained("syzymon/long_llama_3b_v1_1")
model = AutoModelForCausalLM.from_pretrained(
    "syzymon/long_llama_3b_v1_1", torch_dtype=torch.float32, 
    mem_layers=[], 
    mem_dtype='bfloat16',
    trust_remote_code=True,
    mem_attention_grouping=(4, 2048),
)

作为 LLaMA 代码的直接替换

LongLLaMA 检查点也可以作为 Hugging Face 的 LLaMA 实现 中 LLaMA 检查点的直接替换使用,但在这种情况下,它们将被限制为原始的 $2048$ 标记上下文长度。

from transformers import LlamaTokenizer, LlamaForCausalLM
import torch

tokenizer = LlamaTokenizer.from_pretrained("syzymon/long_llama_3b_v1_1")
model = LlamaForCausalLM.from_pretrained("syzymon/long_llama_3b_v1_1", torch_dtype=torch.float32)

LongLLaMA 如何处理长输入

超过 $lctx=2048$(对于 LongLLaMA Code 为 $lctx=4096$)标记的输入会自动被分割成窗口 $w_1, \ldots, w_m$。前 $m-2$ 个窗口每个包含 $lctx$ 个标记,$w_{m-1}$ 包含不超过 $lctx$ 个标记,而 $w_m$ 则包含由 last_context_length 指定的标记数。模型会逐个处理这些窗口,并在每次处理后扩展内存缓存。如果 use_cache 设置为 True,则最后一个窗口不会被加载到内存缓存中,而是会被加载到本地(生成)缓存中。

内存缓存为指定的记忆层中的每个注意力头存储 $(key, value)$ 对。此外,它还存储注意力掩码。

如果 use_cache=True(即在生成过程中),LongLLaMA 将使用两种缓存:用于指定层的记忆缓存,以及用于所有层的本地(生成)缓存。当本地缓存中的元素数量超过 $lctx$ 时,其内容会被移动到记忆层的内存缓存中。

为简化起见,本仓库中通过内存缓存和全注意力机制实现了上下文扩展。未来可以通过像 Faiss 这样的系统,用外部数据库中的 KNN 搜索来替代这一简单机制,从而进一步扩展上下文长度。我们将此作为未来的工作方向。

LongLLaMA 性能

我们展示了一些 LongLLaMA 结果的示例。更多细节请参阅我们的论文 Focused Transformer: Contrastive Training for Context Scaling

我们在来自 Landmark Attention: Random-Access Infinite Context Length for Transformers 的密码检索任务上取得了良好的效果。生成提示和运行模型的代码位于 examples/passkey.py 中。

LongLLaMA

我们的 LongLLaMA 3B 模型在两个下游任务——TREC 问题分类和 WebQS 问答——上也表现出使用长上下文时的改进效果。

上下文/数据集 TREC WebQS
$2K$ 67.0 21.2
$4K$ 71.6 21.4
$6K$ 72.9 22.2
$8K$ 73.3 22.4

LongLLaMA 在不需要长上下文的任务上也能保持性能。

特别是,经过代码微调后的 LongLLaMA-Code 7B 在推理能力(GSM8K)和知识储备(MMLU)方面都有所提升:

LongLLaMA

我们在零样本设置下,使用 lm-evaluation-harness 对比了 OpenLLaMA 和 LongLLaMA 的表现。

任务/指标 OpenLLaMA-3B LongLLaMA-3B
anli_r1/准确率 0.33 0.32
anli_r2/准确率 0.32 0.33
anli_r3/准确率 0.35 0.35
arc_challenge/准确率 0.34 0.34
arc_challenge/归一化准确率 0.37 0.37
arc_easy/准确率 0.69 0.68
arc_easy/归一化准确率 0.65 0.63
boolq/准确率 0.68 0.68
hellaswag/准确率 0.49 0.48
hellaswag/归一化准确率 0.67 0.65
openbookqa/准确率 0.27 0.28
openbookqa/归一化准确率 0.40 0.38
piqa/准确率 0.75 0.73
piqa/归一化准确率 0.76 0.75
record/EM 0.88 0.87
record/F1 0.89 0.87
rte/准确率 0.58 0.60
truthfulqa_mc/mc1 0.22 0.24
truthfulqa_mc/mc2 0.35 0.38
wic/准确率 0.48 0.50
winogrande/准确率 0.62 0.60
平均得分 0.53 0.53

从v1.1版本的模型开始,我们决定使用EleutherAIlm-evaluation-harness的实现,并做了一点小修改:在输入序列的开头添加了<bos>标记。结果如下表所示。

描述 LongLLaMA-3B OpenLLaMA-3Bv2 LongLLaMA-3Bv1.1 LongLLaMA-Instruct-3Bv1.1
anli_r1/acc 0.32 0.33 0.31 0.33
anli_r2/acc 0.33 0.35 0.33 0.35
anli_r3/acc 0.35 0.38 0.35 0.38
arc_challenge/acc 0.34 0.33 0.32 0.36
arc_challenge/acc_norm 0.37 0.36 0.36 0.37
arc_easy/acc 0.67 0.68 0.68 0.7
arc_easy/acc_norm 0.63 0.63 0.63 0.63
boolq/acc 0.68 0.67 0.66 0.77
hellaswag/acc 0.48 0.53 0.52 0.52
hellaswag/acc_norm 0.65 0.7 0.69 0.68
openbookqa/acc 0.28 0.28 0.28 0.28
openbookqa/acc_norm 0.38 0.39 0.37 0.41
piqa/acc 0.73 0.77 0.77 0.78
piqa/acc_norm 0.75 0.78 0.77 0.77
record/em 0.87 0.87 0.86 0.85
record/f1 0.88 0.88 0.87 0.86
rte/acc 0.6 0.53 0.62 0.7
truthfulqa_mc/mc1 0.24 0.22 0.21 0.25
truthfulqa_mc/mc2 0.38 0.35 0.35 0.4
wic/acc 0.5 0.5 0.5 0.54
winogrande/acc 0.6 0.66 0.63 0.65
平均得分 0.53 0.53 0.53 0.55

我们还提供了人工评估的结果。我们在以下任一标记后截断生成的文本:

  • "\ndef "
  • "\nclass "
  • "\nif __name__"
OpenLLaMA-3Bv2 LongLLaMA-3Bv1.1 LongLLaMA-Instruct-3Bv1.1
pass@1 0.09 0.12 0.12

作者

引用

若要引用本工作,请使用以下 BibTeX 格式:

@misc{tworkowski2023focused,
      title={Focused Transformer: Contrastive Training for Context Scaling}, 
      author={Szymon Tworkowski and Konrad Staniszewski and Mikołaj Pacek and Yuhuai Wu and Henryk Michalewski and Piotr Miłoś},
      year={2023},
      eprint={2307.03170},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

许可证

源代码和基础 LongLLaMA 3B 模型检查点采用 Apache License, Version 2.0 许可证授权。
经过指令/聊天微调的模型仅用于研究目的。
关于 LongLLaMA-Code 7B,请参阅 codellama/CodeLlama-7b-hf 的许可证。
LongLLaMA-Code 7B Instruct 是在 TIGER-Lab/MathInstructOpenOrcaShareGPT-Processed 数据集上对 LongLLaMA-Code 7B 进行微调得到的。
部分示例使用了外部代码(请参阅文件头部的版权声明和许可证信息)。

致谢

我们衷心感谢 TPU Research Cloud 计划,该计划通过提供重要的计算资源,对我们的研究起到了关键作用。同时,我们也感谢 Xinyang Geng 和 Hao Liu 发布了 OpenLLaMA 检查点以及 EasyLM 库。

特别感谢 Keiran Paster,他为 LongLLaMA-Code 的预训练数据提供了极其宝贵的建议。

此外,我们还要感谢 Xiaosong,He,他为我们改进跨批次代码的解释提出了许多有益的建议。

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架