Full trajectory (overall-6): 0.668 @25 → 0.644 @50 → 0.620 @75 → 0.620 @100 → 0.499 @125 (monotone decline; the step-125 drop is catastrophic — charxiv halved, dynamath collapsed). Run died to a vLLM deepstack crash after step 125, but the model was already degrading.
Training
Base model:Qwen/Qwen3-VL-8B-Instruct (cold-start, resume_mode=auto).
Research checkpoint — the cold-start GRPO baseline in a controlled exploration study. Useful mainly as the A/B reference for omr-8b-grpo-ppexplore (the winner). It only marginally beats the zero-shot base (0.668 vs 0.659) at its peak and is unstable (collapses to 0.499 if trained past ~step 100); for actual use prefer the ppexplore checkpoint. Math / visual-reasoning image QA, <think>…</think> then-answer format. No safety/RLHF alignment beyond the base.
Usage
python
from transformers import AutoModelForImageTextToText, AutoProcessorfrom PIL import Imagemodel_id = "ngqtrung/omr-8b-grpo-base"model = AutoModelForImageTextToText.from_pretrained(model_id, dtype="auto", device_map="auto")processor = AutoProcessor.from_pretrained(model_id)messages = [{ "role": "user", "content": [ {"type": "image", "image": Image.open("problem.png")}, {"type": "text", "text": "Solve the problem. Think step by step inside <think>...</think>, then give the final answer."}, ],}]inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt").to(model.device)out = model.generate(**inputs, max_new_tokens=2048)print(processor.batch_decode(out[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True)[0])
Citation / lineage
Base model: Qwen3-VL-8B-Instruct (Qwen team). Inherits the Qwen3-VL license — review the base model's terms; the Apache-2.0 tag refers to this repo's RLVR training artifacts.