@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / ebe0ba91db
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 9, 14:45 UTC

[ci] Sync test areas with test-pipeline.yaml and enable new pipeline generator (#33080)

Signed-off-by: Kevin H. Luu <khluu000@gmail.com> Signed-off-by: khluu <khluu000@gmail.com> Co-authored-by: Kevin Luu <khluu@Kevins-MacBook-Pro.local>

Kevin H. Luu committed Jan 26, 2026 at 12:28 UTC ebe0ba91db7ebc2bcefb7f8d72a0825de1fd9241
24 files changed +531 -105
.buildkite/ci_config.yaml
+2 -1
@@ -1,7 +1,8 @@
1 name: vllm_ci
2 job_dirs:
3 - - ".buildkite/test_areas"
3 - ".buildkite/image_build"
4 + - ".buildkite/test_areas"
5 + - ".buildkite/hardware_tests"
6 run_all_patterns:
7 - "docker/Dockerfile"
8 - "CMakeLists.txt"
.buildkite/hardware_tests/amd.yaml new
+28
@@ -0,0 +1,28 @@
1 +group: Hardware
2 +steps:
3 + - label: "AMD: :docker: build image"
4 + device: amd_cpu
5 + no_plugin: true
6 + commands:
7 + - >
8 + docker build
9 + --build-arg max_jobs=16
10 + --build-arg REMOTE_VLLM=1
11 + --build-arg ARG_PYTORCH_ROCM_ARCH='gfx90a;gfx942'
12 + --build-arg VLLM_BRANCH=$BUILDKITE_COMMIT
13 + --tag "rocm/vllm-ci:${BUILDKITE_COMMIT}"
14 + -f docker/Dockerfile.rocm
15 + --target test
16 + --no-cache
17 + --progress plain .
18 + - docker push "rocm/vllm-ci:${BUILDKITE_COMMIT}"
19 + env:
20 + DOCKER_BUILDKIT: "1"
21 + retry:
22 + automatic:
23 + - exit_status: -1 # Agent was lost
24 + limit: 1
25 + - exit_status: -10 # Agent was lost
26 + limit: 1
27 + - exit_status: 1 # Machine occasionally fail
28 + limit: 1
.buildkite/hardware_tests/arm.yaml new
+8
@@ -0,0 +1,8 @@
1 +group: Hardware
2 +steps:
3 + - label: "Arm CPU Test"
4 + soft_fail: true
5 + device: arm_cpu
6 + no_plugin: true
7 + commands:
8 + - bash .buildkite/scripts/hardware_ci/run-cpu-test-arm.sh
.buildkite/hardware_tests/ascend_npu.yaml new
+10
@@ -0,0 +1,10 @@
1 +group: Hardware
2 +depends_on: ~
3 +steps:
4 + - label: "Ascend NPU Test"
5 + soft_fail: true
6 + timeout_in_minutes: 20
7 + no_plugin: true
8 + device: ascend_npu
9 + commands:
10 + - bash .buildkite/scripts/hardware_ci/run-npu-test.sh
.buildkite/hardware_tests/gh200.yaml new
+10
@@ -0,0 +1,10 @@
1 +group: Hardware
2 +steps:
3 + - label: "GH200 Test"
4 + soft_fail: true
5 + device: gh200
6 + no_plugin: true
7 + optional: true
8 + commands:
9 + - nvidia-smi
10 + - bash .buildkite/scripts/hardware_ci/run-gh200-test.sh
.buildkite/hardware_tests/intel.yaml new
+23
@@ -0,0 +1,23 @@
1 +group: Hardware
2 +depends_on: ~
3 +steps:
4 + - label: "Intel CPU Test"
5 + soft_fail: true
6 + device: intel_cpu
7 + no_plugin: true
8 + commands:
9 + - bash .buildkite/scripts/hardware_ci/run-cpu-test.sh
10 +
11 + - label: "Intel HPU Test"
12 + soft_fail: true
13 + device: intel_hpu
14 + no_plugin: true
15 + commands:
16 + - bash .buildkite/scripts/hardware_ci/run-hpu-test.sh
17 +
18 + - label: "Intel GPU Test"
19 + soft_fail: true
20 + device: intel_gpu
21 + no_plugin: true
22 + commands:
23 + - bash .buildkite/scripts/hardware_ci/run-xpu-test.sh
.buildkite/image_build/image_build.sh
+241 -43
@@ -1,56 +1,254 @@
1 #!/bin/bash
2 -set -e
2 +set -euo pipefail
3
4 -if [[ $# -lt 8 ]]; then
5 - echo "Usage: $0 <registry> <repo> <commit> <branch> <vllm_use_precompiled> <vllm_merge_base_commit> <cache_from> <cache_to>"
6 - exit 1
4 +# replace invalid characters in Docker image tags and truncate to 128 chars
5 +clean_docker_tag() {
6 + local input="$1"
7 + echo "$input" | sed 's/[^a-zA-Z0-9._-]/_/g' | cut -c1-128
8 +}
9 +
10 +print_usage_and_exit() {
11 + echo "Usage: $0 <registry> <repo> <commit> <branch> <vllm_use_precompiled> <vllm_merge_base_commit> <cache_from> <cache_to>"
12 + exit 1
13 +}
14 +
15 +print_instance_info() {
16 + echo ""
17 + echo "=== Debug: Instance Information ==="
18 + # Get IMDSv2 token
19 + if TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
20 + -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null); then
21 + AMI_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
22 + http://169.254.169.254/latest/meta-data/ami-id 2>/dev/null || echo "unknown")
23 + INSTANCE_TYPE=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
24 + http://169.254.169.254/latest/meta-data/instance-type 2>/dev/null || echo "unknown")
25 + INSTANCE_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
26 + http://169.254.169.254/latest/meta-data/instance-id 2>/dev/null || echo "unknown")
27 + AZ=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
28 + http://169.254.169.254/latest/meta-data/placement/availability-zone 2>/dev/null || echo "unknown")
29 + echo "AMI ID: ${AMI_ID}"
30 + echo "Instance Type: ${INSTANCE_TYPE}"
31 + echo "Instance ID: ${INSTANCE_ID}"
32 + echo "AZ: ${AZ}"
33 + else
34 + echo "Not running on EC2 or IMDS not available"
35 + fi
36 + # Check for warm cache AMI (marker file baked into custom AMI)
37 + if [[ -f /etc/vllm-ami-info ]]; then
38 + echo "Cache: warm (custom vLLM AMI)"
39 + cat /etc/vllm-ami-info
40 + else
41 + echo "Cache: cold (standard AMI)"
42 + fi
43 + echo "==================================="
44 + echo ""
45 +}
46 +
47 +setup_buildx_builder() {
48 + echo "--- :buildkite: Setting up buildx builder"
49 + if [[ -S "${BUILDKIT_SOCKET}" ]]; then
50 + # Custom AMI with standalone buildkitd - use remote driver for warm cache
51 + echo "✅ Found local buildkitd socket at ${BUILDKIT_SOCKET}"
52 + echo "Using remote driver to connect to buildkitd (warm cache available)"
53 + if docker buildx inspect baked-vllm-builder >/dev/null 2>&1; then
54 + echo "Using existing baked-vllm-builder"
55 + docker buildx use baked-vllm-builder
56 + else
57 + echo "Creating baked-vllm-builder with remote driver"
58 + docker buildx create \
59 + --name baked-vllm-builder \
60 + --driver remote \
61 + --use \
62 + "unix://${BUILDKIT_SOCKET}"
63 + fi
64 + docker buildx inspect --bootstrap
65 + elif docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then
66 + # Existing builder available
67 + echo "Using existing builder: ${BUILDER_NAME}"
68 + docker buildx use "${BUILDER_NAME}"
69 + docker buildx inspect --bootstrap
70 + else
71 + # No local buildkitd, no existing builder - create new docker-container builder
72 + echo "No local buildkitd found, using docker-container driver"
73 + docker buildx create --name "${BUILDER_NAME}" --driver docker-container --use
74 + docker buildx inspect --bootstrap
75 + fi
76 +
77 + # builder info
78 + echo "Active builder:"
79 + docker buildx ls | grep -E '^\*|^NAME' || docker buildx ls
80 +}
81 +
82 +check_and_skip_if_image_exists() {
83 + if [[ -n "${IMAGE_TAG:-}" ]]; then
84 + echo "--- :mag: Checking if image exists"
85 + if docker manifest inspect "${IMAGE_TAG}" >/dev/null 2>&1; then
86 + echo "Image already exists: ${IMAGE_TAG}"
87 + echo "Skipping build"
88 + exit 0
89 + fi
90 + echo "Image not found, proceeding with build"
91 + fi
92 +}
93 +
94 +ecr_login() {
95 + aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin "$REGISTRY"
96 + aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 936637512419.dkr.ecr.us-east-1.amazonaws.com
97 +}
98 +
99 +prepare_cache_tags() {
100 + # resolve and set: CACHE_TO, CACHE_FROM, CACHE_FROM_BASE_BRANCH, CACHE_FROM_MAIN
101 + TEST_CACHE_ECR="936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-test-cache"
102 + MAIN_CACHE_ECR="936637512419.dkr.ecr.us-east-1.amazonaws.com/vllm-ci-postmerge-cache"
103 +
104 + if [[ "$BUILDKITE_PULL_REQUEST" == "false" ]]; then
105 + if [[ "$BUILDKITE_BRANCH" == "main" ]]; then
106 + cache="${MAIN_CACHE_ECR}:latest"
107 + else
108 + clean_branch=$(clean_docker_tag "$BUILDKITE_BRANCH")
109 + cache="${TEST_CACHE_ECR}:${clean_branch}"
110 + fi
111 + CACHE_TO="$cache"
112 + CACHE_FROM="$cache"
113 + CACHE_FROM_BASE_BRANCH="$cache"
114 + else
115 + CACHE_TO="${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}"
116 + CACHE_FROM="${TEST_CACHE_ECR}:pr-${BUILDKITE_PULL_REQUEST}"
117 + if [[ "$BUILDKITE_PULL_REQUEST_BASE_BRANCH" == "main" ]]; then
118 + CACHE_FROM_BASE_BRANCH="${MAIN_CACHE_ECR}:latest"
119 + else
120 + clean_base=$(clean_docker_tag "$BUILDKITE_PULL_REQUEST_BASE_BRANCH")
121 + CACHE_FROM_BASE_BRANCH="${TEST_CACHE_ECR}:${clean_base}"
122 + fi
123 + fi
124 +
125 + CACHE_FROM_MAIN="${MAIN_CACHE_ECR}:latest"
126 + export CACHE_TO CACHE_FROM CACHE_FROM_BASE_BRANCH CACHE_FROM_MAIN
127 +}
128 +
129 +resolve_parent_commit() {
130 + if [[ -z "${PARENT_COMMIT:-}" ]]; then
131 + PARENT_COMMIT=$(git rev-parse HEAD~1 2>/dev/null || echo "")
132 + if [[ -n "${PARENT_COMMIT}" ]]; then
133 + echo "Computed parent commit for cache fallback: ${PARENT_COMMIT}"
134 + export PARENT_COMMIT
135 + else
136 + echo "Could not determine parent commit (may be first commit in repo)"
137 + fi
138 + else
139 + echo "Using provided PARENT_COMMIT: ${PARENT_COMMIT}"
140 + fi
141 +}
142 +
143 +print_bake_config() {
144 + echo "--- :page_facing_up: Resolved bake configuration"
145 + BAKE_CONFIG_FILE="bake-config-build-${BUILDKITE_BUILD_NUMBER:-local}.json"
146 + docker buildx bake -f "${VLLM_BAKE_FILE}" -f "${CI_HCL_PATH}" --print "${TARGET}" | tee "${BAKE_CONFIG_FILE}" || true
147 + echo "Saved bake config to ${BAKE_CONFIG_FILE}"
148 + echo "--- :arrow_down: Uploading bake config to Buildkite"
149 + buildkite-agent artifact upload "${BAKE_CONFIG_FILE}"
150 +}
151 +
152 +#################################
153 +# Main Script #
154 +#################################
155 +print_instance_info
156 +
157 +if [[ $# -lt 7 ]]; then
158 + print_usage_and_exit
159 fi
160
161 +# input args
162 REGISTRY=$1
163 REPO=$2
164 BUILDKITE_COMMIT=$3
165 BRANCH=$4
166 VLLM_USE_PRECOMPILED=$5
167 VLLM_MERGE_BASE_COMMIT=$6
15 -CACHE_FROM=$7
16 -CACHE_TO=$8
17 -
18 -# authenticate with AWS ECR
19 -aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin $REGISTRY
20 -aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 936637512419.dkr.ecr.us-east-1.amazonaws.com
21 -
22 -# docker buildx
23 -docker buildx create --name vllm-builder --driver docker-container --use
24 -docker buildx inspect --bootstrap
25 -docker buildx ls
26 -
27 -# skip build if image already exists
28 -if [[ -z $(docker manifest inspect $REGISTRY/$REPO:$BUILDKITE_COMMIT) ]]; then
29 - echo "Image not found, proceeding with build..."
30 -else
31 - echo "Image found"
32 - exit 0
33 -fi
168 +IMAGE_TAG=$7
169 +IMAGE_TAG_LATEST=${8:-} # only used for main branch, optional
170
35 -if [[ "${VLLM_USE_PRECOMPILED:-0}" == "1" ]]; then
36 - merge_base_commit_build_args="--build-arg VLLM_MERGE_BASE_COMMIT=${VLLM_MERGE_BASE_COMMIT}"
37 -else
38 - merge_base_commit_build_args=""
171 +# build config
172 +TARGET="test-ci"
173 +CI_HCL_URL="${CI_HCL_URL:-https://raw.githubusercontent.com/vllm-project/ci-infra/main/docker/ci.hcl}"
174 +VLLM_BAKE_FILE="${VLLM_BAKE_FILE:-docker/docker-bake.hcl}"
175 +BUILDER_NAME="${BUILDER_NAME:-vllm-builder}"
176 +CI_HCL_PATH="/tmp/ci.hcl"
177 +BUILDKIT_SOCKET="/run/buildkit/buildkitd.sock"
178 +
179 +prepare_cache_tags
180 +ecr_login
181 +
182 +# Environment info (for docs and human readers)
183 +# CI_HCL_URL - URL to ci.hcl (default: from ci-infra main branch)
184 +# VLLM_CI_BRANCH - ci-infra branch to use (default: main)
185 +# VLLM_BAKE_FILE - Path to vLLM's bake file (default: docker/docker-bake.hcl)
186 +# BUILDER_NAME - Name for buildx builder (default: vllm-builder)
187 +#
188 +# Build configuration (exported as environment variables for bake):
189 +export BUILDKITE_COMMIT
190 +export PARENT_COMMIT
191 +export IMAGE_TAG
192 +export IMAGE_TAG_LATEST
193 +export CACHE_FROM
194 +export CACHE_FROM_BASE_BRANCH
195 +export CACHE_FROM_MAIN
196 +export CACHE_TO
197 +export VLLM_USE_PRECOMPILED
198 +export VLLM_MERGE_BASE_COMMIT
199 +
200 +# print args
201 +echo "--- :mag: Arguments"
202 +echo "REGISTRY: ${REGISTRY}"
203 +echo "REPO: ${REPO}"
204 +echo "BUILDKITE_COMMIT: ${BUILDKITE_COMMIT}"
205 +echo "BRANCH: ${BRANCH}"
206 +echo "VLLM_USE_PRECOMPILED: ${VLLM_USE_PRECOMPILED}"
207 +echo "VLLM_MERGE_BASE_COMMIT: ${VLLM_MERGE_BASE_COMMIT}"
208 +echo "IMAGE_TAG: ${IMAGE_TAG}"
209 +echo "IMAGE_TAG_LATEST: ${IMAGE_TAG_LATEST}"
210 +
211 +# print build configuration
212 +echo "--- :mag: Build configuration"
213 +echo "TARGET: ${TARGET}"
214 +echo "CI HCL URL: ${CI_HCL_URL}"
215 +echo "vLLM bake file: ${VLLM_BAKE_FILE}"
216 +echo "BUILDER_NAME: ${BUILDER_NAME}"
217 +echo "CI_HCL_PATH: ${CI_HCL_PATH}"
218 +echo "BUILDKIT_SOCKET: ${BUILDKIT_SOCKET}"
219 +
220 +echo "--- :mag: Cache tags"
221 +echo "CACHE_TO: ${CACHE_TO}"
222 +echo "CACHE_FROM: ${CACHE_FROM}"
223 +echo "CACHE_FROM_BASE_BRANCH: ${CACHE_FROM_BASE_BRANCH}"
224 +echo "CACHE_FROM_MAIN: ${CACHE_FROM_MAIN}"
225 +
226 +check_and_skip_if_image_exists
227 +
228 +echo "--- :docker: Setting up Docker buildx bake"
229 +echo "Target: ${TARGET}"
230 +echo "CI HCL URL: ${CI_HCL_URL}"
231 +echo "vLLM bake file: ${VLLM_BAKE_FILE}"
232 +
233 +if [[ ! -f "${VLLM_BAKE_FILE}" ]]; then
234 + echo "Error: vLLM bake file not found at ${VLLM_BAKE_FILE}"
235 + echo "Make sure you're running from the vLLM repository root"
236 + exit 1
237 fi
238
41 -# build
42 -docker buildx build --file docker/Dockerfile \
43 - --build-arg max_jobs=16 \
44 - --build-arg buildkite_commit=$BUILDKITE_COMMIT \
45 - --build-arg USE_SCCACHE=1 \
46 - --build-arg TORCH_CUDA_ARCH_LIST="8.0 8.9 9.0 10.0" \
47 - --build-arg FI_TORCH_CUDA_ARCH_LIST="8.0 8.9 9.0a 10.0a" \
48 - --build-arg VLLM_USE_PRECOMPILED="${VLLM_USE_PRECOMPILED:-0}" \
49 - ${merge_base_commit_build_args} \
50 - --cache-from type=registry,ref=${CACHE_FROM},mode=max \
51 - --cache-to type=registry,ref=${CACHE_TO},mode=max \
52 - --tag ${REGISTRY}/${REPO}:${BUILDKITE_COMMIT} \
53 - $( [[ "${BRANCH}" == "main" ]] && echo "--tag ${REGISTRY}/${REPO}:latest" ) \
54 - --push \
55 - --target test \
56 - --progress plain .
239 +echo "--- :arrow_down: Downloading ci.hcl"
240 +curl -sSfL -o "${CI_HCL_PATH}" "${CI_HCL_URL}"
241 +echo "Downloaded to ${CI_HCL_PATH}"
242 +
243 +setup_buildx_builder
244 +
245 +# Compute parent commit for cache fallback (if not already set)
246 +resolve_parent_commit
247 +export PARENT_COMMIT
248 +
249 +print_bake_config
250 +
251 +echo "--- :docker: Building ${TARGET}"
252 +docker --debug buildx bake -f "${VLLM_BAKE_FILE}" -f "${CI_HCL_PATH}" --progress plain "${TARGET}"
253 +
254 +echo "--- :white_check_mark: Build complete"
.buildkite/image_build/image_build.yaml
+2 -1
@@ -4,7 +4,8 @@ steps:
4 key: image-build
5 depends_on: []
6 commands:
7 - - .buildkite/image_build/image_build.sh $REGISTRY $REPO $BUILDKITE_COMMIT $BRANCH $VLLM_USE_PRECOMPILED $VLLM_MERGE_BASE_COMMIT $CACHE_FROM $CACHE_TO
7 + - if [[ "$BUILDKITE_BRANCH" != "main" ]]; then .buildkite/image_build/image_build.sh $REGISTRY $REPO $BUILDKITE_COMMIT $BRANCH $VLLM_USE_PRECOMPILED $VLLM_MERGE_BASE_COMMIT $IMAGE_TAG; fi
8 + - if [[ "$BUILDKITE_BRANCH" == "main" ]]; then .buildkite/image_build/image_build.sh $REGISTRY $REPO $BUILDKITE_COMMIT $BRANCH $VLLM_USE_PRECOMPILED $VLLM_MERGE_BASE_COMMIT $IMAGE_TAG_LATEST; fi
9 retry:
10 automatic:
11 - exit_status: -1 # Agent was lost
.buildkite/test_areas/attention.yaml
+2 -2
@@ -4,7 +4,7 @@ depends_on:
4 steps:
5 - label: V1 attention (H100)
6 timeout_in_minutes: 30
7 - gpu: h100
7 + device: h100
8 source_file_dependencies:
9 - vllm/config/attention.py
10 - vllm/model_executor/layers/attention
@@ -15,7 +15,7 @@ steps:
15
16 - label: V1 attention (B200)
17 timeout_in_minutes: 30
18 - gpu: b200
18 + device: b200
19 source_file_dependencies:
20 - vllm/config/attention.py
21 - vllm/model_executor/layers/attention
.buildkite/test_areas/compile.yaml
+4 -4
@@ -5,7 +5,7 @@ steps:
5 - label: Fusion and Compile Tests (B200)
6 timeout_in_minutes: 40
7 working_dir: "/vllm-workspace/"
8 - gpu: b200
8 + device: b200
9 source_file_dependencies:
10 - csrc/quantization/fp4/
11 - vllm/model_executor/layers/quantization/utils/flashinfer_utils.py
@@ -26,7 +26,7 @@ steps:
26 - nvidia-smi
27 - pytest -v -s tests/compile/test_fusion_attn.py
28 - pytest -v -s tests/compile/test_silu_mul_quant_fusion.py
29 - # this runner has 2 GPUs available even though num_gpus=2 is not set
29 + # this runner has 2 GPUs available even though num_devices=2 is not set
30 - pytest -v -s tests/compile/distributed/test_fusion_all_reduce.py
31 # Limit to Inductor partition, no custom ops, and allreduce & attn fusion to reduce running time
32 # Wrap with quotes to escape yaml
@@ -37,9 +37,9 @@ steps:
37 - label: Fusion E2E (2 GPUs)(B200)
38 timeout_in_minutes: 40
39 working_dir: "/vllm-workspace/"
40 - gpu: b200
40 + device: b200
41 optional: true
42 - num_gpus: 2
42 + num_devices: 2
43 source_file_dependencies:
44 - csrc/quantization/fp4/
45 - vllm/model_executor/layers/quantization/utils/flashinfer_utils.py
.buildkite/test_areas/distributed.yaml
+83 -21
@@ -5,7 +5,7 @@ steps:
5 - label: Distributed Comm Ops
6 timeout_in_minutes: 20
7 working_dir: "/vllm-workspace/tests"
8 - num_gpus: 2
8 + num_devices: 2
9 source_file_dependencies:
10 - vllm/distributed
11 - tests/distributed
@@ -18,7 +18,7 @@ steps:
18 - label: Distributed (2 GPUs)
19 timeout_in_minutes: 90
20 working_dir: "/vllm-workspace/tests"
21 - num_gpus: 2
21 + num_devices: 2
22 source_file_dependencies:
23 - vllm/compilation/
24 - vllm/distributed/
@@ -54,7 +54,7 @@ steps:
54 - label: Distributed Tests (4 GPUs)
55 timeout_in_minutes: 50
56 working_dir: "/vllm-workspace/tests"
57 - num_gpus: 4
57 + num_devices: 4
58 source_file_dependencies:
59 - vllm/distributed/
60 - tests/distributed/test_utils
@@ -103,8 +103,8 @@ steps:
103
104 - label: Distributed Tests (8 GPUs)(H100)
105 timeout_in_minutes: 10
106 - gpu: h100
107 - num_gpus: 8
106 + device: h100
107 + num_devices: 8
108 working_dir: "/vllm-workspace/tests"
109 source_file_dependencies:
110 - examples/offline_inference/torchrun_dp_example.py
@@ -120,9 +120,9 @@ steps:
120 - torchrun --nproc-per-node=8 ../examples/offline_inference/torchrun_dp_example.py --tp-size=2 --pp-size=1 --dp-size=4 --enable-ep
121
122 - label: Distributed Tests (4 GPUs)(A100)
123 - gpu: a100
123 + device: a100
124 optional: true
125 - num_gpus: 4
125 + num_devices: 4
126 source_file_dependencies:
127 - vllm/
128 commands:
@@ -133,26 +133,34 @@ steps:
133 - TARGET_TEST_SUITE=A100 pytest basic_correctness/ -v -s -m 'distributed(num_gpus=2)'
134 - pytest -v -s -x lora/test_mixtral.py
135
136 -- label: Distributed Tests (2 GPUs)(H200)
137 - gpu: h200
136 +- label: Sequence Parallel Tests (H100)
137 + timeout_in_minutes: 60
138 + working_dir: "/vllm-workspace/"
139 + device: h100
140 + optional: true
141 + num_devices: 2
142 + commands:
143 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
144 + # Run sequence parallel tests
145 + - pytest -v -s tests/distributed/test_sequence_parallel.py
146 + - pytest -v -s tests/compile/distributed/test_sequence_parallelism.py
147 +
148 +- label: Distributed Tests (2 GPUs)(H100)
149 + device: h100
150 optional: true
151 working_dir: "/vllm-workspace/"
140 - num_gpus: 2
152 + num_devices: 2
153 commands:
154 - VLLM_TEST_CLEAN_GPU_MEMORY=1 pytest -v -s tests/compile/distributed/test_async_tp.py
143 - - pytest -v -s tests/compile/distributed/test_sequence_parallelism.py
144 - - pytest -v -s tests/compile/distributed/test_fusion_all_reduce.py
145 - - VLLM_TEST_CLEAN_GPU_MEMORY=1 pytest -v -s tests/compile/distributed/test_fusions_e2e.py -k 'not Llama-4'
146 - - VLLM_TEST_CLEAN_GPU_MEMORY=1 pytest -v -s tests/distributed/test_sequence_parallel.py
155 - pytest -v -s tests/distributed/test_context_parallel.py
148 - - CUDA_VISIBLE_DEVICES=1,2 VLLM_USE_DEEP_GEMM=1 VLLM_LOGGING_LEVEL=DEBUG python3 examples/offline_inference/data_parallel.py --model=Qwen/Qwen1.5-MoE-A2.7B -tp=1 -dp=2 --max-model-len=2048 --all2all-backend=deepep_high_throughput
156 + - VLLM_USE_DEEP_GEMM=1 VLLM_LOGGING_LEVEL=DEBUG python3 examples/offline_inference/data_parallel.py --model=Qwen/Qwen1.5-MoE-A2.7B -tp=1 -dp=2 --max-model-len=2048 --all2all-backend=deepep_high_throughput
157 - pytest -v -s tests/v1/distributed/test_dbo.py
158
159 - label: Distributed Tests (2 GPUs)(B200)
152 - gpu: b200
160 + device: b200
161 optional: true
162 working_dir: "/vllm-workspace/"
155 - num_gpus: 2
163 + num_devices: 2
164 commands:
165 - pytest -v -s tests/distributed/test_context_parallel.py
166 - pytest -v -s tests/distributed/test_nccl_symm_mem_allreduce.py
@@ -161,8 +169,9 @@ steps:
169 - label: 2 Node Test (4 GPUs)
170 timeout_in_minutes: 30
171 working_dir: "/vllm-workspace/tests"
164 - num_gpus: 2
172 + num_devices: 2
173 num_nodes: 2
174 + no_plugin: true
175 source_file_dependencies:
176 - vllm/distributed/
177 - vllm/engine/
@@ -176,7 +185,7 @@ steps:
185 - label: Distributed NixlConnector PD accuracy (4 GPUs)
186 timeout_in_minutes: 30
187 working_dir: "/vllm-workspace/tests"
179 - num_gpus: 4
188 + num_devices: 4
189 source_file_dependencies:
190 - vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py
191 - tests/v1/kv_connector/nixl_integration/
@@ -184,10 +193,21 @@ steps:
193 - uv pip install --system -r /vllm-workspace/requirements/kv_connectors.txt
194 - bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
195
196 +- label: DP EP Distributed NixlConnector PD accuracy tests (4 GPUs)
197 + timeout_in_minutes: 30
198 + working_dir: "/vllm-workspace/tests"
199 + num_devices: 4
200 + source_file_dependencies:
201 + - vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py
202 + - tests/v1/kv_connector/nixl_integration/
203 + commands:
204 + - uv pip install --system -r /vllm-workspace/requirements/kv_connectors.txt
205 + - DP_EP=1 bash v1/kv_connector/nixl_integration/config_sweep_accuracy_test.sh
206 +
207 - label: Pipeline + Context Parallelism (4 GPUs))
208 timeout_in_minutes: 60
209 working_dir: "/vllm-workspace/tests"
190 - num_gpus: 4
210 + num_devices: 4
211 source_file_dependencies:
212 - vllm/distributed/
213 - vllm/engine/
@@ -196,4 +216,46 @@ steps:
216 - tests/distributed/
217 commands:
218 - pytest -v -s distributed/test_pp_cudagraph.py
199 - - pytest -v -s distributed/test_pipeline_parallel.py
\ No newline at end of file
219 + - pytest -v -s distributed/test_pipeline_parallel.py
220 +
221 +- label: Hopper Fusion E2E Tests (H100)
222 + timeout_in_minutes: 70
223 + working_dir: "/vllm-workspace/"
224 + device: h100
225 + optional: true
226 + source_file_dependencies:
227 + - csrc/quantization/fp4/
228 + - vllm/model_executor/layers/quantization/utils/flashinfer_utils.py
229 + - vllm/v1/attention/backends/flashinfer.py
230 + - vllm/compilation/
231 + # can affect pattern matching
232 + - vllm/model_executor/layers/layernorm.py
233 + - vllm/model_executor/layers/activation.py
234 + - vllm/model_executor/layers/quantization/input_quant_fp8.py
235 + - tests/compile/test_fusion_attn.py
236 + commands:
237 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
238 + # skip Llama-4 since it does not fit on this device
239 + - pytest -v -s tests/compile/test_fusion_attn.py -k 'not Llama-4'
240 +
241 +- label: Hopper Fusion Distributed E2E Tests (2xH100)
242 + timeout_in_minutes: 70
243 + working_dir: "/vllm-workspace/"
244 + device: h100
245 + optional: true
246 + num_devices: 2
247 + source_file_dependencies:
248 + - csrc/quantization/fp4/
249 + - vllm/model_executor/layers/quantization/utils/flashinfer_utils.py
250 + - vllm/v1/attention/backends/flashinfer.py
251 + - vllm/compilation/
252 + # can affect pattern matching
253 + - vllm/model_executor/layers/layernorm.py
254 + - vllm/model_executor/layers/activation.py
255 + - vllm/model_executor/layers/quantization/input_quant_fp8.py
256 + - tests/compile/distributed/test_fusions_e2e.py
257 + commands:
258 + - export VLLM_TEST_CLEAN_GPU_MEMORY=1
259 + # Run all e2e fusion tests
260 + - pytest -v -s tests/compile/distributed/test_fusions_e2e.py -k 'not Llama-4'
261 + - pytest -v -s tests/compile/distributed/test_fusion_all_reduce.py
.buildkite/test_areas/e2e_integration.yaml
+8 -7
@@ -4,27 +4,27 @@ depends_on:
4 steps:
5 - label: DeepSeek V2-Lite Accuracy
6 timeout_in_minutes: 60
7 - gpu: h100
7 + device: h100
8 optional: true
9 - num_gpus: 4
9 + num_devices: 4
10 working_dir: "/vllm-workspace"
11 commands:
12 - bash .buildkite/scripts/scheduled_integration_test/deepseek_v2_lite_ep_eplb.sh 0.25 200 8010
13
14 - label: Qwen3-30B-A3B-FP8-block Accuracy
15 timeout_in_minutes: 60
16 - gpu: h100
16 + device: h100
17 optional: true
18 - num_gpus: 4
18 + num_devices: 4
19 working_dir: "/vllm-workspace"
20 commands:
21 - bash .buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_block_ep_eplb.sh 0.8 200 8020
22
23 - label: Qwen3-30B-A3B-FP8-block Accuracy (B200)
24 timeout_in_minutes: 60
25 - gpu: b200
25 + device: b200
26 optional: true
27 - num_gpus: 2
27 + num_devices: 2
28 working_dir: "/vllm-workspace"
29 commands:
30 - bash .buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_block_ep_eplb.sh 0.8 200 8020 2 1
@@ -33,10 +33,11 @@ steps:
33 timeout_in_minutes: 30
34 optional: true
35 soft_fail: true
36 - num_gpus: 2
36 + num_devices: 2
37 working_dir: "/vllm-workspace"
38 source_file_dependencies:
39 - vllm/
40 - .buildkite/scripts/run-prime-rl-test.sh
41 commands:
42 + - nvidia-smi
43 - bash .buildkite/scripts/run-prime-rl-test.sh
.buildkite/test_areas/engine.yaml
+5 -1
@@ -23,4 +23,8 @@ steps:
23 # TODO: accuracy does not match, whether setting
24 # VLLM_USE_FLASHINFER_SAMPLER or not on H100.
25 - pytest -v -s v1/e2e
26 - - pytest -v -s v1/engine
26 + # Run this test standalone for now;
27 + # need to untangle use (implicit) use of spawn/fork across the tests.
28 + - pytest -v -s v1/engine/test_preprocess_error_handling.py
29 + # Run the rest of v1/engine tests
30 + - pytest -v -s v1/engine --ignore v1/engine/test_preprocess_error_handling.py
.buildkite/test_areas/expert_parallelism.yaml
+1 -1
@@ -14,7 +14,7 @@ steps:
14 - label: EPLB Execution
15 timeout_in_minutes: 20
16 working_dir: "/vllm-workspace/tests"
17 - num_gpus: 4
17 + num_devices: 4
18 source_file_dependencies:
19 - vllm/distributed/eplb
20 - tests/distributed/test_eplb_execute.py
.buildkite/test_areas/kernels.yaml
+55 -4
@@ -57,8 +57,8 @@ steps:
57
58 - label: Kernels DeepGEMM Test (H100)
59 timeout_in_minutes: 45
60 - gpu: h100
61 - num_gpus: 1
60 + device: h100
61 + num_devices: 1
62 source_file_dependencies:
63 - tools/install_deepgemm.sh
64 - vllm/utils/deep_gemm.py
@@ -77,7 +77,7 @@ steps:
77 - label: Kernels (B200)
78 timeout_in_minutes: 30
79 working_dir: "/vllm-workspace/"
80 - gpu: b200
80 + device: b200
81 # optional: true
82 source_file_dependencies:
83 - csrc/quantization/fp4/
@@ -114,4 +114,55 @@ steps:
114 - pytest -v -s tests/kernels/moe/test_nvfp4_moe.py
115 - pytest -v -s tests/kernels/moe/test_ocp_mx_moe.py
116 - pytest -v -s tests/kernels/moe/test_flashinfer.py
117 - - pytest -v -s tests/kernels/moe/test_cutedsl_moe.py
\ No newline at end of file
117 + - pytest -v -s tests/kernels/moe/test_cutedsl_moe.py
118 + # e2e
119 + - pytest -v -s tests/models/quantization/test_nvfp4.py
120 +
121 +- label: Kernels Helion Test
122 + timeout_in_minutes: 30
123 + device: h100
124 + source_file_dependencies:
125 + - vllm/utils/import_utils.py
126 + - tests/kernels/helion/
127 + commands:
128 + - pip install helion
129 + - pytest -v -s kernels/helion/
130 +
131 +
132 +- label: Kernels FP8 MoE Test (1 H100)
133 + timeout_in_minutes: 90
134 + device: h100
135 + num_devices: 1
136 + optional: true
137 + commands:
138 + - pytest -v -s kernels/moe/test_cutlass_moe.py
139 + - pytest -v -s kernels/moe/test_flashinfer.py
140 + - pytest -v -s kernels/moe/test_gpt_oss_triton_kernels.py
141 + - pytest -v -s kernels/moe/test_modular_oai_triton_moe.py
142 + - pytest -v -s kernels/moe/test_moe.py
143 + # - pytest -v -s kernels/moe/test_block_fp8.py - failing on main
144 + - pytest -v -s kernels/moe/test_block_int8.py
145 + - pytest -v -s kernels/moe/test_triton_moe_no_act_mul.py
146 + - pytest -v -s kernels/moe/test_triton_moe_ptpc_fp8.py
147 +
148 +- label: Kernels FP8 MoE Test (2 H100s)
149 + timeout_in_minutes: 90
150 + device: h100
151 + num_devices: 2
152 + optional: true
153 + commands:
154 + - pytest -v -s kernels/moe/test_deepep_deepgemm_moe.py
155 + - pytest -v -s kernels/moe/test_deepep_moe.py
156 + - pytest -v -s kernels/moe/test_pplx_cutlass_moe.py
157 + # - pytest -v -s kernels/moe/test_pplx_moe.py - failing on main
158 +
159 +- label: Kernels Fp4 MoE Test (B200)
160 + timeout_in_minutes: 60
161 + device: b200
162 + num_devices: 1
163 + optional: true
164 + commands:
165 + - pytest -v -s kernels/moe/test_cutedsl_moe.py
166 + - pytest -v -s kernels/moe/test_flashinfer_moe.py
167 + - pytest -v -s kernels/moe/test_nvfp4_moe.py
168 + - pytest -v -s kernels/moe/test_ocp_mx_moe.py
.buildkite/test_areas/lm_eval.yaml
+34 -5
@@ -12,9 +12,9 @@ steps:
12 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-small.txt
13
14 - label: LM Eval Large Models (4 GPUs)(A100)
15 - gpu: a100
15 + device: a100
16 optional: true
17 - num_gpus: 4
17 + num_devices: 4
18 working_dir: "/vllm-workspace/.buildkite/lm-eval-harness"
19 source_file_dependencies:
20 - csrc/
@@ -24,9 +24,9 @@ steps:
24 - pytest -s -v test_lm_eval_correctness.py --config-list-file=configs/models-large.txt --tp-size=4
25
26 - label: LM Eval Large Models (4 GPUs)(H100)
27 - gpu: h100
27 + device: h100
28 optional: true
29 - num_gpus: 4
29 + num_devices: 4
30 working_dir: "/vllm-workspace/.buildkite/lm-eval-harness"
31 source_file_dependencies:
32 - csrc/
@@ -37,10 +37,39 @@ steps:
37
38 - label: LM Eval Small Models (B200)
39 timeout_in_minutes: 120
40 - gpu: b200
40 + device: b200
41 optional: true
42 source_file_dependencies:
43 - csrc/
44 - vllm/model_executor/layers/quantization
45 commands:
46 - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell.txt
47 +
48 +- label: LM Eval Large Models (H200)
49 + timeout_in_minutes: 60
50 + device: h200
51 + optional: true
52 + num_devices: 8
53 + commands:
54 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-h200.txt
55 +
56 +- label: MoE Refactor Integration Test (H100 - TEMPORARY)
57 + device: h100
58 + optional: true
59 + num_devices: 2
60 + commands:
61 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/moe-refactor/config-h100.txt
62 +
63 +- label: MoE Refactor Integration Test (B200 - TEMPORARY)
64 + gpu: b200
65 + optional: true
66 + num_devices: 2
67 + commands:
68 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/moe-refactor/config-b200.txt
69 +
70 +- label: MoE Refactor Integration Test (B200 DP - TEMPORARY)
71 + device: b200
72 + optional: true
73 + num_devices: 2
74 + commands:
75 + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/moe-refactor-dp-ep/config-b200.txt
.buildkite/test_areas/lora.yaml
+1 -1
@@ -14,7 +14,7 @@ steps:
14
15 - label: LoRA TP (Distributed)
16 timeout_in_minutes: 30
17 - num_gpus: 4
17 + num_devices: 4
18 source_file_dependencies:
19 - vllm/lora
20 - tests/lora
.buildkite/test_areas/misc.yaml
+5 -5
@@ -31,7 +31,7 @@ steps:
31 source_file_dependencies:
32 - vllm/
33 - tests/v1
34 - no_gpu: true
34 + device: cpu
35 commands:
36 # split the test to avoid interference
37 - pytest -v -s -m 'cpu_test' v1/core
@@ -82,7 +82,7 @@ steps:
82
83 - label: Metrics, Tracing (2 GPUs)
84 timeout_in_minutes: 20
85 - num_gpus: 2
85 + num_devices: 2
86 source_file_dependencies:
87 - vllm/
88 - tests/v1/tracing
@@ -127,7 +127,7 @@ steps:
127 - tests/tool_parsers
128 - tests/transformers_utils
129 - tests/config
130 - no_gpu: true
130 + device: cpu
131 commands:
132 - python3 standalone_tests/lazy_imports.py
133 - pytest -v -s test_inputs.py
@@ -142,7 +142,7 @@ steps:
142 - label: GPT-OSS Eval (B200)
143 timeout_in_minutes: 60
144 working_dir: "/vllm-workspace/"
145 - gpu: b200
145 + device: b200
146 optional: true
147 source_file_dependencies:
148 - tests/evals/gpt_oss
@@ -155,7 +155,7 @@ steps:
155
156 - label: Batch Invariance (H100)
157 timeout_in_minutes: 25
158 - gpu: h100
158 + device: h100
159 source_file_dependencies:
160 - vllm/v1/attention
161 - vllm/model_executor/layers
.buildkite/test_areas/models_basic.yaml
+1 -1
@@ -44,7 +44,7 @@ steps:
44 - vllm/
45 - tests/models/test_utils.py
46 - tests/models/test_vision.py
47 - no_gpu: true
47 + device: cpu
48 commands:
49 - pytest -v -s models/test_utils.py models/test_vision.py
50
.buildkite/test_areas/models_distributed.yaml
+1 -1
@@ -5,7 +5,7 @@ steps:
5 - label: Distributed Model Tests (2 GPUs)
6 timeout_in_minutes: 50
7 working_dir: "/vllm-workspace/tests"
8 - num_gpus: 2
8 + num_devices: 2
9 source_file_dependencies:
10 - vllm/model_executor/model_loader/sharded_state_loader.py
11 - vllm/model_executor/models/
.buildkite/test_areas/models_multimodal.yaml
+1 -1
@@ -18,7 +18,7 @@ steps:
18 source_file_dependencies:
19 - vllm/
20 - tests/models/multimodal
21 - no_gpu: true
21 + device: cpu
22 commands:
23 - pip install git+https://github.com/TIGER-AI-Lab/Mantis.git
24 - pytest -v -s models/multimodal/processing --ignore models/multimodal/processing/test_tensor_schema.py
.buildkite/test_areas/plugins.yaml
+1 -1
@@ -5,7 +5,7 @@ steps:
5 - label: Plugin Tests (2 GPUs)
6 timeout_in_minutes: 60
7 working_dir: "/vllm-workspace/tests"
8 - num_gpus: 2
8 + num_devices: 2
9 source_file_dependencies:
10 - vllm/plugins/
11 - tests/plugins/
.buildkite/test_areas/quantization.yaml
+2 -2
@@ -16,14 +16,14 @@ steps:
16 # https://github.com/pytorch/ao/issues/2919, we'll have to skip new torchao tests for now
17 # we can only upgrade after this is resolved
18 # TODO(jerryzh168): resolve the above comment
19 - - uv pip install --system torchao==0.13.0 --index-url https://download.pytorch.org/whl/cu129
19 + - uv pip install --system torchao==0.14.1 --index-url https://download.pytorch.org/whl/cu129
20 - uv pip install --system conch-triton-kernels
21 - VLLM_TEST_FORCE_LOAD_FORMAT=auto pytest -v -s quantization/ --ignore quantization/test_blackwell_moe.py
22
23 - label: Quantized MoE Test (B200)
24 timeout_in_minutes: 60
25 working_dir: "/vllm-workspace/"
26 - gpu: b200
26 + device: b200
27 source_file_dependencies:
28 - tests/quantization/test_blackwell_moe.py
29 - vllm/model_executor/models/deepseek_v2.py
.buildkite/test_areas/weight_loading.yaml
+3 -3
@@ -5,7 +5,7 @@ steps:
5 - label: Weight Loading Multiple GPU # 33min
6 timeout_in_minutes: 45
7 working_dir: "/vllm-workspace/tests"
8 - num_gpus: 2
8 + num_devices: 2
9 optional: true
10 source_file_dependencies:
11 - vllm/
@@ -15,8 +15,8 @@ steps:
15
16 - label: Weight Loading Multiple GPU - Large Models # optional
17 working_dir: "/vllm-workspace/tests"
18 - num_gpus: 2
19 - gpu: a100
18 + num_devices: 2
19 + device: a100
20 optional: true
21 source_file_dependencies:
22 - vllm/