Qwen2.5-1M 发布:开源 7B 和 14B 模型,支持 1M Token 上下文及基于 vLLM 的推理框架
概述
Qwen 发布了两款开源的指令微调模型:Qwen2.5-7B-Instruct-1M 和 Qwen2.5-14B-Instruct-1M,每款模型都能处理高达一百万 token 的上下文,并随之推出了一个基于 vLLM 构建的完全开源的推理框架,用于加速长上下文预填充(prefill)。
模型发布
本次发布提供了两个新的检查点(checkpoints):Qwen2.5-7B-Instruct-1M 和 Qwen2.5-14B-Instruct-1M。这是首批向公众开放支持 1M token 上下文长度的 Qwen 模型。
长上下文性能
在 Passkey Retrieval 任务中,Qwen2.5-1M 系列模型能够从包含高达 1M token 的文档中准确检索隐藏信息,仅在 7B 版本中观察到极少量错误。在更复杂的长上下文基准测试(如 RULER、LV-Eval 和 LongbenchChat)中,对于超过 64K token 的序列,这些模型的表现显著优于其 128K 版本。Qwen2.5-14B-Instruct-1M 模型不仅击败了 Qwen2.5-Turbo,还在多个数据集上持续优于 GPT-4o-mini,为长上下文任务提供了强大的开源替代方案。
短上下文性能
Qwen2.5-7B-Instruct-1M 和 Qwen2.5-14B-Instruct-1M 在短文本任务上的性能与它们的 128K 版本保持一致,确保了基础能力不会因增加长序列处理能力而受到影响。与 GPT-4o-mini 相比,Qwen2.5-14B-Instruct-1M 和 Qwen2.5-Turbo 在短文本任务上实现了相近的性能,同时支持长出八倍的上下文长度。
核心技术
长上下文训练
训练遵循渐进式进度表:从 4K token 检查点开始,在预训练期间通过将 RoPE base 从 10,000 调整为 10,000,000,将上下文长度增加到 256K token。监督微调分为两个阶段——首先是针对高达 32K token 的短指令,然后是针对高达 256K token 的长短指令混合训练——而强化学习则在高达 8K token 的短文本上进行。由此产生的指令微调模型可以处理 256K token;通过 Dual Chunk Attention (DCA) 实现的长度外推可将此扩展到 1M token,无需额外训练。
Dual Chunk Attention
DCA 将相对位置重新映射为较小的值,防止模型在注意力机制期间遇到未见过的距离,从而避免了基于 RoPE 的性能退化。消融实验表明,即使是仅在 32K token 上训练的模型,在应用 DCA 后,在 1M token 时也能实现近乎完美的 passkey retrieval 准确率。
Sparse Attention
推理框架集成了基于 MInference 的稀疏注意力机制,并进行了多项改进:分块预填充(chunk size 为 32,768 token)将激活显存(VRAM)占用降低了 96.7%;将 DCA 与 MInference 结合以提高效率和准确性;一种稀疏化细化方法为长达 1M token 的序列定制稀疏配置,限制了准确率损失;此外还应用了额外的内核(kernel)和流水线优化。这些增强措施在不同模型规模和 GPU 设备上,使 1M token 序列的预填充速度提升了 3.2 倍至 6.7 倍,与报告的 3-7 倍加速一致。
在本地部署 Qwen2.5-1M 模型
系统准备
为了获得最佳性能,请使用 Ampere 或 Hopper 架构的 GPU。所需软件:CUDA 12.1 或 12.3,Python 3.9–3.12。处理 1M token 所需的显存:7B 模型总计至少需要 120 GB,14B 模型总计至少需要 320 GB(跨 GPU)。显存限制将使模型仅能处理较短的任务。
安装依赖
克隆自定义的 vLLM 分支并安装:
git clone -b dev/dual-chunk-attn git@github.com:QwenLM/vllm.git
cd vllm
pip install -e. -v
启动 OpenAI 兼容的 API 服务
使用如下命令启动服务:
vllm serve Qwen/Qwen2.5-7B-Instruct-1M \
--tensor-parallel-size 4 \
--max-model-len 1010000 \
--enable-chunked-prefill --max-num-batched-tokens 131072 \
--enforce-eager \
--max-num-seqs 1
参数含义:--tensor-parallel-size 等于 GPU 的数量(7B 最大为 4,14B 最大为 8);--max-model-len 设置最大输入长度;--max-num-batched-tokens 定义分块预填充的块大小(建议 131,072);--max-num-seqs 限制并发序列数。
与模型交互
使用 curl 的示例:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct-1M",
"messages": [{"role": "user", "content": "Tell me something about large language models." }],
"temperature": 0.7,
"top_p": 0.8,
"repetition_penalty": 1.05,
"max_tokens": 512
}'
使用 Python 和 OpenAI 客户端的示例:
from openai import OpenAI
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(api_key=openai_api_key, base_url=openai_api_base)
prompt = ("There is an important info hidden inside a lot of irrelevant text. " +
"Find it and memorize it. I will quiz you about the important information there.\n\n" +
"The pass key is 28884. Remember it. 28884 is the pass key.\n" +
"The grass is green. The sky is blue. The sun is yellow. Here we go. There and back again. " * 80 <<
"\nWhat is the pass key?
)
chat_response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct-1M",
messages=[{"role": "user", "content": prompt}],
temperature=0,
)
print("Chat response:" + chat_response.choices[0].message.content)
其他选项还包括用于 PDF 阅读和特定任务的 Qwen-Agent 框架。
下一步计划
Qwen 旨在通过研究更高效的训练方法、模型架构和推理技术来进一步改进长上下文模型,使其在保持短任务和长任务强大性能的同时,能够在资源受限的环境中部署。