diff --git a/.buildkite/test-amd.yaml b/.buildkite/test-amd.yaml index 55f7f382c8..69dd0d8cff 100644 --- a/.buildkite/test-amd.yaml +++ b/.buildkite/test-amd.yaml @@ -3301,6 +3301,85 @@ steps: - pytest -v -s tests/compile/passes/test_fusion_attn.py tests/compile/passes/test_silu_mul_quant_fusion.py tests/compile/passes/test_silu_mul_quant_manual_fusion.py - pytest -v -s tests/compile/correctness_e2e/test_attn_quant.py +- label: ":amd: (MI355) Sequence Parallel Correctness" + timeout_in_minutes: 180 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_2 + num_gpus: 2 + optional: true + working_dir: "/vllm-workspace/" + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - vllm/compilation/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/kernels/linear/ + - vllm/model_executor/layers/ + - vllm/model_executor/models/llama.py + - vllm/v1/attention/ + - vllm/v1/worker/ + - vllm/v1/cudagraph_dispatcher.py + - vllm/platforms/rocm.py + - tests/compile/correctness_e2e/test_sequence_parallel.py + - tests/models/registry.py + - tests/utils.py + commands: + - export VLLM_TEST_CLEAN_GPU_MEMORY=1 + - pytest -v -s tests/compile/correctness_e2e/test_sequence_parallel.py + +- label: ":amd: (MI355) AsyncTP Correctness" + timeout_in_minutes: 60 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_2 + num_gpus: 2 + optional: true + working_dir: "/vllm-workspace/" + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - vllm/compilation/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/layers/ + - vllm/model_executor/kernels/linear/ + - vllm/model_executor/models/llama.py + - vllm/model_executor/models/qwen3.py + - vllm/v1/attention/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + - vllm/transformers_utils/repo_utils.py + - tests/compile/correctness_e2e/test_async_tp.py + - tests/compile/fusions_e2e/common.py + - tests/models/registry.py + - tests/utils.py + commands: + - export VLLM_TEST_CLEAN_GPU_MEMORY=1 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_rocm_async_tp_bf16_output_correctness + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_correctness -k RedHatAI + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_nvfp4_correctness + +- label: ":amd: (MI355 DPX) Fusion E2E FP8 Config Sweep" + timeout_in_minutes: 45 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_dpx + num_gpus: 1 + optional: true + working_dir: "/vllm-workspace/" + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - csrc/quantization/ + - vllm/compilation/ + - vllm/model_executor/ + - vllm/v1/attention/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + - tests/compile/fusions_e2e/ + commands: + - rocm-smi + - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "test_tp1_fp8_fusions and inductor_partition and not +rms_norm and not True and ((Llama-3 and TRITON_ATTN) or (Qwen3-30B and +quant_fp8 and TRITON_ATTN) or (DeepSeek-Coder and +quant_fp8 and TRITON_MLA))" + #-------------------------------------------------------- mi355 · distributed --------------------------------------------------------# - label: ":amd: (MI355 DPX) EPLB Algorithm" # TBD @@ -3572,6 +3651,26 @@ steps: - pytest -v -s tests/distributed/test_rocm_quick_reduce.py - pytest -v -s tests/distributed/test_quick_all_reduce.py +- label: ":amd: (MI355) Distributed AgRs All2All" + timeout_in_minutes: 30 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_2 + num_gpus: 2 + optional: true + working_dir: "/vllm-workspace/" + source_file_dependencies: + - .buildkite/test_areas/distributed.yaml + - vllm/distributed/ + - vllm/config/parallel.py + - vllm/config/vllm.py + - vllm/forward_context.py + - vllm/platforms/rocm.py + - tests/distributed/test_mnnvl_alltoall.py + - tests/utils.py + commands: + - pytest -v -s tests/distributed/test_mnnvl_alltoall.py::test_args_dispatch_combine + - label: ":amd: (MI355) Fusion E2E TP2 Quick" # TBD timeout_in_minutes: 60 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] @@ -3953,6 +4052,30 @@ steps: commands: - pytest -s -v evals/gpt_oss/test_gpqa_correctness.py --config-list-file=configs/models-gfx950.txt +- label: ":amd: (MI355 DPX) LM Eval Small Models" + timeout_in_minutes: 45 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_dpx + num_gpus: 1 + optional: true + working_dir: "/vllm-workspace/tests" + source_file_dependencies: + - .buildkite/test_areas/lm_eval.yaml + - csrc/ + - tests/evals/gsm8k/ + - vllm/model_executor/layers/quantization + - vllm/model_executor/kernels/linear/ + - vllm/model_executor/layers/fused_moe/ + - vllm/model_executor/models/ + - vllm/model_executor/model_loader/ + - vllm/v1/attention/backends/ + - vllm/v1/attention/selector.py + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + commands: + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-gfx950-small.txt + - label: ":amd: (MI355 DPX) LM Eval Watermarking" timeout_in_minutes: 45 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] @@ -3999,7 +4122,7 @@ steps: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-watermark-dspark-tp2.txt - label: ":amd: (MI355) LM Eval Qwen3-5 Models" # TBD - timeout_in_minutes: 40 + timeout_in_minutes: 75 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false agent_pool: mi355_2 @@ -4018,6 +4141,10 @@ steps: - vllm/distributed/ - vllm/model_executor/layers/fused_moe/ - vllm/third_party/flash_linear_attention/ops/ + - vllm/model_executor/layers/quantization/modelopt.py + - vllm/model_executor/kernels/linear/nvfp4/ + - vllm/v1/attention/ + - vllm/v1/worker/ - tests/evals/gsm8k/ - tests/utils.py - vllm/_aiter_ops.py @@ -4025,6 +4152,48 @@ steps: commands: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-qwen35-mi355.txt +- label: ":amd: (MI355) LM Eval Large Models EP" + timeout_in_minutes: 120 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_2 + num_gpus: 2 + optional: true + working_dir: "/vllm-workspace/tests" + source_file_dependencies: + - .buildkite/test_areas/lm_eval.yaml + - tests/evals/gsm8k/ + - tests/utils.py + - tests/conftest.py + - csrc/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/models/config.py + - vllm/model_executor/models/registry.py + - vllm/model_executor/models/utils.py + - vllm/model_executor/models/qwen3_next.py + - vllm/model_executor/models/qwen3_next_mtp.py + - vllm/model_executor/models/nemotron_h.py + - vllm/model_executor/models/nemotron_h_mtp.py + - vllm/transformers_utils/configs/qwen3_next.py + - vllm/transformers_utils/configs/nemotron_h.py + - vllm/model_executor/model_loader/ + - vllm/model_executor/layers/quantization/ + - vllm/model_executor/layers/fused_moe/ + - vllm/model_executor/layers/mamba/ + - vllm/model_executor/layers/layernorm.py + - vllm/model_executor/layers/linear.py + - vllm/model_executor/kernels/linear/ + - vllm/third_party/flash_linear_attention/ops/ + - vllm/v1/attention/ + - vllm/v1/spec_decode/ + - vllm/v1/worker/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + commands: + - export VLLM_WORKER_MULTIPROC_METHOD=spawn + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep-mi355.txt + - label: ":amd: (MI355) Qwen3-8-Flash-Next-FP8 Accuracy Eval" timeout_in_minutes: 105 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] @@ -4046,11 +4215,11 @@ steps: - uv pip install --system 'evalscope==1.10.0' - pytest -s -v evals/qwen4_exp/test_accuracy.py --config-list-file=configs/models-rocm.txt -- label: ":amd: (MI355) LM Eval TurboQuant k8v4" +- label: ":amd: (MI355 DPX) LM Eval TurboQuant k8v4" timeout_in_minutes: 30 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx num_gpus: 1 optional: true working_dir: "/vllm-workspace/tests" @@ -4072,11 +4241,11 @@ steps: commands: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k8v4-rocm.txt -- label: ":amd: (MI355) LM Eval TurboQuant t4nc" +- label: ":amd: (MI355 DPX) LM Eval TurboQuant t4nc" timeout_in_minutes: 30 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx num_gpus: 1 optional: true working_dir: "/vllm-workspace/tests" @@ -4098,11 +4267,11 @@ steps: commands: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t4nc-rocm.txt -- label: ":amd: (MI355) LM Eval TurboQuant k3v4nc" +- label: ":amd: (MI355 DPX) LM Eval TurboQuant k3v4nc" timeout_in_minutes: 30 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx num_gpus: 1 optional: true working_dir: "/vllm-workspace/tests" @@ -4124,11 +4293,11 @@ steps: commands: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k3v4nc-rocm.txt -- label: ":amd: (MI355) LM Eval TurboQuant t3nc" +- label: ":amd: (MI355 DPX) LM Eval TurboQuant t3nc" timeout_in_minutes: 30 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx num_gpus: 1 optional: true working_dir: "/vllm-workspace/tests" @@ -4500,41 +4669,6 @@ steps: - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 2048 - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle3 --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 1536 -- label: ":amd: (MI355) Examples" # TBD - timeout_in_minutes: 75 - mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] - dind: false - agent_pool: mi355_1 - working_dir: "/vllm-workspace/examples" - source_file_dependencies: - - vllm/entrypoints - - vllm/multimodal - - examples/ - - vllm/platforms/rocm.py - optional: true - commands: - # Basic - # Multi-modal models - # Pooling models - # Features demo - - pip install --no-deps tensorizer - - python3 basic/offline_inference/chat.py - - python3 basic/offline_inference/generate.py --model facebook/opt-125m - - python3 basic/offline_inference/generate.py --model meta-llama/Llama-2-13b-chat-hf --cpu-offload-gb 10 - - python3 basic/offline_inference/classify.py - - python3 basic/offline_inference/embed.py - - python3 basic/offline_inference/score.py - - python3 generate/multimodal/audio_language_offline.py --seed 0 - - python3 generate/multimodal/vision_language_offline.py --seed 0 - - python3 generate/multimodal/vision_language_multi_image_offline.py --seed 0 - - python3 generate/multimodal/encoder_decoder_multimodal_offline.py --model-type whisper --seed 0 - - python3 pooling/embed/vision_embedding_offline.py --seed 0 - - python3 features/automatic_prefix_caching/prefix_caching_offline.py - - python3 deployment/llm_engine_example.py - - python3 features/tensorize_vllm_model.py --model facebook/opt-125m serialize --serialized-directory /tmp/ --suffix v1 && python3 features/tensorize_vllm_model.py --model facebook/opt-125m deserialize --path-to-tensors /tmp/vllm/facebook/opt-125m/v1/model.tensors - - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 2048 - - python3 features/speculative_decoding/spec_decode_offline.py --test --method eagle3 --num_spec_tokens 3 --dataset-name hf --dataset-path philschmid/mt-bench --num-prompts 80 --temp 0 --top-p 1.0 --top-k -1 --tp 1 --enable-chunked-prefill --max-model-len 1536 - #---------------------------------------------------------- mi355 · kernels ----------------------------------------------------------# - label: ":amd: (MI355) mHC Kernels" @@ -5291,12 +5425,12 @@ steps: #------------------------------------------------------- mi355 · quantization --------------------------------------------------------# -- label: ":amd: (MI355) Quantization Shard %N" +- label: ":amd: (MI355 DPX) Quantization Shard %N" timeout_in_minutes: 115 parallelism: 4 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx working_dir: "/vllm-workspace/tests" source_file_dependencies: - csrc/ @@ -5339,6 +5473,34 @@ steps: #------------------------------------------------------------ mi355 · v1 -------------------------------------------------------------# +- label: ":amd: (MI355) Spec Decode AL DFlash2 Nightly" + timeout_in_minutes: 60 + mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] + dind: false + agent_pool: mi355_1 + num_gpus: 1 + optional: true + working_dir: "/vllm-workspace/tests" + source_file_dependencies: + - .buildkite/test_areas/spec_decode.yaml + - tests/v1/e2e/spec_decode/ + - tests/evals/gsm8k/ + - tests/utils.py + - vllm/v1/spec_decode/ + - vllm/v1/worker/gpu/spec_decode/ + - vllm/v1/worker/gpu/sample/ + - vllm/v1/worker/gpu/model_runner.py + - vllm/v1/attention/ + - vllm/model_executor/models/qwen3_dflash.py + - vllm/model_executor/models/qwen3_dflash2.py + - vllm/model_executor/models/qwen3_5.py + - vllm/model_executor/model_loader/ + - vllm/model_executor/layers/quantization/ + - vllm/model_executor/kernels/linear/ + - vllm/platforms/rocm.py + commands: + - pytest -v -s v1/e2e/spec_decode/acceptance_rates/dflash/ -k "dflash2" + - label: ":amd: (MI355 DPX) Spec Decode Draft Model" # TBD timeout_in_minutes: 60 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] @@ -6056,11 +6218,11 @@ steps: - pytest -v -s v1/test_outputs.py -- label: ":amd: (MI355) V1 Spec Decode" # TBD +- label: ":amd: (MI355 DPX) V1 Spec Decode" # TBD timeout_in_minutes: 50 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx working_dir: "/vllm-workspace/tests" source_file_dependencies: - vllm/ @@ -6230,11 +6392,11 @@ steps: - amdmi355 optional: true -- label: ":amd: (MI355) MRV2 Sampler JIT Warmup" +- label: ":amd: (MI355 DPX) MRV2 Sampler JIT Warmup" timeout_in_minutes: 10 mirror_hardwares: [amdexperimental, amdproduction, amdgfx950nightly, amdmi355] dind: false - agent_pool: mi355_1 + agent_pool: mi355_dpx num_gpus: 1 optional: true working_dir: "/vllm-workspace/" diff --git a/.buildkite/test_areas/compile.yaml b/.buildkite/test_areas/compile.yaml index 3819c2b3a3..5fd0af69c1 100644 --- a/.buildkite/test_areas/compile.yaml +++ b/.buildkite/test_areas/compile.yaml @@ -12,6 +12,30 @@ steps: commands: - export VLLM_TEST_CLEAN_GPU_MEMORY=1 - pytest -v -s tests/compile/correctness_e2e/test_sequence_parallel.py + mirror: + amd: + label: ":amd: (MI355) Sequence Parallel Correctness" + dind: false + device: mi355_2 + num_devices: 2 + timeout_in_minutes: 180 + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - vllm/compilation/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/kernels/linear/ + - vllm/model_executor/layers/ + - vllm/model_executor/models/llama.py + - vllm/v1/attention/ + - vllm/v1/worker/ + - vllm/v1/cudagraph_dispatcher.py + - vllm/platforms/rocm.py + - tests/compile/correctness_e2e/test_sequence_parallel.py + - tests/models/registry.py + - tests/utils.py - label: ":nvidia: (B200) AsyncTP Correctness" key: asynctp-correctness-tests-b200 @@ -23,6 +47,38 @@ steps: commands: - export VLLM_TEST_CLEAN_GPU_MEMORY=1 - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py + mirror: + amd: + label: ":amd: (MI355) AsyncTP Correctness" + dind: false + device: mi355_2 + num_devices: 2 + timeout_in_minutes: 60 + working_dir: "/vllm-workspace/" + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - vllm/compilation/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/layers/ + - vllm/model_executor/kernels/linear/ + - vllm/model_executor/models/llama.py + - vllm/model_executor/models/qwen3.py + - vllm/v1/attention/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + - vllm/transformers_utils/repo_utils.py + - tests/compile/correctness_e2e/test_async_tp.py + - tests/compile/fusions_e2e/common.py + - tests/models/registry.py + - tests/utils.py + commands: + - export VLLM_TEST_CLEAN_GPU_MEMORY=1 + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_rocm_async_tp_bf16_output_correctness + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_correctness -k RedHatAI + - pytest -v -s tests/compile/correctness_e2e/test_async_tp.py::test_async_tp_pass_nvfp4_correctness - label: ":nvidia: (H100) Distributed Compile" key: distributed-compile-unit-tests-2xh100 @@ -188,6 +244,27 @@ steps: # Qwen/Deepseek requires +quant_fp8 as -quant_fp8 rms+quant fusion is not supported # Run just llama3 (fp8 & fp4) for all config combinations (only inductor partition) - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "inductor_partition and (FLASHINFER and not +rms_norm and (not +quant_fp8 or +quant_fp8 and (qwen3 or deepseek)) or llama-3)" + mirror: + amd: + label: ":amd: (MI355 DPX) Fusion E2E FP8 Config Sweep" + dind: false + device: mi355_dpx + timeout_in_minutes: 45 + working_dir: "/vllm-workspace/" + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/compile.yaml + - csrc/quantization/ + - vllm/compilation/ + - vllm/model_executor/ + - vllm/v1/attention/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + - tests/compile/fusions_e2e/ + commands: + - rocm-smi + - pytest -v -s tests/compile/fusions_e2e/test_tp1_quant.py -k "test_tp1_fp8_fusions and inductor_partition and not +rms_norm and not True and ((Llama-3 and TRITON_ATTN) or (Qwen3-30B and +quant_fp8 and TRITON_ATTN) or (DeepSeek-Coder and +quant_fp8 and TRITON_MLA))" - label: ":nvidia: (H100) Fusion E2E TP2 Quick" key: fusion-e2e-tp2-quick-h100 diff --git a/.buildkite/test_areas/distributed.yaml b/.buildkite/test_areas/distributed.yaml index 0ed630daab..a7f65417a6 100644 --- a/.buildkite/test_areas/distributed.yaml +++ b/.buildkite/test_areas/distributed.yaml @@ -439,6 +439,27 @@ steps: - pytest -v -s tests/distributed/test_nccl_symm_mem.py - pytest -v -s tests/v1/distributed/test_dbo.py - pytest -v -s tests/distributed/test_mnnvl_alltoall.py + mirror: + amd: + label: ":amd: (MI355) Distributed AgRs All2All" + dind: false + device: mi355_2 + num_devices: 2 + timeout_in_minutes: 30 + working_dir: "/vllm-workspace/" + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/distributed.yaml + - vllm/distributed/ + - vllm/config/parallel.py + - vllm/config/vllm.py + - vllm/forward_context.py + - vllm/platforms/rocm.py + - tests/distributed/test_mnnvl_alltoall.py + - tests/utils.py + commands: + - pytest -v -s tests/distributed/test_mnnvl_alltoall.py::test_args_dispatch_combine - label: ":nvidia: (B200) GEMM-RS/AR" key: gemm-rs-ar-2xb200 diff --git a/.buildkite/test_areas/jit_monitor.yaml b/.buildkite/test_areas/jit_monitor.yaml index 27de713fa2..9e40c9d1af 100644 --- a/.buildkite/test_areas/jit_monitor.yaml +++ b/.buildkite/test_areas/jit_monitor.yaml @@ -23,9 +23,9 @@ steps: mirror: amd: # Focused MRV2 regression; the broader model/backend matrix is pending. - label: ':amd: (MI355) MRV2 Sampler JIT Warmup' + label: ':amd: (MI355 DPX) MRV2 Sampler JIT Warmup' dind: false - device: mi355_1 + device: mi355_dpx num_devices: 1 timeout_in_minutes: 10 working_dir: /vllm-workspace/ diff --git a/.buildkite/test_areas/lm_eval.yaml b/.buildkite/test_areas/lm_eval.yaml index c81bba10da..ce74f3a447 100644 --- a/.buildkite/test_areas/lm_eval.yaml +++ b/.buildkite/test_areas/lm_eval.yaml @@ -151,15 +151,18 @@ steps: label: ":amd: (MI355 DPX) LM Eval Small Models" dind: false device: mi355_dpx + num_devices: 1 timeout_in_minutes: 45 working_dir: /vllm-workspace/tests depends_on: - image-build-amd source_file_dependencies: + - .buildkite/test_areas/lm_eval.yaml - csrc/ - tests/evals/gsm8k/ - vllm/model_executor/layers/quantization - vllm/model_executor/kernels/linear/ + - vllm/model_executor/layers/fused_moe/ - vllm/model_executor/models/ - vllm/model_executor/model_loader/ - vllm/v1/attention/backends/ @@ -383,6 +386,49 @@ steps: - vllm/model_executor/layers/quantization commands: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep.txt + mirror: + amd: + label: ":amd: (MI355) LM Eval Large Models EP" + dind: false + device: mi355_2 + num_devices: 2 + timeout_in_minutes: 120 + working_dir: "/vllm-workspace/tests" + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/lm_eval.yaml + - tests/evals/gsm8k/ + - tests/utils.py + - tests/conftest.py + - csrc/ + - vllm/config/ + - vllm/distributed/ + - vllm/model_executor/models/config.py + - vllm/model_executor/models/registry.py + - vllm/model_executor/models/utils.py + - vllm/model_executor/models/qwen3_next.py + - vllm/model_executor/models/qwen3_next_mtp.py + - vllm/model_executor/models/nemotron_h.py + - vllm/model_executor/models/nemotron_h_mtp.py + - vllm/transformers_utils/configs/qwen3_next.py + - vllm/transformers_utils/configs/nemotron_h.py + - vllm/model_executor/model_loader/ + - vllm/model_executor/layers/quantization/ + - vllm/model_executor/layers/fused_moe/ + - vllm/model_executor/layers/mamba/ + - vllm/model_executor/layers/layernorm.py + - vllm/model_executor/layers/linear.py + - vllm/model_executor/kernels/linear/ + - vllm/third_party/flash_linear_attention/ops/ + - vllm/v1/attention/ + - vllm/v1/spec_decode/ + - vllm/v1/worker/ + - vllm/_aiter_ops.py + - vllm/platforms/rocm.py + commands: + - export VLLM_WORKER_MULTIPROC_METHOD=spawn + - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=configs/models-blackwell-ep-mi355.txt - label: ":nvidia: (B200) LM Eval Qwen3.5 Models" key: lm-eval-qwen3-5-models-2xb200 @@ -405,7 +451,7 @@ steps: label: ":amd: (MI355) LM Eval Qwen3.5 Models" dind: false device: mi355_2 - timeout_in_minutes: 40 + timeout_in_minutes: 75 depends_on: - image-build-amd source_file_dependencies: @@ -418,10 +464,18 @@ steps: - vllm/model_executor/models/qwen3_next.py - vllm/model_executor/models/qwen3_next_mtp.py - vllm/third_party/flash_linear_attention/ops/ + - vllm/distributed/ + - vllm/model_executor/layers/fused_moe/ + - vllm/model_executor/layers/quantization/modelopt.py + - vllm/model_executor/kernels/linear/nvfp4/ + - vllm/v1/attention/ + - vllm/v1/worker/ - tests/evals/gsm8k/configs/models-qwen35-mi355.txt - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-DEP2.yaml + - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-FP8-DEP2.yaml - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-MXFP4-AITER-TP2.yaml - tests/evals/gsm8k/configs/Qwen3.5-35B-A3B-MXFP4-EMU-TP2.yaml + - tests/evals/gsm8k/configs/Qwen3.5-397B-A17B-NVFP4-DEP2.yaml - tests/evals/gsm8k/test_gsm8k_correctness.py - vllm/_aiter_ops.py - vllm/platforms/rocm.py @@ -855,9 +909,9 @@ steps: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k8v4.txt mirror: amd: - label: ":amd: (MI355) LM Eval TurboQuant k8v4" + label: ":amd: (MI355 DPX) LM Eval TurboQuant k8v4" dind: false - device: mi355_1 + device: mi355_dpx num_devices: 1 timeout_in_minutes: 30 working_dir: /vllm-workspace/tests @@ -895,9 +949,9 @@ steps: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t4nc.txt mirror: amd: - label: ":amd: (MI355) LM Eval TurboQuant t4nc" + label: ":amd: (MI355 DPX) LM Eval TurboQuant t4nc" dind: false - device: mi355_1 + device: mi355_dpx num_devices: 1 timeout_in_minutes: 30 working_dir: /vllm-workspace/tests @@ -935,9 +989,9 @@ steps: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-k3v4nc.txt mirror: amd: - label: ":amd: (MI355) LM Eval TurboQuant k3v4nc" + label: ":amd: (MI355 DPX) LM Eval TurboQuant k3v4nc" dind: false - device: mi355_1 + device: mi355_dpx num_devices: 1 timeout_in_minutes: 30 working_dir: /vllm-workspace/tests @@ -975,9 +1029,9 @@ steps: - pytest -s -v evals/gsm8k/test_gsm8k_correctness.py --config-list-file=evals/gsm8k/configs/models-turboquant-t3nc.txt mirror: amd: - label: ":amd: (MI355) LM Eval TurboQuant t3nc" + label: ":amd: (MI355 DPX) LM Eval TurboQuant t3nc" dind: false - device: mi355_1 + device: mi355_dpx num_devices: 1 timeout_in_minutes: 30 working_dir: /vllm-workspace/tests diff --git a/.buildkite/test_areas/spec_decode.yaml b/.buildkite/test_areas/spec_decode.yaml index 73d944a7a4..af7e8f071a 100644 --- a/.buildkite/test_areas/spec_decode.yaml +++ b/.buildkite/test_areas/spec_decode.yaml @@ -423,6 +423,32 @@ steps: - tests/v1/e2e/spec_decode/ commands: - pytest -v -s v1/e2e/spec_decode/acceptance_rates/dflash/ -k "dflash2" + mirror: + amd: + label: ":amd: (MI355) Spec Decode AL DFlash2 Nightly" + dind: false + device: mi355_1 + num_devices: 1 + timeout_in_minutes: 60 + depends_on: + - image-build-amd + source_file_dependencies: + - .buildkite/test_areas/spec_decode.yaml + - tests/v1/e2e/spec_decode/ + - tests/evals/gsm8k/ + - tests/utils.py + - vllm/v1/spec_decode/ + - vllm/v1/worker/gpu/spec_decode/ + - vllm/v1/worker/gpu/sample/ + - vllm/v1/worker/gpu/model_runner.py + - vllm/v1/attention/ + - vllm/model_executor/models/qwen3_dflash.py + - vllm/model_executor/models/qwen3_dflash2.py + - vllm/model_executor/models/qwen3_5.py + - vllm/model_executor/model_loader/ + - vllm/model_executor/layers/quantization/ + - vllm/model_executor/kernels/linear/ + - vllm/platforms/rocm.py - label: ":nvidia: (H200 MIG 35GB) Spec Decode AL DSpark Nightly" key: spec-decode-dspark-nightly diff --git a/tests/compile/correctness_e2e/test_async_tp.py b/tests/compile/correctness_e2e/test_async_tp.py index 6b8c26cadc..307f39039b 100644 --- a/tests/compile/correctness_e2e/test_async_tp.py +++ b/tests/compile/correctness_e2e/test_async_tp.py @@ -3,6 +3,7 @@ import json import logging +from contextlib import nullcontext import pytest @@ -174,13 +175,18 @@ def test_async_tp_pass_correctness( @create_new_process_for_each_test() -def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int): - if ( - not current_platform.is_cuda() - or not current_platform.is_device_capability_family(100) - ): - pytest.skip("NVFP4 requires Blackwell") - if not has_flashinfer(): +def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int, caplog_mp_spawn): + is_blackwell = current_platform.is_cuda() and ( + current_platform.is_device_capability_family(100) + ) + is_rocm_cdna = False + if current_platform.is_rocm(): + from vllm.platforms.rocm import on_cdna + + is_rocm_cdna = on_cdna() + if not (is_blackwell or is_rocm_cdna): + pytest.skip("NVFP4 AsyncTP requires Blackwell or ROCm CDNA") + if is_blackwell and not has_flashinfer(): pytest.skip("FlashInfer is required for the NVFP4 AsyncTP path") tp_size = 2 @@ -196,8 +202,7 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int): "8", "--load-format", "dummy", - "--linear-backend", - "flashinfer_cutlass", + *(["--linear-backend", "flashinfer_cutlass"] if is_blackwell else []), "--hf-overrides", json.dumps(NVFP4_HF_OVERRIDES), ] @@ -213,6 +218,8 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int): "sp_min_token_num": 1, }, } + if is_rocm_cdna: + compilation_config["inductor_compile_config"] = {"force_disable_caches": True} async_tp_args = [ *common_args, @@ -232,10 +239,32 @@ def test_async_tp_pass_nvfp4_correctness(num_gpus_available: int): "mp", ] - compare_two_settings( - NVFP4_MODEL_ID, - async_tp_args, - tp_args, - method="generate", - force_v1_runner=True, - ) + env = {"VLLM_DISABLE_COMPILE_CACHE": "1"} if is_rocm_cdna else None + log_context = caplog_mp_spawn(logging.DEBUG) if is_rocm_cdna else nullcontext() + with log_context as logs: + compare_two_settings( + NVFP4_MODEL_ID, + async_tp_args, + tp_args, + env1=env, + env2=env, + method="generate", + force_v1_runner=True, + ) + if is_rocm_cdna: + assert logs is not None + matches_by_rank = { + rank: [ + int(count) + for line in logs.text.splitlines() + if line.startswith(f"(Worker_TP{rank} pid=") + for count in FUSION_LOG_PATTERNS["async_tp"].findall(line) + ] + for rank in range(tp_size) + } + assert all( + any(count > 0 for count in matches) for matches in matches_by_rank.values() + ), ( + "Expected positive NVFP4 AsyncTP rewrites on both TP workers, " + f"found {matches_by_rank}" + ) diff --git a/tests/compile/correctness_e2e/test_sequence_parallel.py b/tests/compile/correctness_e2e/test_sequence_parallel.py index e5f8d1870e..10d25320c0 100644 --- a/tests/compile/correctness_e2e/test_sequence_parallel.py +++ b/tests/compile/correctness_e2e/test_sequence_parallel.py @@ -374,11 +374,16 @@ def test_tp_sp_generation_prompt_embeds( @create_new_process_for_each_test() def test_tp_sp_nvfp4_generation(num_gpus_available: int): - if ( - not current_platform.is_cuda() - or not current_platform.is_device_capability_family(100) - ): - pytest.skip("NVFP4 requires Blackwell") + is_blackwell = current_platform.is_cuda() and ( + current_platform.is_device_capability_family(100) + ) + is_rocm_cdna = False + if current_platform.is_rocm(): + from vllm.platforms.rocm import on_cdna + + is_rocm_cdna = on_cdna() + if not (is_blackwell or is_rocm_cdna): + pytest.skip("NVFP4 sequence parallelism requires Blackwell or ROCm CDNA") comparison = _build_sp_args( NVFP4_MODEL_ID, diff --git a/tests/distributed/test_mnnvl_alltoall.py b/tests/distributed/test_mnnvl_alltoall.py index 362ffe4b15..89fe6eb6ad 100644 --- a/tests/distributed/test_mnnvl_alltoall.py +++ b/tests/distributed/test_mnnvl_alltoall.py @@ -8,6 +8,7 @@ Run: pytest tests/distributed/test_mnnvl_alltoall.py -v import os import traceback +from contextlib import contextmanager import pytest import torch @@ -148,16 +149,17 @@ def _init_dp_environment(world_size, rank, port, dp_size, dp_port): ensure_model_parallel_initialized(1, 1) +@contextmanager def _make_forward_context(rank, world_size, num_tokens_per_rank): - """Create a forward context with mock DP metadata for AgRs tests. + """Keep the vLLM config and mock-DP forward context active together. Returns a context manager suitable for ``with`` statements. The real DPMetadata (with sp_local_sizes etc.) is created internally by set_forward_context from num_tokens_across_dp; the attn_metadata placeholder just satisfies the "attn_metadata is not None" guard. """ + from vllm.config import VllmConfig, set_current_vllm_config from vllm.config.parallel import ParallelConfig - from vllm.config.vllm import VllmConfig from vllm.forward_context import set_forward_context class _AttnMeta: @@ -173,14 +175,18 @@ def _make_forward_context(rank, world_size, num_tokens_per_rank): is_moe_model=True, data_parallel_rank=rank, ) - return set_forward_context( - _AttnMeta(), - vllm_config, - num_tokens=num_tokens_per_rank, - num_tokens_across_dp=torch.tensor( - [num_tokens_per_rank] * world_size, dtype=torch.int + with ( + set_current_vllm_config(vllm_config), + set_forward_context( + _AttnMeta(), + vllm_config, + num_tokens=num_tokens_per_rank, + num_tokens_across_dp=torch.tensor( + [num_tokens_per_rank] * world_size, dtype=torch.int + ), ), - ) + ): + yield # --------------------------------------------------------------------------- diff --git a/tests/evals/gsm8k/configs/Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml b/tests/evals/gsm8k/configs/Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml new file mode 100644 index 0000000000..473342569f --- /dev/null +++ b/tests/evals/gsm8k/configs/Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml @@ -0,0 +1,18 @@ +model_name: "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4" +accuracy_threshold: 0.93 +num_questions: 1319 +num_fewshot: 5 +max_concurrency: 16 +rocm_request_timeout_seconds: 1800 +min_acceptance_length: 2.0 +startup_max_wait_seconds: 1200 +server_args: >- + --enforce-eager + --max-model-len 4096 + --max-num-seqs 16 + --max-num-batched-tokens 32768 + --gpu-memory-utilization 0.5 + --tensor-parallel-size 2 + --enable-expert-parallel + --mamba-backend triton + --speculative-config '{"method":"mtp","num_speculative_tokens":5}' diff --git a/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml b/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml new file mode 100644 index 0000000000..ab62af4ac1 --- /dev/null +++ b/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml @@ -0,0 +1,17 @@ +model_name: "nm-testing/Qwen3-Next-80B-A3B-Instruct-NVFP4" +accuracy_threshold: 0.75 +num_questions: 1319 +num_fewshot: 5 +max_concurrency: 16 +rocm_request_timeout_seconds: 1800 +server_args: >- + --enforce-eager + --max-model-len 4096 + --max-num-seqs 16 + --max-num-batched-tokens 32768 + --gpu-memory-utilization 0.5 + --tensor-parallel-size 2 + --enable-expert-parallel + --all2all-backend allgather_reducescatter + --attention-backend TRITON_ATTN + --no-async-scheduling diff --git a/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml b/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml new file mode 100644 index 0000000000..e20facf21a --- /dev/null +++ b/tests/evals/gsm8k/configs/Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml @@ -0,0 +1,19 @@ +model_name: "nvidia/Qwen3-Next-80B-A3B-Instruct-NVFP4" +accuracy_threshold: 0.85 +num_questions: 1319 +num_fewshot: 5 +max_concurrency: 16 +rocm_request_timeout_seconds: 1800 +min_acceptance_length: 1.5 +server_args: >- + --enforce-eager + --max-model-len 4096 + --max-num-seqs 16 + --max-num-batched-tokens 32768 + --gpu-memory-utilization 0.5 + --tensor-parallel-size 2 + --enable-expert-parallel + --all2all-backend allgather_reducescatter + --attention-backend TRITON_ATTN + --no-async-scheduling + --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":1}' diff --git a/tests/evals/gsm8k/configs/models-blackwell-ep-mi355.txt b/tests/evals/gsm8k/configs/models-blackwell-ep-mi355.txt new file mode 100644 index 0000000000..1bb71eaa05 --- /dev/null +++ b/tests/evals/gsm8k/configs/models-blackwell-ep-mi355.txt @@ -0,0 +1,5 @@ +# Exact B200 compressed-tensors checkpoint; it does not contain MTP weights. +Qwen3-Next-80B-A3B-NVFP4-EP2-CT-MI355.yaml +# MTP-capable ModelOpt checkpoint exercises NVFP4 EP2 with MTP1. +Qwen3-Next-80B-A3B-NVFP4-EP2-MTP-MI355.yaml +Nemotron-3-Super-120B-A12B-NVFP4-MI355.yaml diff --git a/tests/evals/gsm8k/configs/models-gfx950-small.txt b/tests/evals/gsm8k/configs/models-gfx950-small.txt index d818a067af..05b78e934c 100644 --- a/tests/evals/gsm8k/configs/models-gfx950-small.txt +++ b/tests/evals/gsm8k/configs/models-gfx950-small.txt @@ -1,2 +1,5 @@ Qwen3-0.6B-FP8.yaml Qwen3-1.7B-MXFP4.yaml +Qwen3-30B-A3B-NVFP4.yaml +Laguna-XS.2-NVFP4.yaml +Laguna-XS-2.1-INT4.yaml diff --git a/tests/evals/gsm8k/configs/models-qwen35-mi355.txt b/tests/evals/gsm8k/configs/models-qwen35-mi355.txt index 13ff05f870..9fad858d24 100644 --- a/tests/evals/gsm8k/configs/models-qwen35-mi355.txt +++ b/tests/evals/gsm8k/configs/models-qwen35-mi355.txt @@ -2,3 +2,4 @@ Qwen3.5-35B-A3B-DEP2.yaml Qwen3.5-35B-A3B-FP8-DEP2.yaml Qwen3.5-35B-A3B-MXFP4-AITER-TP2.yaml Qwen3.5-35B-A3B-MXFP4-EMU-TP2.yaml +Qwen3.5-397B-A17B-NVFP4-DEP2.yaml