OPOD-Qwen2.5-Omni-7B
OPOD (On-Policy Omni Distillation) consolidates separate text, image, and audio teachers
into a
single omni-modal student. This model is the 7B student from the paper
OPOD: On-Policy Omni Distillation, post-trained from
Qwen/Qwen2.5-Omni-7B.
It reaches an overall average of 51.7 across twelve text / vision / audio / omni-modal
benchmarks — +4.8 over the base model and +1.8 over the strongest comparator. The
teachers are discarded after training, so inference uses one model with no teacher-ensemble
latency or memory.
Method
Post-training on pooled multimodal data often fails to preserve the strengths of modality
specialists, and standard on-policy distillation does not extend cleanly to several teachers:
their guidance conflicts on a shared backbone, and symmetric distribution matching imposes a
teacher ceiling. OPOD addresses this with three components:
| Component | Description |
|---|
| One-Sided Teacher Guidance | The token constraint applies only where the routed teacher assigns a higher likelihood than the student, so the student is never pulled back on tokens it already handles better. |
| Adaptive Modality Control | Each modality gets its own constraint budget $\epsilon_m$ and dual weight $\beta_m$, calibrated from a short warm-up instead of sharing one weight. |
| Verification Reward | The routed teacher also verifies the trajectory: correctness-gated answer confidence plus ungated reasoning gain. |
Each student rollout is routed by its input modality to the matching teacher. Teachers are
Qwen3-Omni modality specialists, so this model also demonstrates that OPOD transfers across
model families and tokenizers (MoE teachers → dense Qwen2.5-Omni student).
Results
Accuracy (%) on the paper's twelve benchmarks. Bold = best in the block.
| Model | AIME25 | AIME26 | HQA | MMLU-Pro | GPQA | MMMU | MathV. | ChartQA | A-OKVQA | MMAU | AVQA | OmniBench | Avg. |
|---|
| Base (Qwen2.5-Omni-7B) | 5.0 | 3.3 | 24.1 | 32.5 | 31.8 | 51.7 | 67.5 | 66.2 | 85.1 | 71.4 | 76.8 | 47.2 | 46.9 |
| GRPO (pooled data) | 10.0 | 3.3 | 22.9 | 38.5 | 32.1 | 51.4 | 67.7 | 67.2 | 86.5 | 73.0 | 80.3 | 44.8 | 48.1 |
| Native OPD | 6.7 | 3.3 | 28.8 | 52.4 | 32.3 | 53.1 | 66.8 | 69.1 | 81.7 | 73.1 | 80.0 | 47.3 | 49.5 |
| ExOPD | 6.7 | 8.3 | 29.5 | 52.4 | 30.8 | 51.4 | 66.4 | 73.8 | 82.6 | 72.0 | 78.4 | 46.3 | 49.9 |
| OPOD (this model) | 11.7 | 6.7 | 29.8 | 52.5 | 31.1 | 54.0 | 67.5 | 79.7 | 85.7 | 75.0 | 79.1 | 48.0 | 51.7 |
Highlights:
- +4.8 over base, +3.6 over pooled GRPO, +1.8 over the strongest comparator (ExOPD).
- Ranks 1st or 2nd on 10 of 12 benchmarks.
- Largest base-relative gains: MMLU-Pro +20.0 and ChartQA +13.5.
- The method ordering is identical at 3B, 7B, and 30B — the gain is not tied to one parameter
regime.
Evaluation protocol. Accuracy, temperature 0.7, top-p 0.7, max prompt / response length
8,192 tokens, identical for all methods. Training prompts are disjoint from every benchmark
(exact and normalized-string overlaps removed).
Usage
This model keeps the Qwen2.5-Omni architecture and processor, so it is a drop-in replacement
for the base model.
Prompt format (important)
The model was RL-trained to reason inside
<think></think> and put the final answer inside
<answer></answer>. Use a system prompt of the same form, otherwise accuracy will drop and
answers become harder to parse. The prompts used in the paper are in
eval/prompts/system_prompts.py.
For image / audio / omni multiple-choice questions:
1Please think about this question as if you were a human pondering deeply, carefully
2considering BOTH the visual and the audio information before answering, engaging in an
3internal dialogue using expressions such as let me think, wait, hmm, oh I see, or let's
4break it down, including self-reflection or verification in the reasoning process,
5providing the detailed reasoning between the <think> </think> tags, and finally giving
6only the single option letter (e.g., A, B, C, D, etc.) as the final answer within the
7<answer> </answer> tags.
For text problems:
1You are a careful problem solver. Think step by step inside <think> </think> tags, then
2output the final answer in the exact format requested at the end of the user prompt (do
3not add any extra wrappers around the final answer).
transformers
1from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
2
3model_id = "Tung111/OPOD-Qwen2.5-Omni-7B"
4model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
5 model_id,
6 dtype="auto",
7 device_map="auto",
8 enable_audio_output=False, # only the thinker was post-trained; see Limitations
9)
10processor = Qwen2_5OmniProcessor.from_pretrained(model_id)
11
12SYSTEM = (
13 "You are a careful problem solver. Think step by step inside <think> </think> tags, "
14 "then output the final answer in the exact format requested at the end of the user "
15 "prompt (do not add any extra wrappers around the final answer)."
16)
17
18conversation = [
19 {"role": "system", "content": [{"type": "text", "text": SYSTEM}]},
20 {"role": "user", "content": [
21 {"type": "image", "image": "https://example.com/chart.png"},
22 {"type": "text", "text": "What is the highest value in the chart? "
23 "Put the final answer in <answer></answer>."},
24 ]},
25]
26
27text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
28inputs = processor(text=text, return_tensors="pt").to(model.device)
29
30ids = model.generate(**inputs, max_new_tokens=8192, temperature=0.7, top_p=0.7,
31 do_sample=True, return_audio=False)
32print(processor.batch_decode(ids[:, inputs.input_ids.shape[1]:], skip_special_tokens=True)[0])
On older transformers releases the class is named Qwen2_5OmniModel. Use the processor's
process_mm_info helper for audio and video inputs, exactly as with the base model.
vLLM
1vllm serve Tung111/OPOD-Qwen2.5-Omni-7B \
2 --tensor-parallel-size 2 --max-model-len 16384 \
3 --allowed-local-media-path / --trust-remote-code
Then query the OpenAI-compatible endpoint with the system prompts above.
Training details
| |
|---|
| Base model | Qwen2.5-Omni-7B (dense) |
| Teachers | 3 × Qwen3-Omni modality specialists (text / image / audio), each GRPO-trained |
| Training data | 6,028 modality-balanced verifiable prompts (2,029 text / 2,000 image / 1,999 audio) from public sources |
| Hardware | NVIDIA H20 cluster (16 GPUs for the student, additional GPUs hosting teacher servers) |
| Rollouts | 8 samples per prompt, rollout batch 16, global batch 64 |
| Lengths | 8,192 max prompt, 8,192 max response |
| Verification reward | $w_A = w_B = 0.2$, clipping $C = 2.0$ |
| Modality control | $\epsilon_{\min}=0.02$, 10-step warm-up, $\beta \in [0.1, 1.5]$ |
| Regularization | reference KL kept throughout |
| Precision | bfloat16 |
Limitations
- Post-training targets the thinker (text/reasoning) pathway. The talker / speech-generation
components are inherited unchanged from the base model and were not optimized or evaluated —
load with
enable_audio_output=False for reasoning use cases.
- Optimized for verifiable reasoning with the
<think> / <answer> format; free-form chat,
long-form generation, and speech output are outside the evaluated scope.
- Absolute scores on competition math (AIME) remain low at this scale.
- Single run per configuration with a fixed seed; no multi-seed variance is reported.
- Inherits the base model's biases and knowledge cutoff. Not evaluated for safety alignment.
Citation
1@article{zhao2026opod,
2 title = {OPOD: On-Policy Omni Distillation},
3 author = {Zhao, Tong and Hu, Yuyang and Zhu, Yutao and Li, Reed and
4 Liang, Haijin and Shi, Haibo and Lu, Yu and Dou, Zhicheng},
5 journal = {arXiv preprint arXiv:2607.20918},
6 year = {2026},
7 url = {https://arxiv.org/abs/2607.20918}
8}
License
Derived from Qwen2.5-Omni-7B and released under the same terms as the base model. See the
base model license.