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 旨在透過研究更高效的訓練方法、模型架構與推理技術,進一步提升長上下文模型,使其在資源受限的環境中也能部署,同時保持在短任務與長任務上的強大表現。

Sources