Skip to content

[model] fix: add Qwen3.5 VL to _TEXT_TO_VL_FAMILY for unified checkpoint support - #7433

Merged
wuxibin89 merged 4 commits into
verl-project:mainfrom
qy0720:fix-qwen35-vl-support
Aug 19, 2026
Merged

wuxibin89 merged 4 commits into
verl-project:mainfrom
qy0720:fix-qwen35-vl-support

Conversation

@qy0720

@qy0720 qy0720 commented Aug 15, 2026 •

Copy link
Copy Markdown
Contributor

What does this PR do?

Fixes continuous token builder creation for Qwen3.5 VL unified checkpoints. Their HF model_type is qwen3_5 / qwen3_5_moe (same as the text models), so the wiring resolves them to the text family QWEN35. Since QWEN35 was missing from _TEXT_TO_VL_FAMILY, passing a multimodal processor raised ValueError: Model resolved to the text Continuous Token family 'qwen35', but a multimodal processor was provided, making Qwen3.5 VL unusable for multimodal RL training. This PR adds the QWEN35 -> QWEN3_VL upgrade entry, mirroring the existing DEFAULT -> VL_DEFAULT and GEMMA4 -> GEMMA4_VL entries.

Checklist Before Starting

  • Search for similar PRs. Paste at least one query link here: https://github.com/verl-project/verl/pulls?q=is%3Apr+qwen3_5+continuous+token
  • Format the PR title as [{modules}] {type}: {description} (This will be checked by the CI)
    • {modules} include fsdp, megatron, veomni, sglang, vllm, rollout, trainer, ci, training_utils, recipe, hardware, deployment, ray, worker, single_controller, misc, perf, model, algo, env, tool, ckpt, doc, data, cfg, reward, fully_async, one_step_off
    • If this PR involves multiple modules, separate them with , like [megatron, fsdp, doc]
    • {type} is in feat, fix, refactor, chore, test
    • If this PR breaks any API (CLI arguments, config, function signature, etc.), add [BREAKING] to the beginning of the title.
    • Example: [BREAKING][fsdp, megatron] feat: dynamic batching

Test

Added a CPU unit test test_qwen35_unified_with_processor_upgrades_to_vl in tests/utils/test_continuous_token_on_cpu.py (class TestWiringVLFactory), parametrized over qwen3_5 and qwen3_5_moe. It asserts that a Qwen3.5 unified checkpoint plus a multimodal processor now resolves to QwenVLContinuousTokenBuilder with supports_multimodal() == True. The test fails on main with the ValueError above and passes with this fix. Also verified end-to-end locally by launching multimodal RL training with a Qwen3.5 MoE unified checkpoint, which previously crashed at builder creation.

API and Usage Example

No API change. Existing entrypoint now works for Qwen3.5 VL unified checkpoints:

Design & Code Changes

  • verl/utils/tokenizer/continuous_token_wiring.py: add ContinuousTokenModelFamily.QWEN35: ContinuousTokenModelFamily.QWEN3_VL to _TEXT_TO_VL_FAMILY (one-line change, follows the established upgrade-map pattern).
  • tests/utils/test_continuous_token_on_cpu.py: new parametrized unit test covering the upgrade path.

Checklist Before Submitting

Important

Please check all the following items before requesting a review, otherwise the reviewer might deprioritize this PR for review.

@gxlvera

gxlvera commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

@wuxibin89 This PR fixed the bug mentioned here:#6804 (comment). I have reviewed.

@qy0720 qy0720 changed the title fix: add Qwen3.5 VL to _TEXT_TO_VL_FAMILY for unified checkpoint support [model] fix: add Qwen3.5 VL to _TEXT_TO_VL_FAMILY for unified checkpoint support Aug 17, 2026
@CLAassistant

CLAassistant commented Aug 17, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@wuxibin89
wuxibin89 merged commit 549e5bf into verl-project:main Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants