Method
- Teacher: Qwen/Qwen3.5-9B, non-thinking mode, 2 samples per prompt, T 0.7, top-p 0.8.
- Prompts: a fixed list of 6,000 problems sampled with seed 0 from a decontaminated public pool (4,500 SimpleRL-Zoo
level 3-5 math problems, 1,500 GSM8K-train), with the suffix "Please reason step by step, and put your final answer
within \boxed{}."
- Filtering: keep a sample only if its boxed answer verifies against the gold answer, it is not truncated, it has no
repeated 20-gram, and it is at most 2,048 tokens; keep the shortest correct sample per prompt. The traces were scanned
again for 10-gram overlap with every evaluation set.
- Training data: 5,023 verified traces (4,747 used after the 2,048-token length filter, 200 held out for eval loss).
- Training: LoRA r 32, alpha 64, dropout 0, on all attention, linear-attention and MLP projections of the language
model; fp16, sequence 2,048, effective batch 16, lr 1e-4 cosine, adamw_8bit, 594 optimizer steps, 2 epochs, on a Kaggle T4.
- Checkpoint: epoch 2, chosen between the epoch-1 and epoch-2 adapters on a 150-item dev set (D_dev) before any
test evaluation.
No evaluation data and no temporal hold-out problems were used for training.
Evaluation
All models were evaluated with one identical harness: non-thinking mode, the suffix above, and the pre-registered lite
settings. TMH is a private temporal hold-out of 321 competition math problems published after the base model's
release (JEE Main 2026 Session 2, JEE Advanced 2026, AIME 2026, HMMT February 2026). It is kept private so it stays out
of training corpora; the repository publishes only its provenance manifest. Accuracy in %:
Table with columns: model, TMH, TMH truncated, MATH-500, GSM8K, GSM-Symbolic, D_dev| model | TMH | TMH truncated | MATH-500 | GSM8K | GSM-Symbolic | D_dev |
|---|
| B0 (base Qwen3.5-2B) | 31.1 | 58.4 | 69.0 | 79.4 | 71.6 | - |
| A1 s1 | 30.5 | 47.4 | 66.2 | 81.1 | 74.0 | 71.0 |
| A1 s2 | 33.8 | 49.7 | 70.4 | 82.7 | 74.8 | 71.4 |
| A1 s3 (this adapter) | 29.4 | 51.4 | 70.8 | 82.3 | 76.2 | 70.2 |
| A1-S s1 | 32.9 | 51.6 | 69.4 | 83.2 | 75.2 | 72.4 |
Retention (lm-eval, lite settings, accuracy %):
Table with columns: model, MMLU-Pro, IFEval, ARC-C, BBH, HumanEval+, MBPP+, mean| model | MMLU-Pro | IFEval | ARC-C | BBH | HumanEval+ | MBPP+ | mean |
|---|
| B0 (base Qwen3.5-2B) | 50.0 | 67.1 | 72.6 | 63.7 | 45.1 | 59.5 | 59.7 |
| A1 s1 | 50.1 | 67.7 | 74.3 | 65.3 | 47.6 | 57.7 | 60.5 |
| A1 s2 | 50.4 | 66.9 | 76.5 | 65.8 | 47.6 | 61.1 | 61.4 |
| A1 s3 (this adapter) | 50.1 | 66.5 | 75.4 | 65.2 | 49.4 | 59.0 | 61.0 |
| A1-S s1 | 49.0 | 64.1 | 76.1 | 65.9 | 45.7 | 59.3 | 60.0 |
Over A1's 3 seeds, the mean change from the base is +0.1 points on TMH, +0.1 on MATH-500, +2.6 on GSM8K, +3.4 on
GSM-Symbolic and -8.9 points of TMH truncation. The six-task retention mean moves by under 2 points.
Limitations
- Distillation did not improve the temporal hold-out. The gains are on in-distribution grade-school math
(GSM8K / GSM-Symbolic). The clearest effect is shorter reasoning: fewer answers hit the token budget, while accuracy
among answered TMH problems drops (72.7% for the base, 56-68% for the adapters).
- Training seeds alone spread 4.4 points on TMH and 4.6 on MATH-500, so single-adapter differences are mostly noise.
A1-S has only one seed.
- Every number comes from the time-boxed lite evaluation settings. The per-item paired statistics of the
pre-registered analysis are not computed yet; treat every delta as provisional.
- English math only. The model was not trained for safety, chat quality or tool use beyond the base model.
Usage
The study evaluated the adapters with vLLM LoRA serving (scripts/phase1_select.py in the repository):
from huggingface_hub import snapshot_downloadfrom vllm import LLM, SamplingParamsfrom vllm.lora.request import LoRARequest adapter = snapshot_download("Dratinia/qwen-reasoning-distill-a1-s3")llm = LLM("Qwen/Qwen3.5-2B", enable_lora=True, max_lora_rank=32, max_model_len=8192)msgs = [{"role": "user", "content": "What is 17 * 24?\n\nPlease reason step by step, and put your final answer within \\boxed{}."}]out = llm.chat(msgs, SamplingParams(temperature=0.6, top_p=0.95, top_k=20, max_tokens=4096), chat_template_kwargs={"enable_thinking": False}, lora_request=LoRARequest("qwen-reasoning-distill-a1-s3", 1, adapter))print(out[0].outputs[0].text)
The adapter was trained with Unsloth and PEFT 0.21 on the Qwen3.5 module names (model.language_model.layers.*), so
PEFT loading in transformers needs the base model class used in training (Qwen3_5ForConditionalGeneration).
Provenance
- Code, configs, pre-registration (
EVAL_PROTOCOL.md, git tag prereg-v1), amendments and all aggregate results:
https://github.com/Abhigyan1805/qwen-reasoning-distill
adapter_model.safetensors sha256: d5ce5e817c10e55c611f5fe4b821dec5870faa22df5d612556e69d7c7a3442fa
- License: Apache-2.0, the same licence as the base model.