Qwen3-4B-Base-NoThink-GRPO-KL0.001-LR1e-5-bf16-540steps
RL fine-tune of Qwen/Qwen3-4B-Base with thinking disabled, trained with GRPO (PPO-clip, ε = 0.2, KL 0.001) on DAPO-Math-17k using verl.
Table with columns: Hyperparameter, Value| Hyperparameter | Value |
|---|
| Algorithm | GRPO with the PPO clipped objective |
| Clip range | ε = 0.2 / 0.2, dual-clip c = 3 |
| Advantage | GRPO group baseline, divided by the group std |
| Loss aggregation | token-mean |
| Reward | Math-Verify answer correctness (1 / 0) |
| Learning rate | 1e-5, constant, no warmup |
| Weight decay | 0.1 |
| KL penalty / entropy bonus | KL loss 0.001 (low-variance KL to the initial model) / 0 |
| Batch | 128 prompts × 8 rollouts at temperature 1.0; mini-batch 64; 1 update epoch |
| Max prompt / response | 2,048 / 8,192 tokens |
| Training | 540 steps = 4 epochs over DAPO-Math-17k (135 steps per epoch); actor and data-loader seed 42 |
| Precision | bf16 master weights (FSDP), bf16 rollout (vLLM) |
AIME 2024 (30 problems, Avg@16, temperature 1.0, top-p 0.9): best 26.88% at step 190, final 22.08% at step 540.
Weights are bf16 safetensors merged from the bf16 FSDP checkpoints of each step.
main holds the final step (540). Every saved step is a branch named step-<N>: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540.
from transformers import AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("L1nkee/Qwen3-4B-Base-NoThink-GRPO-KL0.001-LR1e-5-bf16-540steps", revision="step-10")