Highlights
VeRL-Omni v0.2.0 focused on three themes:
- Faster diffusion RL: diffusion GRPO training is significantly faster with request-level diffusion rollout batching and FA3 rollout kernels.
- Stable Qwen3-Omni training: Qwen3-Omni support is rebuilt on a refactored omni model base and the
verlv1 trainer, with full multimodal inputs (text, image, and audio) for DPO & GSPO training support. - State-of-the-art model coverage: added FlowGRPO training for LTX-2.3, the SoTA text-to-audio-video model, plus Qwen-Image-Edit support for image editing, and more.
Architecture
Rollout Engine
- Upgraded the rollout stack to vLLM-Omni v0.24 and pinned the companion dependency versions. (#257)
- Migrated the Diffusion Trainer to the
verlv1 architecture, covering both the sync trainer and a separate async rollout path. (#296,#315) - Added request-level diffusion batching with a LoRA weight-update fix, plus rank-local ZMQ route preservation for LoRA updates. (#286,#349)
- Added FA3 kernel support for diffusion rollout. (#261)
- Integrated Qwen-Image step execution into FlowGRPO and MixGRPO, and added NFT and DPO step execution support. (#287,#310)
- Refactored the agent loop to a multi-tokenizer prompt path for SD3.5. (#288)
- Fixed rollout correctness issues around diffusion async semantics, request-batched diffusion log-probs, and final prompt embedding length. (#339,#334,#357)
Training
- Added teacher-anchored continuous distillation losses for diffusion OPD. (#300)
- Added rollout-train log-prob consistency monitoring, logged by default, with a dedicated v1 consistency monitor. (#291,#319)
- Added rollout-server and reward-model-server profiling, including a lightweight profiling recipe for FlowGRPO. (#252,#256)
- Rollout and validation videos are now saved as mp4, and wandb validation video media persists correctly. (#311,#330)
- Supported BAGEL non-LoRA training with PickScore reward. (#218)
- Mitigated CPU memory leaks in data serialization over Ray. (#259)
Reward
- Added DiNa-LRM reward support for SD3.5 FlowGRPO. (#289)
- Added batched PickScore inference for reward scoring. (#346)
- Added CLAP and ImageBind rewards as part of the LTX-2.3 text-to-audio-video recipe. (#341)
- Dropped duplicate reward score metrics in single- and multi-reward training. (#242,#246)
Model & Algorithm Supports
- Reworked Qwen3-Omni on the
verlv1 sync trainer, refactored the omni model base, and added FSDP2 training with text+image inputs. (#253,#258,#312) - Added the Omni DPO stack: an offline MLLM preference dataset pipeline plus Omni DPO config and OmniDPOLoss. (#268,#270)
- Added Qwen-Image-Edit FlowGRPO support and a general image-editing interface. (#238,#260)
- Added LTX-2.3 text-to-audio-video FlowGRPO training with CLAP / ImageBind rewards. (#341)
- Added repo-native BAGEL atomic SFT primitives. (#333)
- Added generic visual-reflection contracts and source adapters. (#313)
Hardware
- Added Ascend NPU Dockerfiles and an install guide; NPU Docker builds now read vLLM backend refs from pins. (#225,#267)
- Extended Qwen3-Omni Thinker to multimodal inputs (image, text, audio -> text) on NPU, and added the MMK12 image2text GSPO recipe on NPU. (#284,#231)
Documentation / Tooling
- Added the L3 Qwen-Image FlowGRPO nightly regression workflow with reviewed baselines. (#303,#344)
- Split GPU smoke CI into label-driven test groups and added L1 CPU coverage reporting. (#233,#263)
- Added contributor-facing agent rules and skills under
.agents/. (#323) - Refreshed docs for config explanation, examples, Qwen-Image-Edit / I2I integration, reward-server profiling, and stale setup guidance. (#324,#316,#273,#281,#318)
- Deprecated the old omni scripts. (#359)
Breaking Changes
- The Diffusion Trainer and Qwen3-Omni stacks now run on the
verlv1 trainer architecture. Custom trainer / rollout code built against the pre-v1 interfaces should migrate before upgrading. (#258,#296,#315) - The rollout stack is pinned to vLLM-Omni v0.24. Refresh dependencies using the current install guide so the aligned vLLM / vLLM-Omni / verl versions are installed together. (#257)
- The old omni scripts are deprecated and will be removed in a future release. (#359)
What's Changed
- [doc] Update Wechat group QR code by @wtomin in #236
- [trainer] feat: support BAGEL non-lora training with pickscore reward by @zhtmike in #218
- [ci] fix: drop all ci labels on PR push/reopen by @wtomin in #240
- [misc] fix: resolve verl-omni and vllm-omni accelerate dependency conflict by @SamitHuang in #241
- [recipe, diffusion] fix: let Ray set Ascend visible devices in Qwen-Image NPU script by @Sky-Trigger in #227
- [docker, doc] feat: add Ascend NPU Dockerfiles and install guide by @Sky-Trigger in #225
- [reward] fix: drop duplicate critic/score metric for single-reward training by @cr-gao in #242
- [reward] fix: drop duplicate reward//score metric for multi-reward training by @cr-gao in #246
- [doc] Update WeChat Group QR Code by @wtomin in #255
- [trainer, doc] feat: profile rollout servers + lightweight profiling recipe for FlowGRPO by @cr-gao in #252
- [vllm_omni, ci, doc] feat: upgrade to v0.24 and pin vllm-omni to fe478a95 by @SamitHuang in #257
- [omni, tests] feat: add general image editing interface by @NancyFyong in #238
- [env] fix: mitigate CPU memory leaks in data serialization over Ray by @Sky-Trigger in #259
- [1/N][omni] feat: Omni model base refactor by @zhtmike in #253
- [omni, rollout, cfg, tests] feat: add Qwen-Image-Edit FlowGRPO support by @NancyFyong in #260
- [docker] read NPU vLLM backend refs from pins by @Sky-Trigger in #267
- [chore] fix: update code owner by @SamitHuang in #272
- [doc] feat: add Qwen-Image-Edit and I2I integration guides by @NancyFyong in #273
- [doc] Update WeChat Group QR Code by @wtomin in #277
- [1/N][ci, tests, doc] test: add L1 CPU coverage reporting by @wtomin in #263
- [trainer, reward, cfg, doc] feat: profile reward-model rollout servers by @cr-gao in #256
- [omni] fix: drop stale vllm-omni 0.22 step-count mapping in BAGEL adapter by @cr-gao in #279
- [diffusion, rollout, cfg] feat: support kernels FA3 for diffusion rollout by @SamitHuang in #261
- [doc, cfg] chore: document reward-server profiling in reward docs by @cr-gao in #281
- [2/N][ci, tests] refactor: split GPU smoke CI into label-driven test groups by @wtomin in #233
- [trainer, doc, tests] feat: log rollout-train log-prob consistency metrics by default by @cr-gao in #291
- [doc] fix: drop incorrect threshold caveat from rollout correction doc by @cr-gao in #292
- [rollout, diffusion] refactor: integrate Qwen-Image step execution into FlowGRPO and MixGRPO by @Sky-Trigger in #287
- [reward, rollout, diffusion] feat: add DiNa-LRM support for SD3.5 FlowGRPO by @GongyeLiu in #289
- [doc] update slack invite link by @wtomin in #298
- [doc] updates wechat group qr code by @wtomin in #301
- [rollout, vllm_omni] feat: request-level diffusion batching with LoRA fix by @SamitHuang in #286
- [doc] chore: update readme by @SamitHuang in #307
- [doc] chore: fix link by @SamitHuang in #308
- [1/N][omni] feat: Owen-3 Omni refactor & support
verlv1 Sync trainer by @zhtmike in #258 - [recipe, doc, reward] feat: add MMK12 image2text recipe for Qwen3-Omni Thinker GSPO based on npu by @wsc16 in #231
- [1/N][data, omni, tests] feat: add Omni-Preference offline MLLM DPO dataset pipeline by @wtomin in #268
- [1/N][trainer,rollout] feat: Support verl v1 for Diffusion Trainer by @knlnguyen1802 in #296
- [rollout, diffusion] feat: support NFT and DPO step execution by @Sky-Trigger in #310
- [1/N][omni] feat: Qwen3-Omni Thinker + FSDP2 supports Text+Image Inputs Training by @zhtmike in #312
- [2/N][cfg, omni, tests] feat: add Omni DPO config and OmniDPOLoss by @wtomin in #270
- [diffusion, cfg, tests] feat: save rollout and validation videos as mp4 by @NancyFyong in #311
- [trainer, algo, cfg] feat: add teacher-anchored continuous distillation losses for diffusion OPD by @cr-gao in #300
- [doc, docker] fix: correct stale setup and training guidance by @WenZheWang in #318
- [doc] chore: Update documentation with examples by @chenyingshu in #316
- [doc] update wechat group qr code by @wtomin in #326
- [doc] feat: add Config Explanation section by @SamitHuang in #324
- [doc, ci, tests] feat: add agent rules and skills under .agents/; fix two no-op sanity hooks by @NancyFyong in #323
- [doc] fix: quote SKILL.md description so GitHub renders front matter by @NancyFyong in #328
- [doc] chore: update gspo readme by @zhtmike in #317
- [trainer, tests, doc] feat: monitor v1 rollout-train consistency by @WenZheWang in #319
- [rollout,tests] fix: preserve request-batched diffusion logprobs by @wtomin in #334
- [doc] fix: make commit-and-pr skill example tool-agnostic by @zhtmike in #338
- [trainer, ci] fix: isolate Ray rendezvous ports for diffusion smoke tests by @wtomin in #335
- [data,tests] feat: add generic visual-reflection contracts and source adapters by @BorisYang326 in #313
- [ci, tests, doc] test: add Qwen-Image FlowGRPO nightly regression by @wtomin in #303
- [rollout] refactor: multi-tokenizer prompt path in agent loop for SD3.5 by @AndyZhou952 in #288
- [omni] feat: qwen3omni thinker supports multimodal inputs (image,text,audio->text) on npu by @ZihaoW123 in #284
- [2/N][trainer,rollout] feat: Support verl v1 for Diffusion Trainer - Seperate Async by @knlnguyen1802 in #315
- [ci] fix: move L3 nightly baseline download to setup job by @wtomin in #344
- [rollout, reward, tests] fix: preserve diffusion async semantics by @WenZheWang in #339
- [trainer, tests] fix: persist wandb validation video media by @NancyFyong in #330
- [reward, perf, tests] feat: batch PickScore inference by @WenZheWang in #346
- [rollout] fix: preserve rank-local ZMQ routes for LoRA weight updates by @Sky-Trigger in #349
- [cfg] fix: fix generated omni yaml by @zhtmike in #350
- [model,tests] feat: add repo-native BAGEL atomic SFT primitives by @BorisYang326 in #333
- [misc] fix: Fix links in README by @chenyingshu in #353
- [rollout, diffusion, doc, reward] feat: Ltx2.3 t2av flowgrpo + clap/imagebind reward by @ZihaoW123 in #341
- [rollout, diffusion] fix: preserve final prompt embedding length by @Wx727 in #357
- [misc] chore: add depreciation message for old omni scripts and fix screte scan ci error by @zhtmike in #359
- [misc] chore: bump version to 0.2.0rc1 by @SamitHuang in #361
- [doc] QR code update by @wtomin in #362
- [recipe, doc] feat: add Qwen3-Omni MMK12 NPU recipe by @Sky-Trigger in #364
- [3/N][omni, data, trainer, tests] feat: wire offline MLLM DPO inputs and OmniDirectPreferenceRayTrainer by @wtomin in #271
- [ci, tests] fix: default L3 nightly to 1 GPU and relax decoded-image dump thresholds by @wtomin in #370
- [diffusion] feat: Add GPU support for wan22 by @ZihaoW123 in #264
- [doc] chore: update readme by @SamitHuang in #371
- [rollout] minor: Fix potential out of memory for Qwen Image Flowgrpo on H800 by @knlnguyen1802 in #369
- [worker, trainer, cfg, tests, doc] feat: teacher runtime MVP for diffusion OPD (#293) by @cr-gao in #325
- [trainer,rollout] bugfix: Fix convergence issue of QwenImage by @knlnguyen1802 in #378
- [trainer] feat: add Qwen3-Omni multimodal DPO training by @wtomin in #269
- [docs] bugfix: Fix chat template for SD3.5 v1 by @knlnguyen1802 in #384
New Contributors
- @cr-gao made their first contribution in #242
- @NancyFyong made their first contribution in #238
- @GongyeLiu made their first contribution in #289
- @WenZheWang made their first contribution in #318
- @chenyingshu made their first contribution in #316
- @BorisYang326 made their first contribution in #313
- @Wx727 made their first contribution in #357
Full Changelog: v0.1.0...v0.2.0