[doc] feat: document Qwen3-Omni Thinker DAPO support matrix (#446 Phase 5) - #542
Draft
OnePunchMonk wants to merge 12 commits into
Draft
[doc] feat: document Qwen3-Omni Thinker DAPO support matrix (#446 Phase 5)#542OnePunchMonk wants to merge 12 commits into
OnePunchMonk wants to merge 12 commits into
Conversation
Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Assisted-by: AI tooling Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
Assisted-by: AI tooling Signed-off-by: Wenzhe Wang <w_wenzhe@163.com>
…i loop (verl-project#446 Phase 2) Phase 1 (verl-project#456) left the overlong reward buffer disabled everywhere; verl's registered DAPORewardManager already reads reward.reward_kwargs.overlong_buffer_cfg and reward.reward_kwargs.max_resp_len off the config, but verl_omni's reward.yaml never declared reward_kwargs, so any override there was silently dropped for the autogenerated trainer configs. - Add reward.reward_kwargs (overlong_buffer_cfg + max_resp_len) to reward.yaml and regenerate the four _generated_*.yaml trainer configs. - Enable overlong shaping in the DAPO tiny-random smoke test (reward.reward_manager.name=dapo path only; the naive-manager AVQA example is unaffected and documented as such). - Add a CPU test that drives DAPORewardManager directly and asserts the overlong penalty changes the reward on a truncated dummy response — the Phase 2 exit criterion from verl-project#446. - Split the shared launcher-contract test helper so the "no overlong" check only applies to the naive-manager example, and add overlong-specific assertions for the dapo-manager smoke test. This does not touch dynamic sampling (Phase 3) or the reward-loop metrics plumbing beyond what DAPORewardManager already logs in reward_extra_info. Draft: opened for early feedback while GPU LoRA validation on real Qwen3-Omni-30B-A3B-Instruct + gsm8k is still pending (see PR description). Co-authored-by: Claude Code
Co-authored-by: Claude Code
…op (verl-project#446 Phase 3) Confirms the upstream V1 PPOTrainer replay buffer already implements group filtering, so Phase 3 is config-only: adds a dynamic-sampling AVQA launcher with algorithm.filter_groups.enable=true/metric=acc on the streaming DAPO reward path, plus a CPU launcher-contract test.
…l-project#446 Phase 4) Applies the Phase 1-3 DAPO contract (token-level clip-higher, dynamic sampling, overlong shaping) to a second modality, MMK12 math reasoning, reusing the existing mmk12_reward.py scorer and data pipeline. Adds a CPU launcher-contract test mirroring the AVQA one.
…ject#446 Phase 5) Adds a DAPO row (WIP) to the top-level README support matrix, a recipe comparison table, and an explicit warning that reward.reward_manager.name=dapo alone does not select the DAPO algorithm.
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
A newly added CPU test uses AutoTokenizer.from_pretrained("gpt2"), which is likely to break or slow CI due to network/model download requirements.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Adds Qwen3-Omni Thinker × DAPO documentation (support matrix + recipes) and the underlying config/test scaffolding needed to make the DAPO reward/algorithm knobs survive config conversion and be exercised in CPU/e2e checks.
Changes:
- Document DAPO support status for Qwen3-Omni Thinker in the top-level README support matrix and add a DAPO trainer example write-up + recipe comparison.
- Extend reward config schema with
reward.reward_kwargs(overlong buffer/max response length) and regenerate trainer configs. - Make
OmniAlgoConfiginherit upstreamAlgoConfigand add CPU/e2e tests + launchers to validate the Phase 1–4 DAPO contract.
File summaries
| File | Description |
|---|---|
| verl_omni/trainer/config/reward/reward.yaml | Adds reward_kwargs pass-through for reward-manager-specific knobs (e.g., DAPO overlong buffer). |
| verl_omni/trainer/config/algorithm.py | Switches OmniAlgoConfig to inherit from upstream AlgoConfig. |
| verl_omni/trainer/config/_generated_omni_trainer.yaml | Regenerated config to include reward_kwargs. |
| verl_omni/trainer/config/_generated_omni_megatron_trainer.yaml | Regenerated config to include reward_kwargs. |
| verl_omni/trainer/config/_generated_diffusion_veomni_trainer.yaml | Regenerated config to include reward_kwargs. |
| verl_omni/trainer/config/_generated_diffusion_trainer.yaml | Regenerated config to include reward_kwargs. |
| tests/workers/config/test_omni_config_on_cpu.py | Adds assertions that inherited online-policy-gradient fields survive Hydra → dataclass conversion. |
| tests/utils/test_qwen3_omni_dapo_launcher_on_cpu.py | Adds CPU contract tests ensuring launch scripts encode the expected DAPO settings across phases. |
| tests/utils/test_dapo_overlong_reward_on_cpu.py | Adds a CPU test asserting overlong shaping changes reward output. |
| tests/special_e2e/run_dapo_qwen3_omni_thinker_lora_v1_smoke.sh | Adds a tiny-random multi-GPU smoke script for DAPO + overlong buffer. |
| README.md | Adds a WIP DAPO row for Qwen3-Omni-Thinker in the algorithm support matrix. |
| examples/dapo_trainer/README.md | Adds DAPO recipe documentation and phase-by-phase explanation/warnings. |
| examples/dapo_trainer/qwen3_omni/run_qwen3_omni_thinker_dapo_lora_v1.sh | Adds Phase 1 baseline AVQA launcher (no dynamic sampling / no overlong). |
| examples/dapo_trainer/qwen3_omni/run_qwen3_omni_thinker_dapo_dynamic_sampling_lora_v1.sh | Adds Phase 3 AVQA launcher with group filtering + streaming reward path. |
| examples/dapo_trainer/qwen3_omni/run_qwen3_omni_thinker_dapo_lora_mmk12_v1.sh | Adds Phase 4 MMK12 launcher with dynamic sampling + overlong shaping. |
| docs/index.md | Adds DAPO trainer docs page to the Sphinx toctree. |
Review details
- Files reviewed: 17/17 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+49
to
+50
| tokenizer = AutoTokenizer.from_pretrained("gpt2") | ||
| return DAPORewardManager(config, tokenizer, _compute_score) |
Comment on lines
+183
to
+195
| <td rowspan="3">Qwen3-Omni-Thinker</td> | ||
| <td rowspan="3">Omni-modality</td> | ||
| <td rowspan="3">Text / Image / Video / Audio</td> | ||
| <td>DPO</td> | ||
| <td>✅</td> | ||
| </tr> | ||
| <tr> | ||
| <td>GSPO</td> | ||
| <td>✅</td> | ||
| </tr> | ||
| <tr> | ||
| <td>DAPO</td> | ||
| <td>WIP</td> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Phase 5 of #446 (Qwen3-Omni Thinker DAPO): docs and support
matrix, the final phase of the RFC.
Stacked on #541 (Phase 4), which is stacked on #540 (Phase 3), #502
(Phase 2), and #456 (Phase 1) — none merged yet. This branch is built on
top of
dapo-p4-mmk12-recipe, so the diff againstmainincludes all fourPRs' commits. Please review only the commit on top
(
feat: document Qwen3-Omni Thinker DAPO support matrix (#446 Phase 5))until the earlier phases land; I'll rebase and shrink the diff as each
merges.
What's actually wired
Qwen3-Omni-Thinker × DAPOrow (markedWIP, since Phases 1-4above are not yet GPU-validated by a maintainer) to the top-level
README.mdalgorithm support matrix.examples/dapo_trainer/README.mdlistingall three launchers (Phase 1 baseline, Phase 3 dynamic sampling, Phase 4
MMK12) against dynamic-sampling/overlong-buffer support.
criterion:
reward.reward_manager.name=dapoalone selects only the DAPOreward manager, not the algorithm — the algorithm is selected by
actor_rollout_ref.actor.policy_loss.loss_modeandalgorithm.adv_estimator.Test plan
Docs-only change. No code paths touched; nothing to run beyond confirming
the markdown tables render (checked locally).
AI usage disclosure
Claude Code was used to draft this documentation from the RFC's stated
Phase 5 exit criterion and the launchers added in Phases 1-4. A human
submitter (onepunchmonk) will review every changed line before taking this
out of draft.