用途
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。