模型概述
模型特點
模型能力
使用案例
🚀 QwenLong-L1:藉助強化學習邁向長上下文大型推理模型
QwenLong-L1 是一種新穎的強化學習框架,旨在助力大型推理模型(LRMs)從短上下文能力過渡到強大的長上下文泛化能力。該模型在長上下文文檔問答基準測試中表現出色,超越了諸多同類旗艦模型。
項目信息
屬性 | 詳情 |
---|---|
模型類型 | 長上下文大型推理模型(LRM) |
訓練數據 | Tongyi-Zhiwen/DocQA-RL-1.6K |
基礎模型 | deepseek-ai/DeepSeek-R1-Distill-Qwen-32B |
團隊信息
作者:Fanqi Wan、Weizhou Shen、Shengyi Liao、Yingcheng Shi、Chenliang Li、Ziyi Yang、Ji Zhang、Fei Huang、Jingren Zhou、Ming Yan
所屬機構:阿里巴巴集團通義實驗室
🚀 快速開始
使用 Transformers 運行模型
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Tongyi-Zhiwen/QwenLong-L1-32B"
# 加載分詞器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 準備模型輸入
template = """請閱讀以下文本並回答下面的問題。
<text>
$DOC$
</text>
$Q$
請按以下格式回覆:“因此,答案是(在此處插入答案)”。"""
context = "<YOUR_CONTEXT_HERE>"
question = "<YOUR_QUESTION_HERE>"
prompt = template.replace('$DOC$', context.strip()).replace('$Q$', question.strip())
messages = [
# {"role": "system", "content": "You are QwenLong-L1, created by Alibaba Tongyi Lab. You are a helpful assistant."}, # 需要時使用系統提示定義身份。
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# 進行文本生成
generated_ids = model.generate(
**model_inputs,
max_new_tokens=10000,
temperature=0.7,
top_p=0.95
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
# 解析思考內容
try:
# 反向查找 151649 (</think>)
index = len(output_ids) - output_ids[::-1].index(151649)
except ValueError:
index = 0
thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
print("思考內容:", thinking_content)
print("回答內容:", content)
✨ 主要特性
- 新穎的強化學習框架:通過漸進式上下文擴展,幫助 LRMs 從短上下文推理過渡到長上下文推理。
- 多組件協同工作:包括預熱監督微調(SFT)階段、課程引導的 RL 階段和難度感知的回顧性採樣機制。
- 混合獎勵函數:結合基於規則和基於模型的二元結果獎勵,平衡精度和召回率。
- 領先的性能表現:在七個長上下文文檔問答基準測試中,超越了 OpenAI-o3-mini 和 Qwen3-235B-A22B 等旗艦模型,與 Claude-3.7-Sonnet-Thinking 表現相當。
📦 安裝指南
# 創建 conda 環境
conda create -n qwenlongl1 python==3.10
conda activate qwenlongl1
# 安裝依賴
pip3 install -r requirements.txt
# 安裝 verl
cd verl
pip3 install -e .
# 安裝 vLLM
pip3 install vllm==0.7.3
# 安裝 flash-attn
pip3 install flash-attn --no-build-isolation
📚 詳細文檔
最新消息
- 2025 年 5 月 28 日:我們發佈了 QwenLong-L1-32B-AWQ,該模型使用 ms-swift 框架進行了 AWQ int4 量化。
- 2025 年 5 月 26 日:我們發佈了 QwenLong-L1-32B,這是首個使用強化學習進行長上下文推理訓練的長上下文 LRM。在七個長上下文文檔問答基準測試中的實驗表明,QwenLong-L1-32B 優於 OpenAI-o3-mini 和 Qwen3-235B-A22B 等旗艦 LRM,性能與 Claude-3.7-Sonnet-Thinking 相當,在最先進的 LRM 中表現領先。
- 2025 年 5 月 26 日:我們發佈了 DocQA-RL-1.6K,這是一個專門的 RL 訓練數據集,包含 1600 個文檔問答(DocQA)問題,涵蓋數學、邏輯和多跳推理領域。
模型發佈
我們發佈了 QwenLong-L1-32B,這是首個使用強化學習進行長上下文推理訓練的長上下文 LRM。以下是評估結果:
處理長文檔
對於總長度(包括輸入和輸出)顯著超過 32768 個標記的輸入,我們建議使用 RoPE 縮放技術來有效處理長文本。我們使用 YaRN 方法驗證了模型在長達 131072 個標記的上下文長度上的性能。
YaRN 的啟用方法
- 修改模型文件:在
config.json
文件中添加rope_scaling
字段:
{
...,
"rope_scaling": {
"rope_type": "yarn",
"factor": 4.0,
"original_max_position_embeddings": 32768
}
}
對於 llama.cpp
,修改後需要重新生成 GGUF 文件。
- 傳遞命令行參數:
- 對於
vllm
,可以使用:
- 對於
vllm serve ... --rope-scaling '{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}' --max-model-len 131072
- 對於
sglang
,可以使用:
python -m sglang.launch_server ... --json-model-override-args '{"rope_scaling":{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}}'
- 對於
llama.cpp
中的llama-server
,可以使用:
llama-server ... --rope-scaling yarn --rope-scale 4 --yarn-orig-ctx 32768
⚠️ 重要提示
如果遇到以下警告:
Unrecognized keys in `rope_scaling` for 'rope_type'='yarn': {'original_max_position_embeddings'}
請將 transformers
升級到 >=4.51.0
。
💡 使用建議
所有知名的開源框架都實現了靜態 YaRN,這意味著縮放因子無論輸入長度如何都保持不變,可能會影響較短文本的性能。我們建議僅在處理長上下文時添加
rope_scaling
配置。此外,建議根據需要修改factor
。例如,如果應用程序的典型上下文長度為 65536 個標記,最好將factor
設置為 2.0。如果平均上下文長度不超過 32768 個標記,我們不建議在此情況下啟用 YaRN,因為這可能會降低模型性能。
數據集
為了構建一個具有挑戰性的 RL 數據集,用於可驗證的長上下文推理,我們開發了 DocQA-RL-1.6K,該數據集包含 1600 個文檔問答問題,涵蓋三個推理領域:
- 數學推理:使用 DocMath 數據集中的 600 個問題,需要對金融報告等長而專業的文檔進行數值推理。對於 DocMath,我們從其驗證分割的每個子集中採樣 75% 的項目用於訓練,25% 用於評估。
- 邏輯推理:使用 DeepSeek-R1 合成 600 個多項選擇題,需要對來自我們精選集合的法律、金融、保險和生產領域的真實文檔進行邏輯分析。
- 多跳推理:從 MultiHopRAG 中採樣 200 個示例,從 Musique 中採樣 200 個示例,強調跨文檔推理。
請下載以下數據集並將其放在 ./datasets/
中,用於訓練和評估:
- RL 訓練數據:DocQA-RL-1.6K。
- 評估數據:docmath、frames、longbench。
訓練
我們提供了使用 DAPO 進行單階段 RL 訓練的基本演示代碼。
啟動本地驗證器
export CUDA_VISIBLE_DEVICES=0
vllm serve "Qwen/Qwen2.5-1.5B-Instruct" \
--host 0.0.0.0 \
--port 23547
啟動 4 節點 RL 訓練
export PROJ_DIR="<YOUR_PROJ_DIR_HERE>"
export MASTER_IP="<YOUR_MASTER_IP_HERE>" # ray 主節點 IP
export NNODES=4 # 總 GPU 節點數
export NODE_RANK=${RANK} # 當前節點的排名
export PORT=6382
export WANDB_API_KEY="<YOUR_WANDB_API_KEY_HERE>"
export WANDB_PROJECT="QwenLong-L1"
export LLM_JUDGE=Y # 'Y': LLM 判斷,'N': 基於規則
export VLLM_ATTENTION_BACKEND=FLASH_ATTN
# 驗證器
export VERIFIER_PATH="Qwen/Qwen2.5-1.5B-Instruct"
export VERIFIER_HOST="<YOUR_VERIFIER_HOST_HERE>"
export VERIFIER_PORT="23547"
ray_start_retry() {
while true; do
ray start --address="${MASTER_IP}:${PORT}"
if [ $? -eq 0 ]; then
break
fi
echo "連接主節點失敗,5 秒後重試..."
sleep 5
done
}
check_ray_status() {
until ray status >/dev/null 2>&1; do
echo "等待 Ray 集群準備就緒..."
sleep 5
done
}
if [ "$RANK" == "0" ]; then
echo "啟動主節點..."
ray start --head --port=${PORT}
check_ray_status
echo "Ray 主節點啟動成功"
else
echo "啟動工作節點..."
ray_start_retry
check_ray_status
echo "成功加入 Ray 集群"
fi
if [ "$RANK" == "0" ]; then
bash ${PROJ_DIR}/scripts/rl_4nodes_dapo.sh 2>&1 | tee ${PROJ_DIR}/logs/rl_log_$(date +%Y%m%d_%H%M%S).txt &
else
sleep 30d
fi
wait
評估
我們在七個長上下文文檔問答基準測試中進行了評估,包括多跳推理基準測試(如 2WikiMultihopQA、HotpotQA、Musique、NarrativeQA、Qasper 和 Frames)以及數學推理基準測試(如 DocMath)。我們報告精確匹配和 LLM 判斷準確率的最大值作為最終得分,與我們的 RL 訓練過程中的獎勵函數保持一致。我們使用 DeepSeek-V3 作為判斷模型,溫度設置為 0.0,以提供可靠的評估。
# 步驟 1. 啟動模型進行評估
export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"
MODEL_NAME="QwenLong-L1-32B"
MODEL_PATH="Tongyi-Zhiwen/QwenLong-L1-32B"
vllm serve ${MODEL_PATH} \
--port 23547 \
--api-key "token-abc123" \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.95 \
--max_model_len 131072 \
--trust-remote-code
# 步驟 2. 為每個數據集生成模型響應
export SERVE_HOST="<YOUR_SERVE_HOST_HERE>" # 例如,127.0.0.1
export SERVE_PORT="23547"
PROJ_DIR="<YOUR_PROJ_DIR_HERE>"
DATA="<YOUR_DATA_HERE>" # 例如,docmath, frames, 2wikimqa, hotpotqa, musique, narrativeqa, pasper
python ${PROJ_DIR}/eval/${DATA}.py \
--save_dir "${PROJ_DIR}/eval/results/${DATA}" \
--save_file "${MODEL_NAME}" \
--model "${MODEL_PATH}" \
--tokenizer "${MODEL_PATH}" \
--n_proc 16 \
--api "openai"
# 步驟 3. 驗證每個數據集的模型響應
export VERIFIER_API="<YOUR_API_KEY_HERE>"
export VERIFIER_URL="https://api.deepseek.com/v1"
PROJ_DIR="<YOUR_PROJ_DIR_HERE>"
DATA="<YOUR_DATA_HERE>" # 例如,docmath, frames, 2wikimqa, hotpotqa, musique, narrativeqa, pasper
python ${PROJ_DIR}/eval/${DATA}_verify.py \
--save_dir "${PROJ_DIR}/results/${DATA}" \
--save_file "${MODEL_NAME}" \
--judge_model "deepseek-chat" \
--batch_size 20
🔧 技術細節
該框架通過漸進式上下文擴展,在 RL 訓練期間增強短上下文 LRMs。它由三個核心組件組成:
- 預熱監督微調(SFT)階段:初始化一個強大的策略。
- 課程引導的 RL 階段:促進從短上下文到長上下文的穩定適應。
- 難度感知的回顧性採樣機制:在不同階段調整訓練複雜度,激勵策略探索。
通過在策略優化過程中戰略性地利用組相對優勢,引導 LRMs 學習有效的推理模式,這對於強大的長上下文基礎和卓越的推理能力至關重要。
📄 許可證
本項目採用 Apache-2.0 許可證。
📚 引用
如果您發現本工作與您的研究或應用相關,請隨時引用我們的工作:
@article{wan2025qwenlongl1,
title={QwenLong-L1: : Towards Long-Context Large Reasoning Models with Reinforcement Learning},
author={Fanqi Wan, Weizhou Shen, Shengyi Liao, Yingcheng Shi, Chenliang Li, Ziyi Yang, Ji Zhang, Fei Huang, Jingren Zhou, Ming Yan},
journal={arXiv preprint arXiv:2505.17667},
year={2025}
}



