Understanding the Synergy between SFT, RLVR, and OPD in LLM Post-Training
Organizations: Salesforce AI Research · UIUC
Abstract
Modern LLM post-training composes supervised fine-tuning (SFT), reinforcement learning with verifiable rewards (RLVR), and on-policy distillation (OPD) into multi-stage pipelines, yet these stages are typically designed and evaluated in isolation. We show that this composition is consequential: a stage that improves the current model can make the next stage less effective. Through controlled experiments with Qwen3 models on math and science reasoning, we first characterize OPD across nine student-teacher pairs spanning 2x to 53x parameter ratios and show that OPD effectiveness depends on student-teacher compatibility rather than teacher scale alone. The surrounding stages of OPD reshape this compatibility in three ways: (1) A brief SFT warm-up improves subsequent OPD, while an RLVR-strengthened student regresses under distillation from the same teacher. (2) Adapting the teacher with RLVR raises downstream OPD accuracy in proportion to the capability it adds. Following these two interventions, we find that combining teacher adaptation and student warm-up alone raise average OPD accuracy from 29.2% to 43.8% (50% relative improvement) after the same number of distillation steps, with additional preparatory training. (3) At comparable accuracy, OPD leaves a stronger initialization for downstream RLVR than SFT, with a gap that widens as RL compute scales. Our results suggest that each post-training stage should be chosen not only for the capability it adds, but for the learning interface it creates for the next stage.
Figures & tables
Appendix figures & tables33 assets
Supplementary material from the paper’s appendix.
Appendix
| Setting | Value |
|---|---|
| Training data | DAPO-Math-17k |
| Parameter update | Full-parameter training, LoRA rank |
| Optimizer | AdamW |
| Learning rate / | / |
| Schedule / warm-up | Constant learning rate / 10 steps |
| Weight decay / gradient norm clipping | / |
| Setting | Value |
|---|---|
| Student / teachers | Qwen3-4B-Base / Qwen3-{8B, 14B, 32B} |
| Training data | DAPO-Math-17k |
| Loss mode / top- | forward_kl_topk / |
| Update | Direct distillation loss with policy-gradient mode disabled |
| Optimizer / learning rate | AdamW / |
| Schedule / warm-up | Constant learning rate / 10 steps |
| Setting | Value |
|---|---|
| Primary benchmarks | AIME 2024, AIME 2025, AMC 2023, MATH-500, Minerva Math, OlympiadBench, GPQA-Diamond |
| Responses per question | 4 |
| Temperature / top- / top- | / / disabled |
| Prompt / response limit | 2,048 / 32,768 tokens |
| Per-benchmark score | Mean correctness over four responses ( mean@4 ) |
| Configured evaluator | ttrl_math.reward_func in verl |
| Dataset | Unique prompts | Average prompt tokens |
|---|---|---|
| Training | ||
| DAPO-Math-17k | 17,917 | 122 |
| OpenThoughts3-Math | 30,000 | 113 |
| Evaluation | ||
| AIME 2024 | 30 | 150 |
| AIME 2025 | 30 | 145 |
| Student | Teacher | Gain 260 | DE 260 (%) | ||
|---|---|---|---|---|---|
| 0.6B | 8B | 14.29 | 14.91 | +12.65 | 33.4 |
| 0.6B | 14B | 15.00 | 13.24 | +10.99 | 27.6 |
| 0.6B | 32B | 13.66 | 13.24 | +10.99 | 27.1 |
| 1.7B | 8B | 23.00 | 22.26 | +11.47 | 39.1 |
| 1.7B | 14B | 20.95 | 20.13 | +9.34 | 29.8 |
| 1.7B | 32B | 20.34 | 21.36 | +10.58 | 33.0 |
| Teacher | (%) | Gain | DE (%) | Peak (%) | |
|---|---|---|---|---|---|
| 16 | 8B | 33.66 | +14.77 | 69.7 | 34.43 |
| 16 | 14B | 34.48 | +15.59 | 67.2 | 34.48 |
| 16 | 32B | 31.79 | +12.91 | 54.0 | 33.48 |
| 32 | 8B | 34.22 | +15.33 | 72.3 | 35.11 |
| 32 | 14B | 34.39 | +15.50 | 66.8 | 35.28 |
| 32 | 32B | 32.64 | +13.75 | 57.5 | 33.12 |
| Student | State | Initial | Qwen2.5-7B/Qwen3-8B teacher | 14B teacher | 32B teacher |
|---|---|---|---|---|---|
| Qwen3-1.7B | Base | 10.79 | 23.00 (+12.22) | 20.95 (+10.16) | 20.34 (+9.55) |
| Qwen3-1.7B | Post-trained | 29.51 | 29.82 (+0.31) | 31.17 (+1.65) | 29.18 (-0.33) |
| Qwen3-4B | Base | 18.89 | 32.70 (+13.81) | 29.23 (+10.34) | 29.25 (+10.36) |
| Qwen3-4B | Post-trained | 39.58 | 38.03 (-1.55) | 39.28 (-0.31) | 37.69 (-1.89) |
| Qwen2.5-1.5B | Base | 1.30 | 19.85 (+18.54) | 20.01 (+18.71) | 20.44 (+19.14) |
| Qwen2.5-1.5B | Instruct | 18.08 | 20.69 (+2.61) | 20.56 (+2.48) | 20.73 (+2.66) |
| Student | Teacher size | Base | Post | Base peak | Post peak |
|---|---|---|---|---|---|
| 1.7B | 8B | 19.66 | 23.00 | 21.50 | 23.00 |
| 1.7B | 14B | 22.30 | 20.95 | 23.54 | 23.14 |
| 4B | 8B | 25.05 | 32.70 | 31.52 | 33.38 |
| 4B | 14B | 30.81 | 29.23 | 32.35 | 33.49 |
| 8B | 14B | 31.19 | 29.34 | 33.32 | 35.10 |
| DAPO-Math | OpenThoughts-Math | ||
|---|---|---|---|
| Teacher | Step 200 | Step 200 | Step 240 |
| 8B | 31.29 | 31.10 | |
| 14B | 28.80 | 29.18 | |
| 32B | 28.00 | 30.35 | |
| Benchmark / aggregate | 8B teacher | 14B teacher | 32B teacher |
|---|---|---|---|
| AIME 2024 | |||
| AIME 2025 | |||
| AMC 2023 | |||
| MATH-500 | |||
| Minerva Math | |||
| OlympiadBench |
| Student | 0.6B | 1.7B | 4B | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Teacher | 8B | 14B | 32B | 8B | 14B | 32B | 8B | 14B | 32B |
| Initial rKL | 0.740 | 0.680 | 0.648 | 0.447 | 0.478 | 0.426 | 0.370 | 0.376 | 0.382 |
| (%) | 37.32 | 33.20 | 29.39 | 53.34 | 49.12 | 34.37 | 54.79 | 47.83 | 33.11 |
| Step 200 | Step 260 | |||||
|---|---|---|---|---|---|---|
| Selector | 0.6B | 1.7B | 4B | 0.6B | 1.7B | 4B |
| Largest teacher | 1.35 | 2.67 | 3.44 | 1.67 | 0.89 | 2.92 |
| Smallest teacher | 0.71 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| Largest | 0.71 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| Smallest initial rKL | 1.35 | 2.67 | 0.00 | 1.67 | 0.89 | 0.00 |
| Stopping rule | Mean step | Accuracy (%) | Gap (pp) | Updates saved (%) |
|---|---|---|---|---|
| Fixed step 40 | 40.0 | 33.13 | 0.10 | 84.6 |
| Fixed step 60 | 60.0 | 31.41 | 1.82 | 76.9 |
| Fixed step 100 | 100.0 | 27.92 | 5.31 | 61.5 |
| Fixed step 200 | 200.0 | 30.39 | 2.84 | 23.1 |
| Fixed step 260 | 260.0 | 29.75 | 3.48 | 0.0 |
| 66.7 | 30.13 | 3.11 | 74.4 |
| Setting | Student SFT Warm-Up |
|---|---|
| Starting student | Qwen3-4B-Base |
| Solution generator | Qwen3-14B |
| Prompt source | OpenThoughts-Math |
| Supervision | Fixed teacher-generated solutions |
| Update scope | Full-parameter SFT |
| Training backend / GPUs | FSDP / 8 |
| Setting | Student RLVR Warm-Up |
|---|---|
| Starting student | Qwen3-4B-Base (Thinking Disabled) |
| Algorithm | GRPO |
| Warm-up data | OpenThoughts-Math |
| Reward | Verifiable outcome (binary) |
| Update scope | Full-parameter training |
| Prompt / PPO minibatch size | 64 / 64 |
| Setting | Downstream OPD |
|---|---|
| Student initialization | Selected SFT checkpoint |
| Teacher | Qwen3-14B |
| Training data | DAPO-Math-17K |
| Objective | Sampled-token reverse KL policy gradient |
| Task rewards / auxiliary KL loss | Disabled / disabled |
| Optimizer | AdamW |
| SFT Checkpoint | Initial (%) | Peak (%) | Peak | Final (%) | Drop |
|---|---|---|---|---|---|
| 25 | 30.68 | 30.87 | 40 | 29.15 | 1.71 |
| 75 | 31.25 | 35.06 | 140 | 34.65 | 0.41 |
| 150 | 33.42 | 35.39 | 160 | 35.30 | 0.09 |
| 250 | 33.81 | 35.08 | 180 | 35.08 | 0.00 |
| 348 | 33.85 | 35.18 | 60 | 34.48 | 0.70 |
| SFT Checkpoint | OPD Step | Student Entropy | Reverse KL |
|---|---|---|---|
| 25 | 1 | 0.2940 | 0.1417 |
| 75 | 1 | 0.2559 | 0.1227 |
| 150 | 1 | 0.1950 | 0.1028 |
| 250 | 1 | 0.1507 | 0.1153 |
| 348 | 1 | 0.1580 | 0.1117 |
| Setting | SFT Teacher |
|---|---|
| Starting teacher | Qwen3-14B (Thinking Disabled) |
| Adaptation data | OpenThoughts3-Math |
| SFT format | Full-parameter |
| Supervision | Fixed, verified self -generated solutions |
| Unique prompts in batch | 64 |
| Learning rate |
| Setting | RLVR-Adapted Teacher |
|---|---|
| Starting teacher | Qwen3-14B |
| Algorithm | GRPO |
| Adaptation data | OpenThoughts-Math |
| Reward | Verifiable outcome (binary) |
| Unique prompts in batch | 64 |
| Responses per prompt / temperature | 8 / 1.0 |
| Setting | SFT/RLVR Teacher |
|---|---|
| Student | Qwen3-4B-Base |
| Training data | DAPO-Math-17K |
| Objective | Sampled-token reverse KL policy gradient |
| Task rewards / auxiliary KL loss | Disabled / disabled |
| Optimizer | AdamW |
| Learning rate / warm-up | / 10 steps |
| Teacher | rKL 0 | (%) | (%) |
|---|---|---|---|
| 50 | 0.505 | 47.23 | 27.41 |
| 100 | 0.476 | 52.40 | 28.00 |
| 150 | 0.555 | 49.08 | 29.16 |
| 200 | 0.530 | 52.97 | 29.77 |
| Setting | Qwen3 family | Qwen2.5 family |
|---|---|---|
| Supported base students | 0.6B, 1.7B, 4B | 1.5B |
| Teacher | Qwen3-14B | Qwen2.5-14B-Instruct |
| Training data | OpenThoughts3-Math | |
| Supervision | Fixed, verified teacher-generated solutions | |
| Unique prompts in batch | 64 | 64 |
| Microbatch per GPU | 4 | 4 |
| Setting | Qwen3 family | Qwen2.5 family |
|---|---|---|
| Supported base students | 0.6B, 1.7B, 4B | 1.5B, 3B |
| Teacher | Qwen3-14B | Qwen2.5-14B-Instruct |
| Training data | OpenThoughts3-Math | |
| Distillation objective | Sampled-token policy gradient reverse-KL | |
| Task rewards | Disabled | Disabled |
| Prompt / PPO minibatch size | 64 / 64 | 64 / 64 |
| Setting | Qwen3 family | Qwen2.5 family |
|---|---|---|
| Algorithm | GRPO | GRPO |
| Training data | DAPO-Math-17K | DAPO-Math-17K |
| Reward | Verifiable outcome reward ( ttrl_math.reward_func ) | |
| Prompt / PPO minibatch size | 64 / 64 | 64 / 64 |
| Responses per prompt | 8 | 8 |
| Rollout temperature | 1.0 | 1.0 |
| Schedule | Round | rKL | Acc. (%) | |
|---|---|---|---|---|
| Fixed | 1 | .42 | .48 | 19.5 |
| Fixed | 2 | .39 | .46 | 19.0 |
| Fixed | 3 | .38 | .45 | 18.5 |
| Fixed | 4 | .38 | .44 | 16.6 |
| Reverse | 1 | .43 | .47 | 19.8 |
| Progressive | 4 | .41 | .44 | 21.4 |