@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 305b168a9f
Fork 0

A high-throughput and memory-efficient inference and serving engine for LLMs

Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git

Synced Nov 11, 15:00 UTC

[CI] refine more logic when generating and using nightly wheels & indices, add cuda130 build for aarch64, specify correct manylinux version (#30341)

Signed-off-by: Shengqi Chen <harry-chen@outlook.com>

Shengqi Chen committed Dec 12, 2025 at 00:42 UTC 305b168a9fc50f322e9c5a07f4fc8c7bbda5f844
4 files changed +73 -10
.buildkite/release-pipeline.yaml
+18 -3
@@ -15,6 +15,21 @@ steps:
15 env:
16 DOCKER_BUILDKIT: "1"
17
18 + - label: "Build arm64 wheel - CUDA 13.0"
19 + depends_on: ~
20 + id: build-wheel-arm64-cuda-13-0
21 + agents:
22 + queue: arm64_cpu_queue_postmerge
23 + commands:
24 + # #NOTE: torch_cuda_arch_list is derived from upstream PyTorch build files here:
25 + # https://github.com/pytorch/pytorch/blob/main/.ci/aarch64_linux/aarch64_ci_build.sh#L7
26 + - "DOCKER_BUILDKIT=1 docker build --build-arg max_jobs=16 --build-arg USE_SCCACHE=1 --build-arg GIT_REPO_CHECK=1 --build-arg CUDA_VERSION=13.0.1 --build-arg torch_cuda_arch_list='8.7 8.9 9.0 10.0+PTX 12.0' --build-arg BUILD_BASE_IMAGE=nvidia/cuda:13.0.1-devel-ubuntu22.04 --tag vllm-ci:build-image --target build --progress plain -f docker/Dockerfile ."
27 + - "mkdir artifacts"
28 + - "docker run --rm -v $(pwd)/artifacts:/artifacts_host vllm-ci:build-image bash -c 'cp -r dist /artifacts_host && chmod -R a+rw /artifacts_host'"
29 + - "bash .buildkite/scripts/upload-wheels.sh manylinux_2_35"
30 + env:
31 + DOCKER_BUILDKIT: "1"
32 +
33 # aarch64 build
34 - label: "Build arm64 CPU wheel"
35 depends_on: ~
@@ -25,7 +40,7 @@ steps:
40 - "DOCKER_BUILDKIT=1 docker build --build-arg max_jobs=16 --build-arg GIT_REPO_CHECK=1 --build-arg VLLM_BUILD_ACL=ON --tag vllm-ci:build-image --target vllm-build --progress plain -f docker/Dockerfile.cpu ."
41 - "mkdir artifacts"
42 - "docker run --rm -v $(pwd)/artifacts:/artifacts_host vllm-ci:build-image bash -c 'cp -r dist /artifacts_host && chmod -R a+rw /artifacts_host'"
28 - - "bash .buildkite/scripts/upload-wheels.sh"
43 + - "bash .buildkite/scripts/upload-wheels.sh manylinux_2_35"
44 env:
45 DOCKER_BUILDKIT: "1"
46
@@ -39,7 +54,7 @@ steps:
54 - "DOCKER_BUILDKIT=1 docker build --build-arg max_jobs=16 --build-arg USE_SCCACHE=1 --build-arg GIT_REPO_CHECK=1 --build-arg CUDA_VERSION=12.9.1 --tag vllm-ci:build-image --target build --progress plain -f docker/Dockerfile ."
55 - "mkdir artifacts"
56 - "docker run --rm -v $(pwd)/artifacts:/artifacts_host vllm-ci:build-image bash -c 'cp -r dist /artifacts_host && chmod -R a+rw /artifacts_host'"
42 - - "bash .buildkite/scripts/upload-wheels.sh"
57 + - "bash .buildkite/scripts/upload-wheels.sh manylinux_2_31"
58 env:
59 DOCKER_BUILDKIT: "1"
60
@@ -52,7 +67,7 @@ steps:
67 - "DOCKER_BUILDKIT=1 docker build --build-arg max_jobs=16 --build-arg USE_SCCACHE=1 --build-arg GIT_REPO_CHECK=1 --build-arg CUDA_VERSION=13.0.1 --build-arg BUILD_BASE_IMAGE=nvidia/cuda:13.0.1-devel-ubuntu22.04 --tag vllm-ci:build-image --target build --progress plain -f docker/Dockerfile ."
68 - "mkdir artifacts"
69 - "docker run --rm -v $(pwd)/artifacts:/artifacts_host vllm-ci:build-image bash -c 'cp -r dist /artifacts_host && chmod -R a+rw /artifacts_host'"
55 - - "bash .buildkite/scripts/upload-wheels.sh"
70 + - "bash .buildkite/scripts/upload-wheels.sh manylinux_2_35"
71 env:
72 DOCKER_BUILDKIT: "1"
73
.buildkite/scripts/generate-nightly-index.py
+11
@@ -372,6 +372,17 @@ if __name__ == "__main__":
372
373 print(f"Found {len(wheel_files)} wheel files for version {version}: {wheel_files}")
374
375 + # keep only "official" files for a non-nightly version (specifed by cli args)
376 + PY_VERSION_RE = re.compile(r"^\d+\.\d+\.\d+([a-zA-Z0-9.+-]*)?$")
377 + if PY_VERSION_RE.match(version):
378 + # upload-wheels.sh ensures no "dev" is in args.version
379 + wheel_files = list(
380 + filter(lambda x: version in x and "dev" not in x, wheel_files)
381 + )
382 + print(f"Non-nightly version detected, wheel files used: {wheel_files}")
383 + else:
384 + print("Nightly version detected, keeping all wheel files.")
385 +
386 # Generate index and metadata, assuming wheels and indices are stored as:
387 # s3://vllm-wheels/{version}/<wheel files>
388 # s3://vllm-wheels/<anything>/<index files>
.buildkite/scripts/upload-wheels.sh
+8 -4
@@ -34,9 +34,10 @@ if [[ ${#wheel_files[@]} -ne 1 ]]; then
34 fi
35 wheel="${wheel_files[0]}"
36
37 -# current build image uses ubuntu 20.04, which corresponds to manylinux_2_31
37 +# default build image uses ubuntu 20.04, which corresponds to manylinux_2_31
38 +# we also accept params as manylinux tag
39 # refer to https://github.com/mayeut/pep600_compliance?tab=readme-ov-file#acceptable-distros-to-build-wheels
39 -manylinux_version="manylinux_2_31"
40 +manylinux_version="${1:-manylinux_2_31}"
41
42 # Rename 'linux' to the appropriate manylinux version in the wheel filename
43 if [[ "$wheel" != *"linux"* ]]; then
@@ -96,8 +97,11 @@ if [[ "$BUILDKITE_BRANCH" == "main" && "$BUILDKITE_PULL_REQUEST" == "false" ]];
97 aws s3 cp --recursive "$INDICES_OUTPUT_DIR/" "s3://$BUCKET/nightly/"
98 fi
99
99 -# copy to /<pure_version>/ only if it does not have "dev" in the version
100 +# re-generate and copy to /<pure_version>/ only if it does not have "dev" in the version
101 if [[ "$version" != *"dev"* ]]; then
101 - echo "Uploading indices to overwrite /$pure_version/"
102 + echo "Re-generating indices for /$pure_version/"
103 + rm -rf "$INDICES_OUTPUT_DIR/*"
104 + mkdir -p "$INDICES_OUTPUT_DIR"
105 + $PYTHON .buildkite/scripts/generate-nightly-index.py --version "$pure_version" --current-objects "$obj_json" --output-dir "$INDICES_OUTPUT_DIR" --comment "version $pure_version" $alias_arg
106 aws s3 cp --recursive "$INDICES_OUTPUT_DIR/" "s3://$BUCKET/$pure_version/"
107 fi
tests/standalone_tests/python_only_compile.sh
+36 -3
@@ -3,12 +3,45 @@
3 # for users who do not have any compilers installed on their system
4
5 set -e
6 -set -x
6
7 merge_base_commit=$(git merge-base HEAD origin/main)
9 -echo "Current merge base commit with main: $merge_base_commit"
8 +echo "INFO: current merge base commit with main: $merge_base_commit"
9 git show --oneline -s $merge_base_commit
10
11 +# test whether the metadata.json url is valid, retry each 3 minutes up to 5 times
12 +# this avoids cumbersome error messages & manual retries in case the precompiled wheel
13 +# for the given commit is still being built in the release pipeline
14 +meta_json_url="https://wheels.vllm.ai/$merge_base_commit/vllm/metadata.json"
15 +echo "INFO: will use metadata.json from $meta_json_url"
16 +
17 +for i in {1..5}; do
18 + echo "Checking metadata.json URL (attempt $i)..."
19 + if curl --fail "$meta_json_url" > metadata.json; then
20 + echo "INFO: metadata.json URL is valid."
21 + # check whether it is valid json by python
22 + if python3 -m json.tool metadata.json; then
23 + echo "INFO: metadata.json is valid JSON. Proceeding with the test."
24 + else
25 + echo "CRITICAL: metadata.json exists but is not valid JSON, please do report in #sig-ci channel!"
26 + exit 1
27 + fi
28 + break
29 + fi
30 + # failure handling
31 + if [ $i -eq 5 ]; then
32 + echo "ERROR: metadata.json URL is still not valid after 5 attempts."
33 + echo "ERROR: Please check whether the precompiled wheel for commit $merge_base_commit exists."
34 + echo " NOTE: If $merge_base_commit is a new commit on main, maybe try again after its release pipeline finishes."
35 + echo " NOTE: If it fails, please report in #sig-ci channel."
36 + exit 1
37 + else
38 + echo "WARNING: metadata.json URL is not valid. Retrying in 3 minutes..."
39 + sleep 180
40 + fi
41 +done
42 +
43 +set -x
44 +
45 cd /vllm-workspace/
46
47 # uninstall vllm
@@ -29,6 +62,6 @@ python3 -c 'import vllm'
62
63 # Check if the clangd log file was created
64 if [ ! -f /tmp/changed.file ]; then
32 - echo "changed.file was not created, python only compilation failed"
65 + echo "ERROR: changed.file was not created, python only compilation failed"
66 exit 1
67 fi