build(deps): bump vLLM to 0.26.0 and make the pin real - #176
Draft
rominf wants to merge 2 commits into
Draft
Conversation
The vLLM install passed a bare `vllm` requirement to `uv pip install`, so the only thing constraining the release was the version segment of the ROCm wheel index URL. That is not a pin: if the index ever serves more than one version under that path, or no wheel there matches the interpreter (in which case the resolver falls back to PyPI), the install silently drifts. Pass the exact `vllm==0.26.0+rocm723` requirement instead, and move the index URL to the matching 0.26.0 path. The ROCm ABI tag stays `rocm723`; it is the only variant published for this release. Signed-off-by: Roman Inflianskas <Roman.Inflianskas@amd.com>
The pin only covered the built-in wheel index. Setting ROCM_CLI_VLLM_ROCM_INDEX_URL dropped the requirement back to a bare `vllm`, which is the same hazard the pin exists to remove: the install passes `--extra-index-url`, so PyPI stays in play by design for vLLM's dependencies, and a bare requirement can silently resolve to PyPI's non-ROCm build. On a CPython 3.13 host, where the ROCm wheels are cp312, bare `vllm` resolves to plain `vllm==0.26.0`. Keep the requirement in lockstep with the index instead of dropping it. Published release indexes are `.../rocm/<version>/<abi>`, so an overridden URL of that shape has its version and ABI parsed back out and the requirement becomes `vllm==<version>+<abi>`. Pointing at a different release of the same index — the case the override documents — therefore works and stays pinned, with no extra configuration. A URL of any other shape cannot be pinned automatically, and unpinning is not an acceptable fallback, so it is rejected with an error quoting the URL and the expected shape. Failing clearly beats quietly installing the wrong artifact. Also add a test parsing the version and ABI back out of the pinned spec and asserting the index path ends with them, so a half-finished bump fails in CI rather than on a GPU runner, and report the requirement actually passed to `uv` in the install failure message rather than a hardcoded `vllm`. Signed-off-by: Roman Inflianskas <Roman.Inflianskas@amd.com>
rominf
force-pushed
the
build/vllm-0-26-0
branch
from
August 4, 2026 18:43
2cf728f to
a1cc1ab
Compare
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.
Summary
Two changes to the vLLM install path in
engines/vllm:0.23.0to0.26.0(published 2026-07-27). 0.26.0 brings support for additional model architectures over 0.23.0.uv pip installinstead of a bare package name, on every path including the index override. This is the more important half of the change.The install was not actually pinned
The install pushed a bare
vllmargument into theuv pip installinvocation. The only thing constraining the release was the version segment of the ROCm wheel index URL (https://wheels.vllm.ai/rocm/<version>/<abi>). That is not a pin:--extra-index-urlkeeps PyPI in play by design, because vLLM's dependencies need it) and installs a generic build.The second case is not hypothetical — resolving bare
vllmagainst the ROCm index on a CPython 3.13 host (the ROCm wheels arecp312) yields plainvllm==0.26.0from PyPI rather than the ROCm build.The install now requests
vllm==0.26.0+rocm723explicitly, so a mismatch fails loudly instead of installing something else.ABI tag
The ROCm ABI tag stays
rocm723. The variant has shifted between releases in the past, so this was the main risk in the bump. Resolving against the live index confirmsrocm723is published for 0.26.0, while neighbouring variants such asrocm724androcm730are not:The override stays pinned
ROCM_CLI_VLLM_ROCM_INDEX_URLselects a different vLLM/ROCm combination without rebuilding, and a hardcodedvllm==0.26.0+rocm723cannot resolve against an index serving some other release. The fix is to keep the requirement in lockstep with the index rather than dropping it — an unpinned override is exactly the PyPI-fallback hazard this PR exists to remove.Version and ABI are treated as the single source of truth from which both the URL and the requirement derive:
vllm==0.26.0+rocm723.https://wheels.vllm.ai/rocm/<version>/<abi>) — the version and ABI are parsed back out of the URL and the requirement becomesvllm==<version>+<abi>. Pointing at a different release of the same index therefore works and stays pinned, with no extra configuration.Non-goals
https://wheels.vllm.ai/rocm/, which is latest-only) is out of scope — it is rejected here precisely because it is not a pin.Test plan
Verified against the live index with
uv:Both the bare
vllmrequirement and the exactvllm==0.26.0+rocm723spec resolve to the same wheel, confirming the new index path and ABI tag exist and are self-consistent.Unit tests cover the resolution rules as pure functions taking the environment value as a parameter (nothing touches process env): nothing set, empty/whitespace values, an override of the published shape (with and without a trailing slash), and overrides that must error rather than unpin — a foreign host, the rolling top-level index, a missing ABI segment, an empty version segment, and a malformed segment.
Local checks:
cargo test --workspace --all-targets,cargo clippy --workspace --all-targets -- -D warnings,cargo clippy --locked -p e2e-cucumber --test e2e -- -D warnings, andcargo fmt --all --checkall pass. (Tworocm-coreproc_lifecycletests fail on my machine both with and without this change — a local process-group sandboxing artifact, unrelated to this diff.)Verification gap — please read
This change is weakly covered by automated testing, and honesty about that is more useful than a green checkmark:
vllm_pinned_spec_matches_extra_index_urldoes assert the two literals agree with each other (it parses the version and ABI tag back out of the spec and requires the index path to end with them), so a half-finished bump fails in CI; it cannot tell whether the pair is published upstream.A typo in either string therefore stays green all the way through CI and only surfaces on a real install against a GPU runner. The
uv pip compileruns above are the actual verification for this PR.Risk
Low for the pin itself (a bad string now fails the install loudly rather than installing the wrong build). The override path can now fail where it previously proceeded — that is intentional: it only fails for a URL whose build cannot be determined, where the alternative was installing an unpinned, possibly non-ROCm build. Medium for the version bump, in the ordinary sense that a new vLLM release can change runtime behavior — that surface is not exercised by this repo's default CI.