HEART77/TIR-Qwen3.5-9B-Thinking
TIR-Qwen3.5-9B-Thinking
Full-parameter SFT of Qwen/Qwen3.5-9B on the cleaned TIR mixture (HEART77/TIR-Training-Data, config thinking_clean, 26,515 rows). One contiguous epoch at a strict 32,768-token maximum length, trained 2026-09-02/03 on 4xA100 80GB with ms-swift 4.5.2 and Megatron Core 0.16.1.
This is the first 9B thinking checkpoint trained after the 2026-09-02 data audit. Compared with the legacy thinking mixture it drops the 2,200-row Cotrain attachment (260 images reused 10x each, fabricated "Simulated output" tool traces, 540 rows leaking the answer inside the reasoning) and corrects the synthetic color / refcoco chain-of-thought numerics by re-executing each shown code block on the real image. See the dataset card for the full audit.
Training data
Known limitations of this mixture for thinking-mode training, carried over from the legacy recipe: only 33% of rows contain a <think> block, the reasoning is short (median 141 characters for AgenticData, 525 for the synthetic set), and 4,000 AgenticData rows are bare single-answer responses without reasoning or code.
Training configuration
- Base model:
Qwen/Qwen3.5-9B; full-parameter SFT, vision tower and aligner frozen - Recipe: thinking (
add_non_thinking_prefix=false,loss_scale=default+ignore_empty_think,truncation_strategy=left,max_pixels=2408448) - Learning rate 1e-5, min 1e-6, cosine decay, warmup fraction 0.05, weight decay 0.1, clip grad 1.0
- Maximum length 32,768; global batch 64; micro batch 1; TP=2, PP=1, sequence parallel; bf16; flash attention
- One epoch = 414/414 optimizer steps, elapsed 5h 29m 6s, final training loss 0.14426088
- Full arguments:
training/args.json; per-step log:training/logging.jsonl
Evaluation
Not yet evaluated at publication time. Results on TIR-Bench and the huawei_benchmark suite (FVQA, SimpleVQA, MMBrowseComp, GAIA) will be added alongside the legacy checkpoint for comparison.
Inference
vllm serve HEART77/TIR-Qwen3.5-9B-Thinking --port 8000 --max-model-len 32768 --reasoning-parser qwen3The model uses the TIR agent format: assistant turns may open with <think>...</think>, emit Python in <code> blocks, receive results as a user turn beginning with Code execution result:, and finish with <answer>...</answer>.
