Qwen3-4B · SC · 最终 checkpoint

本模型是对 verl Score Centering 实现的独立复现实验产物,基于 Qwen3-4B 进行异步数学强化学习全参数训练。此版本来自 第 500 步,以 BF16 safetensors 导出;不包含优化器状态。不是 Qwen 或 verl 官方发布模型。

训练概况

四组对照分别为 PG、TIS、SC、SC+TIS,均训练 500 步、seed=42。使用 GRPO 组内中心化优势(不除以标准差)和 REINFORCE 更新;PG 是不使用 SC/TIS 的对照,不是 PPO clipping。SC 使用 top-128;TIS 使用 token 级重要性采样截断,阈值 2。

  • 硬件:8×A100 80GB,4 卡训练、4 卡 rollout;FSDP2,vLLM TP=2。
  • 数据:DAPO-Math-17k-Processed 的 all/train,17,398 条;按 prompt 长度过滤后 17,390 条。
  • 每批 32 道题,每题采样 5 个回答;每批更新 1 个 epoch。
  • AdamW:恒定学习率 1e-6,weight decay 0.01,梯度裁剪 1.0。
  • thinking 模式;prompt 上限 1,024 token,回答上限 8,192 token;temperature=1、top_p=1、top_k=-1。
  • 使用 verl 官方 math_dapo 判分,答对 +1,否则 -1;无额外 KL/熵正则。
  • 异步权重每步同步,最大陈旧阈值 4,超限丢弃。SC+TIS 在 200 步恢复续训,SC 在 20 步恢复续训;其他组连续训练。异步恢复并非逐位可复现。

源码:复现仓库,训练脚本版本 55640933cac566b5ccf9250d03b30b435b2a056d;verl 固定为 8718ca30a3f002f93b7c4fd99b9b2506718681bc(PR #8010)。数据 revision 为 31dd309567e3da778038cc87d868b6097a3ccf68。

评测结果

以下数值来自训练期间记录的该 checkpoint 评测,不是导出后的独立复评。AIME2024、AIME2025 各 30 道题,每题采样 8 次;mean@8 为平均正确率,不是 pass@8。评测 temperature=1,回答上限 8,192 token。

checkpoint AIME2024 mean@8 AIME2025 mean@8 两者平均
第 500 步(最终) 53.75% 41.67% 47.71%

四组第 500 步对照:

方法 AIME2024 AIME2025 平均
SC+TIS 55.00% 41.67% 48.33%
SC 53.75% 41.67% 47.71%
TIS 50.42% 46.25% 48.33%
PG 50.00% 43.33% 46.67%

指标图

评测曲线为原始记录,不作平滑。恢复步数处采用恢复后的重新评测值,因此可能与上一阶段末次采样评测略有不同。

四组 AIME 评测曲线

训练曲线使用向后 20 步移动平均;完整数值见 metrics.json。

四组训练奖励、回答长度与截断率

在线实验记录 · 复现博客

使用

使用支持 Qwen3 的 Transformers 加载本仓库,沿用 tokenizer 的 chat template,并设置 enable_thinking=True。建议从训练同样的 temperature=1、top_p=1、max_new_tokens=8192 开始测试。此仓库的 generation_config.json 不代表训练评测的全部参数,请显式传入采样参数。

局限与 checkpoint 选择

每种方法只有一个随机种子,基准规模较小且采样评测有波动,不能据此断言 SC 显著优于 TIS。最佳 checkpoint 按 AIME2024/2025 mean@8 的算术平均选取,因此这些基准已参与模型选择,并非独立测试集。模型面向数学训练复现,尚未系统评估通用能力保持情况。

训练前进行了训练集与评测集的文本重叠检查,但不能排除语义重叠或基础模型预训练污染。导出校验与测试范围见 verification.json。权重使用基础模型的 Apache-2.0 许可,许可证随仓库提供。

加载示例

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_id = "Palind/Qwen3-4B-SC-repro-final"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
text = tokenizer.apply_chat_template(
    [{"role": "user", "content": "求方程 x^2 - 5*x + 6 = 0 的解。"}],
    tokenize=False, add_generation_prompt=True, enable_thinking=True,
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
output = model.generate(**inputs, do_sample=True, temperature=1.0, top_p=1.0, top_k=0, max_new_tokens=8192)
print(tokenizer.decode(output[0, inputs.input_ids.shape[1]:], skip_special_tokens=True))
Downloads last month
220
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Palind/Qwen3-4B-SC-repro-final

Finetuned
Qwen/Qwen3-4B
Finetuned
(1209)
this model

Dataset used to train Palind/Qwen3-4B-SC-repro-final

Collection including Palind/Qwen3-4B-SC-repro-final