github verl-project/verl v0.9.1

3 hours ago

Highlights

Trainer

Unified V1 trainer

  • separate_async can now lend idle trainer GPUs to generation: once a step's prompts are submitted, the trainer keeps its replicas in rollout mode until the replay buffer holds enough sampleable groups, driven by an adaptive starvation threshold. Gated behind trainer.v1.separate_async.enable_switch, off by default (#7373).
  • V0-style fully-async semantics for the V1 async trainers (#7884): actor_rollout_ref.hybrid_engine=False under separate_async (rollout served exclusively by the standalone pool), fractional num_warmup_batches (e.g. 1.5), max_off_policy_threshold=null to disable off-policy version control entirely, and the V0-compatible __num_turns__ metric. All knobs are opt-in and default to the previous behavior.
  • Dynamic micro-batch packing now enforces max_token_len strictly instead of treating ceil(total_len / max_token_len) as the micro-batch count — a bound the Karmarkar-Karp split could legitimately exceed (#7553).
  • DAPO group filtering reads the canonical pre-KL reward from rm_scores and algorithm.filter_groups.metric defaults to reward, so dynamic sampling only needs algorithm.filter_groups.enable=True (#7792).
  • trainer.checkpoint_callback_class names a user-defined CheckpointCallback whose on_save hook fires after every checkpoint save, mirroring the HuggingFace TrainerCallback event — an extension point for uploads, model registries and retention policies without forking the trainer (#7513).
  • Async correctness: skip V1 async warmup after an inflight reissue (#7762), count failed validation sessions in accuracy (#7781), reject requests arriving behind a closed gate instead of parking them (#7912), and keep synthetic padding safe under context parallelism (#7593).
  • verl/experimental/fully_async_policy and verl/experimental/one_step_off_policy are deprecated by V1 trainer and will be moved to verl-recipe in next release.

FSDP

  • Liger Kernel v0.8.2's LigerFusedLinearScaledCrossEntropyFunction replaces the experimental fused linear PPO output head when Liger is installed: 13.5% faster actor updates (0.02803 → 0.02424 ms/token, four H100 seeds) and 5.6% lower actor peak memory (35.68 → 33.70 GiB). Without Liger the existing chunked implementation is unchanged (#7461).
  • Non-blocking FSDP2 model transfers (#7347), configurable deferred gradient sync (#7458), and a fix for the model merger concatenating replicated buffers (#7610).
  • New fsdpturbo backend engine (#7362), with its e2e test moved from GPU to NPU (#7633).
  • Qwen3.5-2B on-policy distillation script (#7605) and an updated Qwen3.5-35B GRPO example at 2K prompt / 6K response (#7678).

Megatron

  • Qwen3.5 GRPO training script for the MindSpeed-Bridge and Megatron backends (#7335).
  • VLM THD input padded to TP/CP alignment before the SP scatter (#7702), plus the NPU TND attention-mask shape fix (#7372).
  • R2 router replay is now model-scoped and opt-in (#7805); the earlier THD-packed variant (#7106) was reverted in #7786.
  • DDP gradient dtype aligned with optimizer precision (#7485) and sequence-mean loss allowed together with per-token normalization (#7915).
  • The mindspeedllm backend engine was removed (#7374) and the Megatron Lite doc reframed as a Megatron Agent Compose preview (#7537).

VeOmni

  • DeepSeek-V4 QAT bf16 fake-quant training (#7577) and gpt-oss expert parallelism (#7397).
  • async_activation_offload config (#7724) and routed_experts stored as torch.int16 to cut its memory footprint (#7407).

Rollout

vLLM

  • Pluggable router: the load balancer moves out of llm_server.py into verl/workers/rollout/router.py behind a RequestLoadBalancer protocol and a get_router_handle() factory. rollout.router_config_path loads an external router plugin from YAML by router_class FQN with Hydra defaults composition and pkg:// URIs; with no config the built-in sticky-session + least-inflight balancer is unchanged (#7115, #7677).
  • Weight-sync drain is now gated on the verl side for DP>1: vLLM's pause_generation stops the scheduler but still queues new adds, so a request landing mid-pause could set engines_running with nothing left to clear it and time out the drain (#7511). Related: scheduler resume race during async weight sync (#7846) and request aborts on multi-node replicas (#7652).
  • Explicit False is preserved for Optional[bool] engine args in CLI serialization (#7508) and for delayed-default boolean flags (#7879).
  • Out-of-vocabulary tokens are masked with a tensor index_fill to avoid sampling errors (#7882); prefix-cache hit counts are surfaced in TokenOutput (#7565); max_num_batched_tokens is raised to max_model_len when chunked prefill is disabled (#7632).
  • LoRA sync index misalignment fixed (#7453), and weights are always resumed before a weight sync (#7434).

SGLang

  • DeepSeek-V4 full weight sync works with an SGLang rollout and a Megatron trainer: verl registers a deepseek_v4 config compatibility wrapper for SGLang-only environments, and the bucketer keeps concatenated destination-parameter pairs together so a byte boundary cannot split them (#7369).
  • Video features are forwarded to SGLang (#7802) and LoRA e2e is fixed (#7413).

CheckpointEngine

  • delta_sharded now has a vLLM consumer (#7227). The format was SGLang-only since #6974; a verl vLLM WeightTransferEngine adapter decodes each flush and applies it through vLLM's checkpoint-patch API (vllm-project/vllm#50723), leaving model.load_weights() responsible for name mapping, packed layouts, TP slicing and EP placement.
  • delta_sharded for the TorchTitan engine covering FSDP, FSDP+TP, FSDP+EP, HSDP, HSDP+TP and HSDP+EP. Measured on A800, GSM8K GRPO, disaggregated TorchTitan → SGLang: 10.3x faster weight sync at Qwen3-8B on 32 GPUs (3.34 s vs 34.26 s) and 3.7x on 16 GPUs. FSDP+PP remains unsupported (#7324).
  • Opt-in multi_sender mode for the NCCL engine admits actor rank 0's node-local NVLink peers into the broadcast group as relays, so NCCL can drive more than one NIC per node (#7291).
  • Mooncake completion slots are drained across weight versions (#7764) and the HCCL weight-update error on NPU is fixed (#7488).

Weight-sync performance

  • The full Python GC before rollout weight resume is gone (#7864). It was added in v0.9.0 via aggressive_empty_cache(force_sync=True) and caused a measured throughput regression on colocated weight sync after upgrading from v0.8.0, with no GPU-memory benefit (#7848).
  • The remaining full GC on the colocated weight-refit path is also gone (#7873). Memory snapshots showed gc.collect() in BucketedWeightSender/Receiver._cleanup collected nothing and only cost ~433 ms — long enough to accidentally paper over a CUDA IPC race where the receiver ACKs the final bucket before releasing its mapping. The race is fixed rather than slept through.
  • Ranks are synchronized before resuming the KV cache to avoid OOM on non-leader ranks (#7851).

Agentic RL & multimodal

  • Multimodal Continuous Token (#6804): VLContinuousTokenBuilder extends the CT path to SingleTurnAgentLoop and ToolAgentLoop. Incremental processor calls only expand image placeholders into pad tokens, while AgentLoopWorker re-runs the processor over the full message history once at the end to rebuild pixel_values / image_grid_thw. VL builders compose a VLContinuousTokenMixin with their text-family builder via MRO, so Qwen ChatML newline reinsertion and GLM <|observation|> / <|user|> trimming are inherited unchanged.
  • CT follow-ups: generation prompt fused with the final append group (#7628), assistant role supported in merge/encode context (#7643), and DeepSeek tool appends rendered correctly (#7630).
  • RLHFDataset.process_multi_modal_info offloads the synchronous extractor to the default executor so it no longer blocks the agent-loop event thread (#7562).
  • GLM-4V attention patch ported to the transformers 5 rotary API (#7620); Qwen3.5-VL added to _TEXT_TO_VL_FAMILY for unified checkpoint support (#7433).

Tools & Observability

  • torch profiler gains a post hook (profiler.finish_hook_cmd / finish_hook_ranks), corrected discrete/fused behavior, and global_profiler.relocate_results (#7408). Rollout and training profilers no longer overlap in Trainer V1 (#7722).
  • The torch_memory profiler registers a process-local OOM observer that logs the failed allocation size, call stack and allocator summary and dumps a snapshot under <save_path>/oom_<timestamp>/; memory_snapshot_num_steps retains memory history across several profiled steps (#7770).
  • Agent Loop telemetry is forwarded to RL-Insight (#7448); MLflow runs are finalized on finish so the end time is recorded (#7740).

Environment & Hardware

  • uv integration (#7127): dependency management moves to pyproject.toml + a committed uv.lock covering vLLM, SGLang × FSDP and Megatron, with aarch64 support following in #7627.
  • transformers upgraded to 5.9.0 across CI and images (#7650, #7654).
  • Ascend NPU: GLM-5.2 GRPO recipe (#7788, #7836) with vllm-ascend patches (#7779, #7837), Megatron 0.18.0 stack (#7604, #7827), W4A8 MXFP rollout refit (#7868), modular FusedMoE (#7538), IPC weight transfer by default on A5 (#7728), an Atlas 950 Dockerfile (#7897), and the tutorial tree reorganized into zh/ and en/ (#7563).
  • AMD ROCm: attention cache preserved for CUDA graphs (#7455), shuffled AITER FP8 weights restaged (#7470), PPO trainer CI stabilized and pinned to a single NUMA node (#7377, #7609), and a launchable AMD Developer Cloud fully-async DAPO notebook (#7690).
  • NCCL_CUMEM_ENABLE set externally is respected for rollout workers (#7564), non-GPU/NPU devices get a device_available check (#7871), and the Slurm Ray network interface is configurable (#7386).

Breaking Changes

  • Dependency management moved to uv (#7127). Environments are now described by pyproject.toml and the committed uv.lock; uv is the supported way to install verl and its backend extras. aarch64 support followed in #7627.
  • Multimodal Continuous Token changes the ContinuousTokenBuilder surface (#6804): VL builders are composed from VLContinuousTokenMixin plus a text-family builder, and the agent loop postprocesses multimodal tensors over the full message history.
  • v1 async trainer knobs (#7884): hybrid_engine=False is honored under separate_async, num_warmup_batches accepts fractional values, and max_off_policy_threshold accepts null. Defaults preserve the previous behavior.
  • algorithm.filter_groups.metric now defaults to reward and resolves against the canonical pre-KL rm_scores (#7792).
  • Removed config keys: the never-consumed Megatron grad_offload (#7544), actor.router_replay in favor of the engine config (#7466), and the unused ref router replay config (#7536).
  • The mindspeedllm backend engine was removed (#7374).
  • transformers is pinned to 5.9.0 (#7650).

What's Changed

  • [ci] test: migrate workflows from fully_async/one_step_off_policy to v1 separate_async by @Begunner in #7357
  • [megatron] fix: Modify the VLM attention mask shape in TND format for NPU by @zhouhengan1211 in #7372
  • [doc] chore: Add tips to avoid verbosity logs by @MrJVium in #7384
  • [ray, doc] fix: make Slurm Ray network interface configurable by @SkyFishMoon in #7386
  • [ci] chore: Update ci image by @LeoYao123 in #7293
  • [doc] chore: Change requirements install order by @MrJVium in #7403
  • [ckpt] feat: Node-local multi-sender broadcast in NCCL checkpoint engine by @parinayc20 in #7291
  • [BREAKING][rollout] feat: Add Multimodal Continuous Token by @gxlvera in #6804
  • [doc] chore: Update news section with recent releases by @SamitHuang in #7406
  • [ci, trainer] feat: remove mindspeedllm backend engine support. by @pengnuoheng in #7374
  • [misc] chore: bump version to 0.10.0.dev by @wuxibin89 in #7410
  • [ci] chore: Add npu ci env by @LeoYao123 in #7404
  • [sglang] fix: lora sglang e2e by @attack204 in #7413
  • [megatron,veomni] feat: use torch.int16 for routed_experts by @wuxibin89 in #7407
  • [misc] chore: add HollowMan6 to CODEOWNERS and repair stale paths by @HollowMan6 in #7436
  • [vllm] fix: vllm always need to resume weights before weight sync by @HollowMan6 in #7434
  • [rollout] fix: preserve dummy load_format in disaggregated rollout by @theely in #7422
  • [ci] chore: Update ci image by @lxb007981 in #7444
  • [BREAKING][misc] feat: uv integration by @ETOgaosion in #7127
  • [ci, trainer] feat: add fsdpturbo backend engine support. by @pengnuoheng in #7362
  • [recipe] chore: Add in news for verl-Tinker by @wyettzeng in #7454
  • [doc] chore: Update ckpt engine readme by @LeoYao123 in #7452
  • [fsdp] feat: enable non-blocking FSDP2 model transfers by @jiefangxuanyan in #7347
  • [vllm, rollout] fix: vLLM Lora sync index misalignment fix by @wyettzeng in #7453
  • [vllm] fix: preserve ROCm attention cache for CUDA graphs by @PeterYang12 in #7455
  • [ci, hardware] fix: stabilize ROCm PPO trainer CI by @PeterYang12 in #7377
  • [model] fix: add Qwen3.5 VL to _TEXT_TO_VL_FAMILY for unified checkpoint support by @qy0720 in #7433
  • [perf] feat: add profiler post hook, fix behaviors and allow comprehensive torch profiler by @ETOgaosion in #7408
  • [doc] feat: announce verl-vla v0.1.0 by @Miical in #7469
  • [vllm] fix: restage shuffled AITER FP8 weights by @PeterYang12 in #7470
  • [vllm] fix: is_fp8_weight() skips fused-MoE expert weights with non-".weight" checkpoint names by @YolandaLyj in #7443
  • [doc] fix: add supported tag doc for ascend docker by @yyyy2000 in #7477
  • [ckpt] fix: hccl error when update weights for npu by @RichardFido in #7488
  • [ci] fix: revert megatron version on ascend ci by @lxb007981 in #7492
  • [ci] chore: Update ascend ci image by @lxb007981 in #7456
  • [ckpt, fsdp] feat: sharded delta weight sync for the TorchTitan engine by @attack204 in #7324
  • [megatron] fix: align DDP gradient dtype with optimizer precision by @Mecoli1219 in #7485
  • [rollout] fix: preserve default AgentLoop extra fields by @le-czs in #7491
  • [trainer, vllm] feat: lend idle trainer GPUs to generation in separate_async by @Begunner in #7373
  • [megatron] feat: add MindSpeed-Bridge and Megatron backend support for Qwen3.5 GRPO training script by @ruanhao566 in #7335
  • [cfg, megatron, doc] fix: drop unused actor.router_replay in favor of engine config by @YeonwooSung in #7466
  • [doc] refactor: reframe Megatron Lite doc as Megatron Agent Compose preview by @ISEEKYAN in #7537
  • [cfg] fix: drop unused ref router replay config by @ji-huazhong in #7536
  • [ci] chore: use Ascend recipe baselines for NPU nightly CI by @lxb007981 in #7541
  • [rollout, ci] fix: make agent-loop tests fully deterministic by @lxb007981 in #7518
  • [ci] fix: enable fully sharded LoRA in Ascend E2E tests by @lxb007981 in #7517
  • [training_utils, env, doc] feat: use Liger fused linear PPO kernel by @kolehma8 in #7461
  • [trainer, ckpt, cfg] feat: add config-driven checkpoint callback hook by @yueyiming2009 in #7513
  • [vllm] fix: honor explicit False on Optional[bool] engine args in CLI serialization by @zhtmike in #7508
  • [vllm, hardware] fix: support modular FusedMoE on NPU by @ZihaoW123 in #7538
  • [ray] fix: skip unused TensorDict consolidation in NumPy DataProto serialization by @Sky-Trigger in #7539
  • [tool] feat: Forward Agent Loop telemetry to RL-Insight by @tardis-key in #7448
  • [BREAKING][megatron, cfg] fix: remove unused grad_offload by @ji-huazhong in #7544
  • [ci] chore: correct step naming for Ascend ci by @lxb007981 in #7549
  • [ci] fix: drop stale enable_chunked_prefill=False from Ascend NPU scripts by @lxb007981 in #7558
  • [hardware] fix: respect externally set NCCL_CUMEM_ENABLE for rollout workers by @emmericp in #7564
  • [trainer] fix: update backend initialization in initialize_global_process_group by @kahlun in #7512
  • [trainer] fix: enforce strict dynamic micro-batch token limits by @Begunner in #7553
  • [data] fix: offload multimodal dataset processing by @YZJF in #7562
  • [ci] fix: drop stale enable_chunked_prefill=False from Ascend NPU scripts by @lxb007981 in #7584
  • [ci] chore: Remove Ascend CI by @lxb007981 in #7585
  • [rollout] fix: surface vLLM prefix-cache hit counts in TokenOutput by @emmericp in #7565
  • [fsdp] fix: make deferred gradient sync configurable by @Mengyuyang in #7458
  • [veomni] feat: DeepSeek V4 QAT bf16 fake quant training by @wuxibin89 in #7577
  • [doc] refactor: reorganize ascend_tutorial into zh/en directories by @yyyy2000 in #7563
  • [trainer] fix: make synthetic padding safe for context parallelism by @yyDing1 in #7593
  • [trainer] feat: Update run_qwen3_30b_veomni configuration by @ChibiQuest in #7595
  • [env] fix: Update ascend image build workflow by @yyyy2000 in #7606
  • [ckpt, rollout, vllm] feat: add vLLM consumer for delta-sharded weight sync by @ShuoleiWang in #7227
  • [ci] fix: pin ROCm e2e CI containers to a single NUMA node by @PeterYang12 in #7609
  • [recipe, cfg] fix: enable sleep mode for KV cache release by @lxb007981 in #7594
  • [doc] fix: update broken external links by @tardis-key in #7622
  • [rollout] fix: continuous token fuse generation prompt with the final append group by @gxlvera in #7628
  • [misc] feat: uv support aarch64 by @ETOgaosion in #7627
  • [ci] chore: fix ci failure by @wuxibin89 in #7629
  • [model] fix: import AutoModelForCausalLMWithValueHead from trl.experimental.ppo in utils/model.py by @LiRunGuo in #7625
  • [rollout] fix: randomize least-loaded tie-break so sessions do not avalanche onto one replica by @YZH0216 in #7613
  • [ckpt, fsdp] fix: FSDP model merger concatenates replicated buffers by @Josephasafg in #7610
  • [rollout] fix: DeepSeek continuous token builder cannot render tool appends by @ruiling-smartbear in #7630
  • [fsdp] feat: add Qwen3.5-2B on-policy distillation FSDP script by @lihanwen7 in #7605
  • [vllm] fix: raise max_num_batched_tokens to max_model_len when chunked prefill is disabled by @ETOgaosion in #7632
  • [vllm, rollout] fix: gate rollout submission during weight-sync drain for DP>1 by @EricMarcus-ai in #7511
  • [ci, trainer] refactor: switch fsdp_turbo e2e test from GPU to NPU by @pengnuoheng in #7633
  • [fsdp] fix: skip no-op unit temperature scaling by @Mengyuyang in #7428
  • [ci] chore: upgrade transformers==5.9.0 by @wuxibin89 in #7650
  • [vllm] fix: handle request aborts on multi-node replicas by @lxb007981 in #7652
  • [ci] chore: fix ci failure with transformers==5.9.0 by @wuxibin89 in #7654
  • [sglang] fix: make DeepSeek-V4 full weight sync work with SGLang + Megatron by @ChangyiYang in #7369
  • [rollout, vllm] feat: pluggable router with FQN/YAML plugins by @touch869 in #7115
  • [model] fix: use the transformers 5 rotary API in the GLM-4V attention patch by @alanhuangyoo in #7620
  • [distillation] fix: Disable detokenization for teacher prompt_logprobs by @HSYZhang in #7648
  • [rollout] test: simplify router test suite, drop stale yaml comment by @touch869 in #7677
  • [veomni, vllm] feat: Allow gptoss ep with veomni by @wyettzeng in #7397
  • [fsdp] feat: update Qwen3.5-35B GRPO example for 2K prompt and 6K response by @zhouhengan1211 in #7678
  • [training_utils] fix: honor fused output-head backend by @Luosuu in #7703
  • [doc] fix: use fsdp_config.ulysses_sequence_parallel_size in ppo_lora.rst by @imitater-dou in #7710
  • [veomni] feat: add async_activation_offload config by @wuxibin89 in #7724
  • [megatron, ci] chore: upgrade Ascend stack to Megatron 0.18.0 by @lxb007981 in #7604
  • [doc] fix: fix old URL of ascend doc by @yyyy2000 in #7729
  • [doc] fix: drop doubled verl/ prefix in mcore readme paths by @imitater-dou in #7744
  • [training_utils] fix: finalize MLflow run on finish to record end time by @harryge00 in #7740
  • [rollout] feat: continuous_token support Assistant Role in Merge and Encode Context by @gxlvera in #7643
  • [rollout] fix: default IPC weight transfer on Ascend A5 hardware by @kyle-zhangchi in #7728
  • [megatron] fix: preserve R2 router replay for THD-packed batches by @hbhflw2000 in #7106
  • [vllm, hardware] fix: patch vllm-ascend for GLM-5.2 RL training on Ascend NPUs by @lxb007981 in #7779
  • Revert "[megatron] fix: preserve R2 router replay for THD-packed batches" by @wuxibin89 in #7786
  • [training_utils] feat: Add automatic CUDA/NPU OOM snapshots and multi-step memory history by @ji-huazhong in #7770
  • [perf, tool] fix: Avoid overlapping rollout and training profilers in Trainer V1 by @mengchengTang in #7722
  • [trainer, cfg] feat: filter V1 DAPO groups by canonical reward by default by @Begunner in #7792
  • [hardware] test: include AMD in platform auto-detection expectations by @tmm77 in #7797
  • [ci] fix: nightlyCI_grpo_qwen3_5_2b_fsdp2_vllm_ascend by @lxb007981 in #7799
  • [recipe] feat: add GLM-5.2 GRPO training example on Ascend NPUs by @lxb007981 in #7788
  • [ckpt] fix: drain Mooncake completion slots across weight versions by @jacklin78911-collab in #7764
  • [trainer, ckpt] fix: skip V1 async warmup after inflight reissue by @YeonwooSung in #7762
  • [megatron, ci] fix: configure Megatron integration in Ascend images and tests by @lxb007981 in #7827
  • [vllm] test: cover batch-invariant switch on Ascend by @wangdongleix in #7808
  • [megatron] fix: pad VLM THD input to TP/CP alignment before SP scatter by @HollowMan6 in #7702
  • [doc] chore: add launchable AMD Developer Cloud Fully Async DAPO notebook by @Vivicai1005 in #7690
  • [recipe] fix: update GLM-5.2 GRPO training example on Ascend NPUs by @lxb007981 in #7836
  • [megatron] fix: make R2 router replay model-scoped and opt-in by @hbhflw2000 in #7805
  • [trainer] fix: pad teacher fields in minimal padding and support fsdp2 in forward topk loss by @frelam in #7858
  • [worker] fix: sync ranks before resume kv_cache to avoid OOM on non-leader ranks by @HT-Yuan in #7851
  • [rollout, perf] fix: avoid full GC before weight resume by @lbaolin in #7864
  • [vllm, hardware] fix: patch vllm-ascend on Ascend NPUs by @lxb007981 in #7837
  • [ci] chore: Fix transformers version in Ascend docker images by @lxb007981 in #7867
  • [sglang, rollout] fix: forward video features to SGLang by @HeatherLiuzh in #7802
  • [trainer] fix: count failed validation sessions in accuracy by @Begunner in #7781
  • [doc] chore: add NPU guide for v1 trainer separate async by @dodatboii in #7872
  • [perf] fix: remove full gc during weight refit by @wuxibin89 in #7873
  • [trainer] fix: detach model_output from autograd graph by @Dmovic in #7874
  • [ci] fix: wait for and diagnose empty training log in qwen3_vl nightly check step by @aass-79 in #7852
  • [ci] fix: drop VERL_USE_EXTERNAL_MODULES env from Ascend Dockerfiles by @aass-79 in #7886
  • [vllm, rollout] fix: preserve explicit false for delayed-default boolean flags by @zhangyimi in #7879
  • [hardware] fix: add device_available check for devices other than GPU/NPU by @uqyxx in #7871
  • [rollout] fix: mask out-of-vocabulary tokens with tensor index_fill to avoid sampling errors by @ruanhao566 in #7882
  • [ci] fix: fix megatron.core import error on Ascend tests by @lxb007981 in #7875
  • [doc] fix: correct npu_unit_test.yml to npu_unit_tests.yml in the Ascend CI guide by @linhongyu510 in #7876
  • [doc] feat: add ascend 950 dockerfile by @yyyy2000 in #7897
  • [vllm] fix: prevent scheduler resume race during async weight sync by @lxb007981 in #7846
  • [ci] refactor: change ascend ci runner label by @yyyy2000 in #7743
  • [fully_async] fix: reject requests arriving behind the closed gate stead of parking them by @wuxibin89 in #7912
  • [megatron] fix: allow sequence-mean loss with per-token normalization by @Zhikaiiii in #7915
  • [trainer, cfg] feat: modify script configuration for qwen3_5. by @ChibiQuest in #7903
  • [BREAKING][trainer] feat: v0-style hybrid_engine=False and fractional warmup for v1 async trainers by @zpltys in #7884
  • [vllm, rollout] feat: support W4A8 MXFP rollout refit on Ascend by @zaney9880 in #7868

New Contributors

Full Changelog: v0.9.0...v0.9.1

Don't miss a new verl release

NewReleases is sending notifications on new releases.