--- license: apache-2.0 base_model: Qwen/Qwen3-VL-8B-Thinking tags: - physics - tool-use - sympy - reasoning - sft - cold-start - multimodal-rl - qwen language: - en --- # 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](https://huggingface.co/datasets/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} sympy: {symbolic expression} {result} {continued reasoning} \boxed{ANSWER} ``` At inference time, a runtime harness intercepts each `...` call, executes the SymPy expression in a sandboxed subprocess, injects the result back as `...`, and lets the model continue. The harness lives in the [physics-r2-progress repo](https://github.com/shanyang-me/physics-r2-progress) 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 ```python 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: ```python 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 `...` pattern from training data. At inference, the harness is the only legitimate source of `` 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](https://huggingface.co/datasets/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.