Repository navigation
feat(vllm-omni): bump to 0.28.0 - #6680
Merged
Merged
Conversation
Bump vLLM-Omni 0.26.0 -> 0.28.0 (tracks upstream vLLM v0.28.0) across both the ec2 and sagemaker amzn2023 image configs and the Dockerfile ARG defaults: - framework_version / vllm_ref / vllm_omni_version -> 0.28.0 - flashinfer_version 0.6.14 -> 0.6.16.post3 - deepep_commit_hash -> d4f41e4e93602a15e95f55f6ee8df8f1aaa0e4bb (full 40-char SHA; upstream now pins the full hash since an abbreviated one cannot be resolved via `git fetch origin <sha>`) - dlc_minor_version 6 -> 7 (also realigns the Dockerfile ARG default, which had drifted to 5) Add a CUDA-13 mooncake wheel swap in the KV-connector install step. Upstream's default mooncake-transfer-engine PyPI wheel is a CUDA-12 build (its engine.so links libcudart.so.12, absent from the CUDA-13 runtime image), and since 0.28.0 upstream's install-kv-connectors.sh swaps it for the same-version mooncake-transfer-engine-cuda13 variant on CUDA-13 images. Mirror that here, matching the existing nixl-cu* reinstall pattern, so mooncake KV connectors load on this image. No change needed for: NCCL (pulled unpinned from the NVIDIA cuda-rhel9 repo, so already >= 2.30.4 for DeepEPv2), the SageMaker bidi WebSocket route set (unchanged upstream at v0.28.0), and the s3tokenizer==0.3.0 pin (still dev-only upstream). Refreshed the transformers-cap comment to the new >=5.10.1,<5.15 bound. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
added 15 commits
August 31, 2026 22:58
vLLM v0.28.0's CMakeLists.txt applies cmake/patches/pytorch_stable_string.patch to torch's stable headers at configure time via `patch --batch --forward` (CMakeLists.txt:417, new in 0.28.0). The upstream manylinux build base ships `patch`, but our amzn2023 build stage does not, so CMake configure failed with "child return code: no such file or directory" during setup.py bdist_wheel. Add `patch` to the build-stage dnf install. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
…8.0) DeepEP at the 0.28.0-matched ref (d4f41e4e93) uses ncclGinRequest_t from NCCL's GIN backend, which requires NCCL >= 2.30.4. DeepEP compiles and links against the venv's nvidia-nccl-cu13 wheel (-I/opt/venv/.../nvidia/nccl/include), and the version torch pulls in is older, so the build failed with 'ncclGinRequest_t does not name a type'. Mirror upstream vLLM 0.28.0's UV_OVERRIDE: force nvidia-nccl-cu<major>==2.30.7 in both the build stage (fixes the DeepEP compile) and the deps stage (so the runtime venv the DeepEP wheel links carries the same NCCL and loads). Signed-off-by: Yadan Wei <weiyadan@amazon.com>
DeepEP's setup.py adds the nvidia-nccl-cu13 wheel lib dir to the built .so's rpath but not to the link-time search path, and passes -l:libnccl.so.2. The amzn2023 build stage has no system libnccl.so.2 (unlike upstream's manylinux/ pytorch build base), so the DeepEP link failed with '/usr/bin/ld: cannot find -l:libnccl.so.2'. Point LIBRARY_PATH at the nccl wheel's lib dir before the DeepEP build so the link resolves; DeepEP's rpath handles runtime resolution (the same wheel is installed in the runtime venv). Signed-off-by: Yadan Wei <weiyadan@amazon.com>
The prior LIBRARY_PATH fix used python3 -c 'nvidia.nccl.__file__', but nvidia.nccl is a namespace package so __file__ is None -> TypeError, leaving LIBRARY_PATH empty and the DeepEP link still failing on -l:libnccl.so.2. Locate the wheel's libnccl.so.2 directly with find instead. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
The entry's review_by (2026-08-25) lapsed, failing test.ecr_scan. It is one of the mooncake libetcd_wrapper.so go-stdlib CVEs (same cluster as CVE-2026-33818/39821/56853), unpatchable without a mooncake upgrade and still present on the mooncake-transfer-engine-cuda13 wheel shipped for vLLM 0.28.0. Extend the review date to align with that cluster (2026-10-22). Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Run each real endpoint case as its own serial matrix job so failures can be rerun in isolation and every deploy starts with fresh runner credentials. Keep middleware unit tests separate and avoid unnecessary runner-side ECR login. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Configure realtime, async, and bidirectional Omni endpoints with priority-ordered SageMaker instance pools for server-side capacity fallback. Add CPU-only helper coverage and keep the existing vLLM client-side fallback API compatible. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Run SageMaker argument, routing middleware, and instance-pool helper tests in one Omni-specific unit workflow. Keep the SageMaker workflow focused on managed endpoint deployment tests. Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Signed-off-by: Yadan Wei <weiyadan@amazon.com>
Exercise the vLLM-Omni PEFT LoRA serving path on a real SageMaker endpoint: deploy SD-3.5-medium (pulled from HF at runtime) with a PEFT adapter shipped via the model's S3 model_data, then generate the same prompt/seed without and with the per-request `lora` field and assert the images differ — proving the adapter is applied per request, not merely loaded at startup. - test_sm_omni_endpoint.py: `_create_model` gains an optional `model_data_url`; add a `lora_endpoint` fixture (SM_VLLM_ENABLE_LORA / _LORA_MODULES / _MAX_LORA_RANK, adapter over build_instance_pools) and `test_vllm_omni_peft_lora_endpoint` with a with/without bind assertion. - vllm-omni.tests-sagemaker.yml: add the `peft-lora` matrix leg so it runs (max-parallel:1 keeps a single live endpoint). Signed-off-by: Yadan Wei <weiyadan@amazon.com>
…eout The peft-lora sagemaker leg failed the ping health check: SD-3.5-medium's ~15 GB gated HF pull + load exceeds SageMaker's 600s default container startup health-check window. Set container_startup_health_check_timeout_in_seconds=2400 on the lora_endpoint ProductionVariant (the small TTS models load under 600s, so they were unaffected). Signed-off-by: Yadan Wei <weiyadan@amazon.com>
The peft-lora leg failed provisioning: the CI HF token is not authorized for the gated stabilityai/stable-diffusion-3.5-medium base, so the runtime HF pull returned 403. Bake the base + adapter into the S3 model artifact and load from /opt/ml/model (SM_VLLM_MODEL=/opt/ml/model) -- no runtime HF pull, no token on the endpoint. - Point model_data at the baked tar (base at root + adapters/sd35-lora/); drop HF_TOKEN and add model_data_download_timeout_in_seconds for the ~20 GiB pull. - Restrict the instance pool to the Ada ladder (g6.xlarge/2xl/4xl); the omni 0.28 container needs sm_89+ (no g5/Ampere). - Add a Creating-aware teardown guard so a slow/timed-out deploy cannot leak an endpoint.
Yadan-Wei
marked this pull request as ready for review
September 18, 2026 05:28
Yadan-Wei
enabled auto-merge (squash)
September 18, 2026 17:55
jinyan-li1
approved these changes
Sep 18, 2026
Yadan-Wei
pushed a commit
that referenced
this pull request
Sep 21, 2026
- Replace upstream-PR Highlights with the container-side change: PEFT LoRA validated on SageMaker (new endpoint test, PR #6680) - Preserve the upstream v0.26.0...v0.28.0 compare link on the source line
4 tasks
Yadan-Wei
added a commit
that referenced
this pull request
Sep 21, 2026
* docs(vllm-omni): refresh for v1.7.0 (vLLM-Omni 0.28.0) - drift: correct s3tokenizer version reference 0.26.0 -> 0.28.0 in index.md - Add changelog entry for v1.7.0 (vLLM-Omni 0.28.0, DLC PR #6680) * docs(vllm-omni): focus v1.7.0 changelog Highlights on container changes - Replace upstream-PR Highlights with the container-side change: PEFT LoRA validated on SageMaker (new endpoint test, PR #6680) - Preserve the upstream v0.26.0...v0.28.0 compare link on the source line * docs(vllm-omni): drop upstream-PR frontend bullet from v1.7.0 Changes * docs(vllm-omni): add v1.7 (0.28.0) entry to README What's New * docs(vllm-omni): add v1.7 (0.28.0) to available_images data --------- Co-authored-by: Yadan Wei <weiyadan@amazon.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Bump vLLM-Omni 0.26.0 → 0.28.0 (a two-minor jump; omni tracks upstream vLLM 1:1, so
vllm_ref→v0.28.0) across both amzn2023 image configs and the Dockerfile ARG defaults.framework_version/vllm_ref/vllm_omni_version0.28.0flashinfer_version0.6.14→0.6.16.post3deepep_commit_hash73b6ea4→d4f41e4e93602a15e95f55f6ee8df8f1aaa0e4bb(full 40-char SHA — upstream now requires it; an abbreviated hash cannot be resolved viagit fetch origin <sha>)dlc_minor_version6→7(also realigns a Dockerfile ARG default that had drifted to5)13.0.2/3.12— upstream's 13.0.3 + Ubuntu 24 base move is N/A to the amzn2023 base)Release-notes reconciliation
Added — mooncake CUDA-13 wheel swap (
docker/vllm_omni/Dockerfile.amzn2023, KV-connector install step). Upstream's defaultmooncake-transfer-enginePyPI wheel is a CUDA-12 build (itsengine.solinkslibcudart.so.12, absent from the CUDA-13 runtime). Since 0.28.0, upstream'sinstall-kv-connectors.shswaps it for the same-versionmooncake-transfer-engine-cuda13variant on CUDA-13 images. We installkv_connectors.txtdirectly (bypassing that script) and shipinstall_kv_connectors: true, so this mirrors the swap here — matching the existingnixl-cu*reinstall pattern.Checked, no change needed:
nvidia-nccl-cu13==2.30.7for DeepEPv2 (needs ≥ 2.30.4); we pull unpinnedlibncclfrom NVIDIA'scuda-rhel9repo → already current. DeepEP's manylinux syscall + CUDA-stub fixes live inside theep_kernelsscript we clone atv0.28.0.WS_ALLOWED_PATHSfrozenset unchanged (upstream's 6 routes are identical at v0.28.0).s3tokenizer==0.3.0pin stays correct.libibverbs-devel, sccache); Rust build (build_rust.sh,install_protoc.sh) is byte-identical vs 0.26.0.>=5.10.1,<5.15bound.Added — PEFT LoRA SageMaker endpoint test
New real-endpoint test
test/vllm-omni/sagemaker/test_sm_omni_endpoint.py::test_vllm_omni_peft_lora_endpoint(+ apeft-loraleg invllm-omni.tests-sagemaker.yml) validates the per-request PEFT LoRA path end-to-end on the SageMaker image, closing the one omni serving mode the suite didn't cover:SM_VLLM_ENABLE_LORA=trueand an adapter registered viaSM_VLLM_LORA_MODULES, then invokes/v1/images/generationswith and without the per-requestlorafield and asserts the two images differ — proving the adapter is selected per-request through the DLC SageMaker serving middleware.adapters/sd35-lora/) and loaded from/opt/ml/model— no runtime HF pull and no HF token on the endpoint. Ada-only instance pool (g6.xlarge/2xl/4xl; the omni 0.28 container needs sm_89+, so no g5/Ampere).Creatingbefore deleting, so a slow/timed-out deploy cannot leak an endpoint.SageMaker endpoint test restructure
This PR also reworks how the omni SageMaker endpoint tests run:
-ksplit (realtime/async) with one matrix job per endpoint case —tts-realtime,tts-async,bidi-speech-stream,bidi-default-path-rejected,peft-lora, plus a trailingvideo-asyncjob.max-parallel: 1keeps at most one endpoint live at a time (respecting the tiny per-type SageMaker endpoint quotas);fail-fast: falselets every case run even after one fails; each leg gets a fresh runner-role session so a failure can be re-run in isolation.build_instance_pools(instance_type)helper (priority-based capacity fallback across an instance-type ladder), replacing the previous client-side ICE-retry loop — the omni half of the vLLM instance-pools migration. Thepeft-loraleg uses an Ada-only ladder (g6.xlarge/2xl/4xl) since the 0.28 container needs sm_89+; the tts/bidi/video legs keep their existing ladders.video-asyncruns last as its own job and is allowed to skip (not fail) when SageMaker exhausts every instance-pool candidate, so a capacity skip is not recorded as a full-suite pass.Test plan
bidi-speech-stream,bidi-default-path-rejected)endpoint-test (peft-lora))Deferred — new-model CI coverage (follow-up)
0.28.0 adds notable families: IndexTTS 2.5, MiniMax Music 3, MiniMax-H3, SANA-Video, Nemotron VoiceChat (full-duplex), dots.tts, π0 VLA, etc. Not added here — each needs
model-uploadstaging +verify-modelconfirmation before wiring a CI entry, and some require optional-dep extras (indextts2,longcat-video-avatar). Can follow up per customer demand.The distill LoRA backend (startup-fused LightX2V checkpoints) is validated by config but not yet wired as a CI leg — its base (Qwen-Image, ~60 GiB + cpu-offload) needs a large, capacity-scarce instance; deferred until a reliable slot is available.