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/