Qwen3-VL-8B-Thinking — Physics-R2 SFT Cold-Start v1
Stage-1 cold-start checkpoint for the Physics-R2 project (a tool-use RL paper for VLMs, targeting ICLR 2027).
Fine-tuned from Qwen/Qwen3-VL-8B-Thinking on 1,776 audited tool-using physics
trajectories from shanyangmie/physr1corp-cold-start.
What this model does
Given a physics problem, the model emits a structured reasoning trajectory that uses a SymPy tool mid-stream:
{brief reasoning}
<tool>sympy: {symbolic expression}</tool>
<tool_result>{result}</tool_result>
{continued reasoning}
<answer>\boxed{ANSWER}</answer>
At inference time, a runtime harness intercepts each <tool>...</tool> call, executes the SymPy expression in a sandboxed subprocess, injects the result back as <tool_result>...</tool_result>, and lets the model continue.
The harness lives in the physics-r2-progress repo under phase_e/harness/.
Training details
| Hyperparameter | Value |
|---|---|
| Base model | Qwen/Qwen3-VL-8B-Thinking |
| Training framework | TRL SFTTrainer on FSDP1 |
| GPUs | 4× H200 SXM 141GB |
| Optimizer | AdamW (β=[0.9, 0.95], wd=0.01) |
| Learning rate | 2e-5, cosine decay to 10%, 30 warmup steps |
| Effective batch | 16 (2 per device × 2 grad accum × 4 GPUs) |
| Sequence length | 4096 |
| Epochs | 3 (note: eval loss minimum at epoch 2) |
| Precision | bfloat16 mixed |
| Visual tower | frozen (text-only SFT for v1) |
| Wall time | ~18 minutes |
Results
| Metric | Value |
|---|---|
| Train loss (final) | 0.13 |
| Eval loss (epoch 1) | ~0.54 |
| Eval loss (epoch 2) | ~0.55 |
| Eval loss (epoch 3, final) | 0.61 |
| Eval token accuracy | 84.7% |
Note: eval loss bottomed at epoch 2 (~0.55) and rose slightly at epoch 3 (0.61). The v1 checkpoint here is the epoch-3 model; a future v2 may use the epoch-2 checkpoint or 2-epoch training.
Usage
from transformers import AutoProcessor, Qwen3VLForConditionalGeneration
import torch
model = Qwen3VLForConditionalGeneration.from_pretrained(
"shanyangmie/qwen3-vl-8b-thinking-physics-r2-sft-v1",
dtype=torch.bfloat16,
device_map="auto",
)
processor = AutoProcessor.from_pretrained("shanyangmie/qwen3-vl-8b-thinking-physics-r2-sft-v1")
For inference with the SymPy tool actually executing, use the harness:
import sys; sys.path.insert(0, "/path/to/physics-r2-progress/phase_e")
from harness.runner import run_with_tools
# ... see phase_e/sft/eval_sft.py for full example
Limitations & known issues
- Visual tower frozen during SFT v1. The 233 multimodal training rows (image-bearing physics problems) were trained text-only. The model has not learned to use figure content; multimodal Q&A will not benefit from the figure. A v2 multimodal SFT is planned.
- Mild overfit at epoch 3. Eval loss rose ~10% from epoch 2 to epoch 3. Use with that caveat or wait for v2.
- Result hallucination risk at inference. The model was trained to emit the full
<tool>...</tool_result>pattern from training data. At inference, the harness is the only legitimate source of<tool_result>content. If the inference loop is not properly wired, the model may emit hallucinated tool results. The harness inphase_e/harness/runner.pyhandles this correctly.
Citation
Anonymous (in preparation), 2026. Physics-R2: Tool-Use RL for Physics VLMs. ICLR 2027.
Underlying corpus and cold-start dataset:
- shanyangmie/physr1corp-cold-start — the SFT training dataset (1973 audited trajectories)
- Anonymous, 2026. Physics-R1: An Audited Olympiad Corpus and Recipe for Visual Physics Reasoning. NeurIPS 2026 D&B.
- Downloads last month
- 87
Model tree for shanyangmie/qwen3-vl-8b-thinking-physics-r2-sft-v1
Base model
Qwen/Qwen3-VL-8B-Thinking