Hugging FaceRafael Pardinas, Ehsan KamallooProblem & solution
vLLM V0 to V1: Correctness Before Corrections in RL
Summary
PipelineRL migrated its rollout inference engine from vLLM V0 (0.8.5) to V1 (0.18.1), but trainer-side logprobs, policy ratios, KL, entropy, clip rate, and reward diverged from the V0 reference. The investigation separated semantic mismatch, inference-path mismatch, and objective mismatch, then prioritized backend parity before changing the RL objective. Fixes included processed rollout logprobs, explicit V1 runtime settings disabling prefix caching and async scheduling, a V0-like inflight weight-update path, and an fp32 lm_head for the final projection. With those changes, the final V1 run tracked the V0 trajectory across the reported metrics, while processed_logprobs alone did not resolve the training gap.
Context
During the vLLM V0-to-V1 migration, PipelineRL observed that trainer-side logprobs and reward diverged from the known-good V0 reference early in GSPO training. The discrepancy affected policy ratios, KL, entropy, clip rate, and reward, raising separate questions about logprob semantics, inference runtime behavior, and whether the RL objective required correction.
Approach / What changed
The migration first restored backend parity with the V0 reference. The fixes enabled processed_logprobs, made prefix caching and async scheduling explicit and disabled, matched V0's inflight weight-update behavior with pause, receive_weight_update, and resume calls, and used an fp32 lm_head for the final projection. Objective-side corrections were deferred until backend correctness could be evaluated independently.
Takeaways
vLLM V1 returned raw-model logprobs by default, while PipelineRL expected logprobs from the processed distribution used by the sampler; setting logprobs-mode=processed_logprobs removed the mean offset but did not restore full training parity.
The parity configuration disabled prefix caching and async scheduling, while V1 weight updates used pause_generation(mode="keep", clear_cache=False), receive_weight_update, and resume_generation to approximate V0's behavior.
Matching the trainer's fp32 lm_head was required for final parity: the corrected V1 run tracked the V0 reward and metric trajectories, whereas processed_logprobs alone left the training mismatch.
Source and freshness
- Source
- huggingface.co
- Published
- Added to Yomu
- Last updated
Summaries are generated from the original by a language model. Check the original before relying on it.
Keep reading
Related reading
The Good Stuff
Paid picks we use ourselves. Links carry a referral code — a subscription through one earns us a commission at no extra cost to you.
The best engineering reads, once a week
One useful email. Unsubscribe anytime.