SuperAPI AI 工具集

long-context

智能体与模型

查看项目

更新于 10-30 06:46

技能介绍

用途

Long Context 技能用于扩展 Transformer 模型的上下文窗口,使模型能够处理 32k、64k、128k+ token 的长文档。适用场景包括:处理长文档、扩展 LLaMA/Mistral 等预训练模型的上下文长度、实现高效位置编码、训练具备长度外推能力的模型、部署可处理可变长输入的模型,以及以较低算力微调现有模型以支持更长上下文。

主要能力

该技能覆盖四类关键技术:

  • RoPE(Rotary Position Embeddings,旋转位置嵌入):通过旋转矩阵编码绝对位置,在注意力中提供相对位置依赖,支持长度外推。
  • YaRN(Yet another RoPE extensioN):采用 NTK-aware 插值与注意力温度缩放,实现高效上下文扩展,相比基线可减少约 10 倍 token 消耗。
  • ALiBi(Attention with Linear Biases):不向 token 添加位置嵌入,而是将距离惩罚直接施加于注意力分数,偏置与 key-query 距离成正比。
  • 位置插值(Position Interpolation):线性缩小位置索引,在已训练范围内插值而非外推,仅需极少微调。

技能还提供方法对比表(最大上下文、所需训练、内存、外推能力、适用场景)、HuggingFace Transformers 集成示例、自定义 RoPE 实现、微调流程、最佳实践与生产部署建议。

使用方式

安装依赖:

# HuggingFace Transformers (includes RoPE, YaRN support)
pip install transformers torch

# For custom implementations
pip install einops  # Tensor operations
pip install rotary-embedding-torch  # Standalone RoPE

# Optional: FlashAttention for efficiency
pip install flash-attn --no-build-isolation

技能提供 RoPE、ALiBi 的完整代码实现,以及通过 HuggingFace 配置扩展上下文的方式。例如位置插值配置:

model.config.rope_scaling = {
    "type": "linear",
    "factor": 16.0  # 2048 * 16 = 32768
}

YaRN 配置示例:

yarn_config = {
    "scale": 16,
    "original_max_position": 2048,
    "extrapolation_factor": 1.0,
    "attn_factor": 1.0,
    "beta_fast": 32,
    "beta_slow": 1,
}

微调方面,位置插值仅需约 1000 步,YaRN 微调可通过克隆仓库并运行训练脚本完成:

git clone https://github.com/jquesnelle/yarn
cd yarn
python scripts/train.py \
    --model meta-llama/Llama-2-7b-hf \
    --scale 16 \
    --rope_theta 10000 \
    --max_length 32768 \
    --batch_size 1 \
    --gradient_accumulation 16 \
    --steps 400 \
    --learning_rate 2e-5

适用场景

  • 从零训练新模型:推荐 ALiBi,外推能力最佳、内存占用最低。
  • 扩展现有 RoPE 模型:推荐 YaRN,扩展效率最高。
  • 以最小算力快速扩展:推荐位置插值,约 1000 步即可。
  • 中等程度扩展且追求效率:推荐线性 RoPE 缩放,内置且简单。

限制与注意事项

  • 应用位置插值后若不进行微调,模型表现会很差。
  • 过于激进的缩放(如直接扩展到 1M token)在缺乏大规模微调的情况下无法工作,建议采用增量缩放(8k → 16k → 32k → 64k,每步微调)。
  • 微调数据应使用与目标长度匹配的长文档(如 PG-19、arXiv 论文、长对话、GitHub 仓库拼接文件),短文档无法学习长上下文。
  • 缩放因子越大,所需微调步数越多(粗略估计为 100 × scaling_factor)。
  • 各方法在最大上下文、训练需求、内存占用和外推能力上存在差异,需根据具体场景选择。

资源

  • RoPE 论文:https://arxiv.org/abs/2104.09864 (RoFormer)
  • YaRN 论文:https://arxiv.org/abs/2309.00071
  • ALiBi 论文:https://arxiv.org/abs/2108.12409 (Train Short, Test Long)
  • 位置插值论文:https://arxiv.org/abs/2306.15595
  • HuggingFace RoPE Utils:https://github.com/huggingface/transformers/blob/main/src/transformers/modeling_rope_utils.py
  • YaRN 实现:https://github.com/jquesnelle/yarn
  • Together AI Blog:https://www.together.ai/blog/llama-2-7b-32k

另见:references/rope.md、references/extension_methods.md、references/fine_tuning.md。