Repository navigation
[Bugfix][Model] Voxtral realtime: fix boot OOM and engine crash at max_model_len - #45022
Conversation
|
Documentation preview: https://vllm--45022.org.readthedocs.build/en/45022/ |
|
Documentation preview: https://vllm--45022.org.readthedocs.build/en/45022/ |
|
Re-opening after appeal on Slack. I'll give it a review once it's been trimmed a bit |
|
Thanks for re-opening, and to recap the Slack thread here for anyone reading. Quick context: I want To be upfront: a lot of the docs and the PR body was written with AI help. I was trying to make the PR look "clean" and pull the test results, docs and fix together. I also put everything in one big PR with flags instead of small separate ones, which is probably the other reason it's hard to review. So: how do you want it trimmed? I can keep just the three bug fixes and move the unbounded-duration part to a later PR, or cut more. Tell me what shape you want and I'll redo it. |
|
@andylolu2 one change vs your suggestion. With So the subclass now only shrinks the profiling audio ( The encoder cache being sized only by |
andylolu2
left a comment
There was a problem hiding this comment.
Great thank you @damienlaine!
Could you fix the pre-commit checks so we can trigger the CI run?
|
Thanks @andylolu2. Pre-commit passes locally on 188b1cc5e8 (ruff, mypy 3.10-3.13, typos, test tethering). On CI the pre-commit job is skipped, not failed: |
|
✅ @damienlaine, CI is now available for this PR.
|
…nk, stop the stream at max_model_len Signed-off-by: Damien Laine <damien.laine@gmail.com>
…sconnect Signed-off-by: Damien Laine <damien.laine@gmail.com>
…ep the encoder cache size A paused streaming session keeps its last chunk in the encoder cache until it resumes. Sizing the cache to one chunk deadlocks a handful of concurrent sessions when max_num_batched_tokens is small. Signed-off-by: Damien Laine <damien.laine@gmail.com>
|
/ci run |
188b1cc to
c87cc56
Compare
|
✅ Triggered Buildkite CI #93347 for commit |
CI selector (shadow): 9 test steps (34 jobs) instead of 64 (99 jobs)Shadow mode: this changes nothing about what CI runs. It shows what the evidence-based selector would pick for this PR, next to today's rules. How it works. Feedback welcome: reply here if it would skip a step this change needs, or runs something unrelated.
Selector would run (9)
Would skip (today's rules run them) (56)
Would add (today's rules do not run them) (1)
AMD mirrors: would skip (54)
AMD mirrors: would add (0)none 3 changed files · base |
|
/amd-ci retry |
|
✅ No AMD CI build exists for the current PR head. Use |
|
/ci retry |
|
✅ Queued 3 failed job(s) for retry in Buildkite CI #93347. |
|
@NickLucche @DarkLight1337 Andy approved this yesterday. It still needs a codeowner approval for |
|
/ci retry |
…x_model_len (vllm-project#45022) Signed-off-by: Damien Laine <damien.laine@gmail.com> Co-authored-by: Cyrus Leung <tlleungac@connect.ust.hk>

Fixes for Voxtral realtime, all in the model and the realtime entrypoint. The unbounded-duration part is #45833 (stacked).
Update 2026-10-05
Reworked after @andylolu2's review: no core changes anymore. Scheduler, runner and output_processor changes dropped (#58942 covers ERROR/ABORT, #42502 the generic scheduler guard).
Fixes
max_model_lentokens. With the defaultmax_model_len(131072) that OOMs at boot on 16 GB. NewVoxtralRealtimeProcessingInfo: the profiling audio is the largest streaming chunk (the prefix, 39 tokens),{"audio": 1}per update. The item size staysmax_model_lenbecause it also sizes the encoder cache: a paused session keeps its last chunk cached until it resumes, and a cache sized to one chunk deadlocks concurrent sessions (0/12 at--max-num-batched-tokens 256).max_model_len: a streaming session reaching the limit kills the EngineCore (illegal memory access) and every other session with it.VoxtralRealtimeBuffernow counts submitted tokens and ends the stream beforemax_model_len, so the session finishes normally.Tests
RTX 4090 Laptop 16 GB,
--hf-overridessliding window 256, PIECEWISE:--max-model-len 131072: main OOMs during profiling, this PR boots.--max-num-batched-tokens 256: 12/12, same as main.--max-model-len 512, 70 s streams over websocket: streams stop at the cap, client getstranscription.done, next session OK.test_voxtral_realtime_generator_max_model_lenfails withEngineDeadErrorwithout the buffer cap.AI-assisted; reviewed and tested by me.