[CI] Shard long kernel test groups (#54754)

Signed-off-by: Kevin Luu <51931015+khluu@users.noreply.github.com>

Kevin H. Luu committed Sep 1, 2026 at 15:58 UTC 3b6c0bdae9ef0a923dfbd545e3633b95db36a13d
1 file changed +53 -39
.buildkite/test_areas/kernels.yaml
+53 -39
@@ -106,7 +106,7 @@ steps:
106 key: kernels-attention-test
107 device: l4
108 num_devices: 1
109 - timeout_in_minutes: 65
109 + timeout_in_minutes: 30
110 source_file_dependencies:
111 - csrc/attention/
112 - vllm/v1/attention
@@ -116,7 +116,7 @@ steps:
116 - tests/kernels/attention
117 commands:
118 - pytest -v -s kernels/attention --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
119 - parallelism: 2
119 + parallelism: 7
120 mirror:
121 amd:
122 label: ":amd: (MI300) Attention Kernels Shard %N"
@@ -169,19 +169,22 @@ steps:
169 key: kernels-quantization-test
170 device: l4
171 num_devices: 1
172 - timeout_in_minutes: 60
172 + timeout_in_minutes: 30
173 source_file_dependencies:
174 - csrc/quantization/
175 - vllm/model_executor/layers/quantization
176 - tests/kernels/quantization
177 commands:
178 - pytest -v -s kernels/quantization --shard-id=$$BUILDKITE_PARALLEL_JOB --num-shards=$$BUILDKITE_PARALLEL_JOB_COUNT
179 - parallelism: 2
179 + parallelism: 6
180 mirror:
181 amd:
182 label: ":amd: (MI300) Quantization Kernels Shard %N"
183 dind: false
184 device: mi300_1
185 + # Pin the AMD mirror at its current 2 shards so raising NVIDIA
186 + # parallelism does not multiply AMD copies (needs ci-infra #473).
187 + parallelism: 2
188 timeout_in_minutes: 120
189 source_file_dependencies:
190 - csrc/quantization/
@@ -277,9 +280,10 @@ steps:
280 - pytest -v -s kernels/attention/test_deepgemm_attention.py
281 - pytest -v -s quantization/test_cutlass_w4a16.py
282
280 -- label: ":nvidia: (B200) Kernels"
283 +- label: ":nvidia: (B200) Kernels Shard %N"
284 key: kernels-b200
282 - timeout_in_minutes: 80
285 + timeout_in_minutes: 30
286 + parallelism: 3
287 working_dir: "/vllm-workspace/"
288 device: b200-k8s
289 # optional: true
@@ -323,39 +327,49 @@ steps:
327 - tests/kernels/test_top_k_per_row.py
328 commands:
329 - nvidia-smi
326 - - python3 examples/basic/offline_inference/chat.py
327 - # Attention
328 - # num_heads2 broken by https://github.com/flashinfer-ai/flashinfer/issues/1353
329 - - pytest -v -s tests/kernels/attention/test_attention_selector.py
330 - - pytest -v -s tests/kernels/attention/test_flashinfer.py -k 'not num_heads2'
331 - - pytest -v -s tests/kernels/attention/test_flashinfer_trtllm_attention.py
332 - - pytest -v -s tests/kernels/attention/test_cutlass_mla_decode.py
333 - - pytest -v -s tests/kernels/attention/test_flashinfer_mla_decode.py
334 - - pytest -v -s tests/kernels/attention/test_minimax_m3_msa_cutlass_sparse_decode.py
335 - - pytest -v -s tests/kernels/test_fused_minimax_m3_qknorm_rope_kv_insert.py
336 - - pytest -v -s tests/kernels/test_top_k_per_row.py
337 - # Quantization
338 - - pytest -v -s tests/kernels/quantization/test_cutlass_scaled_mm.py -k 'fp8'
339 - - pytest -v -s tests/kernels/quantization/test_nvfp4_quant.py
340 - - pytest -v -s tests/kernels/quantization/test_silu_mul_nvfp4_quant.py
341 - - pytest -v -s tests/kernels/quantization/test_nvfp4_scaled_mm.py
342 - - pytest -v -s tests/kernels/quantization/test_flashinfer_scaled_mm.py
343 - - pytest -v -s tests/kernels/quantization/test_flashinfer_nvfp4_scaled_mm.py
344 - - pytest -v -s tests/kernels/quantization/test_nvfp4_qutlass.py
345 - - pytest -v -s tests/kernels/quantization/test_mxfp4_qutlass.py
346 - - pytest -v -s tests/kernels/moe/test_nvfp4_moe.py
347 - - pytest -v -s tests/kernels/moe/test_mxfp4_moe.py
348 - - pytest -v -s tests/kernels/moe/test_ocp_mx_moe.py
349 - - pytest -v -s tests/kernels/moe/test_flashinfer.py
350 - - pytest -v -s tests/kernels/moe/test_flashinfer_moe.py
351 - - pytest -v -s tests/kernels/moe/test_trtllm_nvfp4_moe.py
352 - - pytest -v -s tests/kernels/moe/test_cutedsl_moe.py
353 - - pytest -v -s tests/kernels/mamba/test_gdn_prefill_cutedsl.py
354 - - pytest -v -s tests/kernels/test_bf16x3_router_gemm_cutedsl.py
355 - - pytest -v -s tests/kernels/attention/test_minimax_m3.py
356 - - pytest -v -s tests/kernels/test_ll_bf16_gemm.py
357 - # e2e
358 - - pytest -v -s tests/models/quantization/test_nvfp4.py
330 + - |
331 + set -eu
332 + case "$$BUILDKITE_PARALLEL_JOB" in
333 + 0)
334 + pytest -v -s tests/kernels/attention/test_attention_selector.py
335 + pytest -v -s tests/kernels/attention/test_flashinfer_trtllm_attention.py
336 + pytest -v -s tests/kernels/attention/test_flashinfer_mla_decode.py
337 + pytest -v -s tests/kernels/test_top_k_per_row.py
338 + pytest -v -s tests/kernels/quantization/test_silu_mul_nvfp4_quant.py
339 + pytest -v -s tests/kernels/quantization/test_flashinfer_scaled_mm.py
340 + pytest -v -s tests/kernels/moe/test_nvfp4_moe.py
341 + pytest -v -s tests/kernels/moe/test_ocp_mx_moe.py
342 + pytest -v -s tests/kernels/test_bf16x3_router_gemm_cutedsl.py
343 + pytest -v -s tests/kernels/test_ll_bf16_gemm.py
344 + ;;
345 + 1)
346 + python3 examples/basic/offline_inference/chat.py
347 + pytest -v -s tests/kernels/attention/test_minimax_m3_msa_cutlass_sparse_decode.py
348 + pytest -v -s tests/kernels/test_fused_minimax_m3_qknorm_rope_kv_insert.py
349 + pytest -v -s tests/kernels/quantization/test_flashinfer_nvfp4_scaled_mm.py
350 + pytest -v -s tests/kernels/quantization/test_nvfp4_qutlass.py
351 + pytest -v -s tests/kernels/moe/test_mxfp4_moe.py
352 + pytest -v -s tests/kernels/moe/test_flashinfer_moe.py
353 + pytest -v -s tests/kernels/moe/test_cutedsl_moe.py
354 + pytest -v -s tests/models/quantization/test_nvfp4.py
355 + ;;
356 + 2)
357 + pytest -v -s tests/kernels/attention/test_flashinfer.py -k 'not num_heads2'
358 + pytest -v -s tests/kernels/attention/test_cutlass_mla_decode.py
359 + pytest -v -s tests/kernels/quantization/test_cutlass_scaled_mm.py -k 'fp8'
360 + pytest -v -s tests/kernels/quantization/test_nvfp4_quant.py
361 + pytest -v -s tests/kernels/quantization/test_nvfp4_scaled_mm.py
362 + pytest -v -s tests/kernels/quantization/test_mxfp4_qutlass.py
363 + pytest -v -s tests/kernels/moe/test_flashinfer.py
364 + pytest -v -s tests/kernels/moe/test_trtllm_nvfp4_moe.py
365 + pytest -v -s tests/kernels/mamba/test_gdn_prefill_cutedsl.py
366 + pytest -v -s tests/kernels/attention/test_minimax_m3.py
367 + ;;
368 + *)
369 + echo "unexpected BUILDKITE_PARALLEL_JOB=$$BUILDKITE_PARALLEL_JOB" >&2
370 + exit 1
371 + ;;
372 + esac
373
374 - label: ":nvidia: (DGX) Spark b12x Linear Kernels Nightly"
375 key: b12x-linear-kernels-dgx-spark-nightly