Qwen2.5-1M 發布:開源 7B 與 14B 模型,支援 1M‑Token 上下文並基於 vLLM 的推理框架
總覽
Qwen 宣布發布兩個開源指令調校模型,Qwen2.5‑7B‑Instruct‑1M 和 Qwen2.5‑14B‑Instruct‑1M,每個均能處理多達一百萬個 token 的上下文,並附帶一個完全開源的基於 vLLM 的推理框架,可加速長上下文預填充。
模型發布
此次發布提供兩個新的檢查點:Qwen2.5‑7B‑Instruct‑1M 和 Qwen2.5‑14B‑Instruct‑1M。這些是首次向公眾開放且支援 1M‑token 上下文長度的 Qwen 模型。
長上下文效能
Qwen2.5‑1M 系列模型在 Passkey Retrieval 任務中能夠從包含多達 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 基礎從 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 的稀疏注意力機制,並加入了多項改進:分塊預填充(塊大小 32,768 token)將激活 VRAM 使用量降低 96.7%;DCA 與 MInference 結合以提升效率與準確度;一種稀疏度精煉方法針對最多 1M token 的序列調整稀疏化配置,以限制準確度損失;此外還套用了額外的核心與管線優化。這些改進使得 1M‑token 序列的預填充速度在不同模型規模與 GPU 裝置上提升 3.2× 至 6.7×,與報告的 3×–7× 加速一致。
本地部署 Qwen2.5‑1M 模型
系統準備
為獲得最佳效能,請使用具備 Ampere 或 Hopper 架構的 GPU。所需軟體:CUDA 12.1 或 12.3,Python 3.9–3.12。處理 1M‑token 所需的 VRAM:7B 模型至少需要 120 GB 總計,14B 模型至少需要 320 GB 總計(跨多張 GPU)。VRAM 不足會將模型限制在較短的任務上。
安裝依賴項
複製自訂的 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. " * 800 +
"\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 旨在透過研究更高效的訓練方法、模型架構與推理技術,進一步提升長上下文模型,使其在資源受限的環境中也能部署,同時保持在短任務與長任務上的強大表現。