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 in phase_e/harness/runner.py handles 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
Safetensors
Model size
2B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for shanyangmie/qwen3-vl-8b-thinking-physics-r2-sft-v1

Finetuned
(75)
this model