From 23eb24ddfe79be9f02026b7ce4ae34e1da371468 Mon Sep 17 00:00:00 2001 From: YC Tseng Date: Fri, 6 Mar 2026 10:27:44 +0300 Subject: [PATCH] [AMD] Update/fix AMD CI workflow dispatch mechanism (#20014) Co-authored-by: bingxche --- .github/workflows/amd-aiter-scout.yml | 8 +- .../workflows/nightly-test-amd-rocm720.yml | 113 ++++++++++++------ .github/workflows/nightly-test-amd.yml | 113 ++++++++++++------ .github/workflows/pr-test-amd-rocm720.yml | 81 ++++++++----- .github/workflows/pr-test-amd.yml | 81 ++++++++----- 5 files changed, 260 insertions(+), 136 deletions(-) diff --git a/.github/workflows/amd-aiter-scout.yml b/.github/workflows/amd-aiter-scout.yml index 427116831..9e7b413bc 100644 --- a/.github/workflows/amd-aiter-scout.yml +++ b/.github/workflows/amd-aiter-scout.yml @@ -42,13 +42,13 @@ jobs: REF="${{ inputs.aiter_ref || 'main' }}" echo "Resolving AITER ref: ${REF}" - SHA=$(git ls-remote https://github.com/ROCm/aiter.git "${REF}" | head -1 | cut -f1) - if [ -z "$SHA" ]; then - SHA=$(git ls-remote https://github.com/ROCm/aiter.git "refs/heads/${REF}" | head -1 | cut -f1) - fi + SHA=$(git ls-remote https://github.com/ROCm/aiter.git "refs/heads/${REF}" | head -1 | cut -f1) if [ -z "$SHA" ]; then SHA=$(git ls-remote https://github.com/ROCm/aiter.git "refs/tags/${REF}" | head -1 | cut -f1) fi + if [ -z "$SHA" ]; then + SHA=$(git ls-remote https://github.com/ROCm/aiter.git "${REF}" | head -1 | cut -f1) + fi if [ -z "$SHA" ]; then SHA="${REF}" fi diff --git a/.github/workflows/nightly-test-amd-rocm720.yml b/.github/workflows/nightly-test-amd-rocm720.yml index 096d9a242..d94c0f86c 100644 --- a/.github/workflows/nightly-test-amd-rocm720.yml +++ b/.github/workflows/nightly-test-amd-rocm720.yml @@ -20,11 +20,52 @@ on: required: false type: boolean default: true + job_select: + description: 'Select a job to run from dropdown (choose "all" to run all jobs)' + required: false + type: choice + default: 'all' + options: + - 'all' + - nightly-test-1-gpu-unit-rocm720 + - nightly-accuracy-2-gpu-rocm720 + - nightly-accuracy-2-gpu-vlm-rocm720 + - nightly-perf-2-gpu-text-rocm720 + - nightly-perf-2-gpu-vlm-rocm720 + - nightly-accuracy-8-gpu-rocm720 + - nightly-8-gpu-grok1-int4-rocm720 + - nightly-8-gpu-grok2-rocm720 + - nightly-8-gpu-deepseek-v31-rocm720 + - nightly-8-gpu-deepseek-v32-rocm720 + - nightly-8-gpu-deepseek-v32-mtp-rocm720 + - nightly-8-gpu-deepseek-v3-kv-fp8-rocm720 + - nightly-8-gpu-kimi-k25-rocm720 + - nightly-8-gpu-qwen3-235b-rocm720 + - nightly-8-gpu-qwen35-rocm720 + - nightly-8-gpu-glm5-rocm720 + - nightly-8-gpu-minimax-m25-rocm720 + - nightly-1-gpu-zimage-turbo-rocm720 + - nightly-test-1-gpu-mi35x-rocm720 + - nightly-accuracy-8-gpu-mi35x-rocm720 + - nightly-8-gpu-mi35x-grok1-int4-rocm720 + - nightly-8-gpu-mi35x-grok2-rocm720 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4-rocm720 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8-rocm720 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion-rocm720 + - nightly-accuracy-8-gpu-mi35x-deepseek-v32-rocm720 + - nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp-rocm720 + - nightly-perf-8-gpu-mi35x-deepseek-v32-basic-rocm720 + - nightly-perf-8-gpu-mi35x-deepseek-v32-mtp-rocm720 + - nightly-8-gpu-mi35x-kimi-k25-rocm720 + - nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720 + - nightly-8-gpu-mi35x-qwen35-rocm720 + - nightly-8-gpu-mi35x-glm5-rocm720 + - nightly-8-gpu-mi35x-minimax-m25-rocm720 job_filter: - description: 'Comma-separated list of jobs to run (e.g. "nightly-8-gpu-grok2-rocm720,nightly-8-gpu-deepseek-v31-rocm720"). Leave empty or "all" to run all jobs.' + description: 'Or type comma-separated job names (overrides dropdown if non-empty)' required: false type: string - default: 'all' + default: '' workflow_call: inputs: ref: @@ -62,7 +103,7 @@ jobs: # ============================================== MI30x ROCm 7.2 Unit Tests ============================================== # 1-GPU Unit Tests - LoRA, debug utils, scheduler, etc. (MI30x ROCm 7.2) nightly-test-1-gpu-unit-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-test-1-gpu-unit-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-test-1-gpu-unit-rocm720,')) runs-on: linux-mi325-1gpu-sglang steps: - name: Checkout code @@ -91,7 +132,7 @@ jobs: # ============================================== MI30x ROCm 7.2 Accuracy Tests ============================================== # 2-GPU Accuracy Tests - GSM8K eval (MI30x ROCm 7.2) nightly-accuracy-2-gpu-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-2-gpu-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-2-gpu-rocm720,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -119,7 +160,7 @@ jobs: # 2-GPU VLM Accuracy Tests - Vision-Language Models MMMU evaluation (ROCm 7.2) nightly-accuracy-2-gpu-vlm-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-2-gpu-vlm-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-2-gpu-vlm-rocm720,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -148,7 +189,7 @@ jobs: # 2-GPU Text Models Performance Tests (ROCm 7.2) nightly-perf-2-gpu-text-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-2-gpu-text-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-2-gpu-text-rocm720,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -178,7 +219,7 @@ jobs: # 2-GPU VLM Performance Tests (ROCm 7.2) nightly-perf-2-gpu-vlm-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-2-gpu-vlm-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-2-gpu-vlm-rocm720,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -208,7 +249,7 @@ jobs: # 8-GPU Accuracy Tests - GPT-OSS, Grok1-FP8 (ROCm 7.2) nightly-accuracy-8-gpu-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -248,7 +289,7 @@ jobs: # ============================================== MI30x ROCm 7.2 Combined Accuracy + Performance Tests ============================================== # 8-GPU Grok1-INT4 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-grok1-int4-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-grok1-int4-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-grok1-int4-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -291,7 +332,7 @@ jobs: # 8-GPU Grok2 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-grok2-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-grok2-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-grok2-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -334,7 +375,7 @@ jobs: # 8-GPU DeepSeek-V3.1 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-deepseek-v31-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v31-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v31-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -377,7 +418,7 @@ jobs: # 8-GPU DeepSeek-V3.2 (Basic Accuracy + Perf) ROCm 7.2 nightly-8-gpu-deepseek-v32-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v32-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v32-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -418,7 +459,7 @@ jobs: # 8-GPU DeepSeek-V3.2 MTP (MTP Accuracy + Perf) ROCm 7.2 nightly-8-gpu-deepseek-v32-mtp-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v32-mtp-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v32-mtp-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -459,7 +500,7 @@ jobs: # 8-GPU DeepSeek-V3 KV FP8 (Basic + MTP with --kv-cache-dtype fp8_e4m3) ROCm 7.2 nightly-8-gpu-deepseek-v3-kv-fp8-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v3-kv-fp8-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v3-kv-fp8-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -489,7 +530,7 @@ jobs: # 8-GPU Kimi-K2.5 (Accuracy) ROCm 7.2 nightly-8-gpu-kimi-k25-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-kimi-k25-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-kimi-k25-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -519,7 +560,7 @@ jobs: # 8-GPU Qwen3-235B (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-qwen3-235b-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-qwen3-235b-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-qwen3-235b-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -549,7 +590,7 @@ jobs: # 8-GPU Qwen 3.5 (Accuracy) ROCm 7.2 nightly-8-gpu-qwen35-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-qwen35-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-qwen35-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -581,7 +622,7 @@ jobs: # 8-GPU GLM-5 (Accuracy) ROCm 7.2 nightly-8-gpu-glm5-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-glm5-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-glm5-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -614,7 +655,7 @@ jobs: # 8-GPU MiniMax-M2.5 (Accuracy) ROCm 7.2 nightly-8-gpu-minimax-m25-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-minimax-m25-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-minimax-m25-rocm720,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -646,7 +687,7 @@ jobs: # ============================================== MI30x ROCm 7.2 Diffusion Tests ============================================== # 1-GPU Z-Image-Turbo (Diffusion T2I) ROCm 7.2 nightly-1-gpu-zimage-turbo-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || inputs.job_filter == 'nightly-1-gpu-zimage-turbo-rocm720') + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-1-gpu-zimage-turbo-rocm720,')) runs-on: linux-mi325-1gpu-sglang steps: - name: Checkout code @@ -686,7 +727,7 @@ jobs: # ============================================== MI35x ROCm 7.2 Tests ============================================== # MI35x 1-GPU ROCm 7.2 tests nightly-test-1-gpu-mi35x-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-test-1-gpu-mi35x-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-test-1-gpu-mi35x-rocm720,')) runs-on: linux-mi35x-gpu-1 steps: - name: Checkout code @@ -715,7 +756,7 @@ jobs: # MI35x 8-GPU Accuracy Tests - GPT-OSS (ROCm 7.2) nightly-accuracy-8-gpu-mi35x-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -747,7 +788,7 @@ jobs: # MI35x 8-GPU Grok1-INT4 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-grok1-int4-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-grok1-int4-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-grok1-int4-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -793,7 +834,7 @@ jobs: # MI35x 8-GPU Grok2 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-grok2-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-grok2-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-grok2-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -839,7 +880,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-deepseek-r1-mxfp4-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -883,7 +924,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 KV FP8 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -927,7 +968,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 AllReduce Fusion (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -971,7 +1012,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Accuracy Test (ROCm 7.2) nightly-accuracy-8-gpu-mi35x-deepseek-v32-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1004,7 +1045,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 TP+MTP Accuracy Test (ROCm 7.2) nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1037,7 +1078,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Performance Test (Basic) ROCm 7.2 nightly-perf-8-gpu-mi35x-deepseek-v32-basic-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-8-gpu-mi35x-deepseek-v32-basic-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-8-gpu-mi35x-deepseek-v32-basic-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1070,7 +1111,7 @@ jobs: # MI35x 8-GPU Kimi-K2.5 (Accuracy) ROCm 7.2 nightly-8-gpu-mi35x-kimi-k25-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-kimi-k25-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-kimi-k25-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1103,7 +1144,7 @@ jobs: # MI35x 8-GPU Qwen3-235B-MXFP4 (Accuracy + Performance) ROCm 7.2 nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1136,7 +1177,7 @@ jobs: # MI35x 8-GPU Qwen 3.5 (Accuracy) ROCm 7.2 nightly-8-gpu-mi35x-qwen35-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-qwen35-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-qwen35-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1168,7 +1209,7 @@ jobs: exit ${TEST_EXIT_CODE:-0} nightly-8-gpu-mi35x-glm5-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-glm5-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-glm5-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1203,7 +1244,7 @@ jobs: # MI35x 8-GPU MiniMax-M2.5 (Accuracy) ROCm 7.2 nightly-8-gpu-mi35x-minimax-m25-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-minimax-m25-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-minimax-m25-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1236,7 +1277,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Performance Test (MTP) ROCm 7.2 nightly-perf-8-gpu-mi35x-deepseek-v32-mtp-rocm720: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-8-gpu-mi35x-deepseek-v32-mtp-rocm720,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-8-gpu-mi35x-deepseek-v32-mtp-rocm720,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code diff --git a/.github/workflows/nightly-test-amd.yml b/.github/workflows/nightly-test-amd.yml index f1b48e757..5aa969b73 100644 --- a/.github/workflows/nightly-test-amd.yml +++ b/.github/workflows/nightly-test-amd.yml @@ -20,11 +20,52 @@ on: required: false type: boolean default: true + job_select: + description: 'Select a job to run from dropdown (choose "all" to run all jobs)' + required: false + type: choice + default: 'all' + options: + - 'all' + - nightly-test-1-gpu-unit + - nightly-accuracy-2-gpu + - nightly-accuracy-2-gpu-vlm + - nightly-perf-2-gpu-text + - nightly-perf-2-gpu-vlm + - nightly-accuracy-8-gpu + - nightly-8-gpu-grok1-int4 + - nightly-8-gpu-grok2 + - nightly-8-gpu-deepseek-v31 + - nightly-8-gpu-deepseek-v32 + - nightly-8-gpu-deepseek-v32-mtp + - nightly-8-gpu-deepseek-v3-kv-fp8 + - nightly-8-gpu-kimi-k25 + - nightly-8-gpu-qwen3-235b + - nightly-8-gpu-qwen35 + - nightly-8-gpu-glm5 + - nightly-8-gpu-minimax-m25 + - nightly-1-gpu-zimage-turbo + - nightly-test-1-gpu-mi35x + - nightly-accuracy-8-gpu-mi35x + - nightly-8-gpu-mi35x-grok1-int4 + - nightly-8-gpu-mi35x-grok2 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8 + - nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion + - nightly-accuracy-8-gpu-mi35x-deepseek-v32 + - nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp + - nightly-perf-8-gpu-mi35x-deepseek-v32-basic + - nightly-perf-8-gpu-mi35x-deepseek-v32-mtp + - nightly-8-gpu-mi35x-kimi-k25 + - nightly-8-gpu-mi35x-qwen3-235b-mxfp4 + - nightly-8-gpu-mi35x-qwen35 + - nightly-8-gpu-mi35x-glm5 + - nightly-8-gpu-mi35x-minimax-m25 job_filter: - description: 'Comma-separated list of jobs to run (e.g. "nightly-8-gpu-grok2,nightly-8-gpu-deepseek-v31"). Leave empty or "all" to run all jobs.' + description: 'Or type comma-separated job names (overrides dropdown if non-empty)' required: false type: string - default: 'all' + default: '' workflow_call: inputs: ref: @@ -62,7 +103,7 @@ jobs: # ============================================== MI30x Unit Tests ============================================== # 1-GPU Unit Tests - LoRA, debug utils, scheduler, etc. (MI30x only) nightly-test-1-gpu-unit: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-test-1-gpu-unit,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-test-1-gpu-unit,')) runs-on: linux-mi325-1gpu-sglang steps: - name: Checkout code @@ -92,7 +133,7 @@ jobs: # ============================================== MI30x Accuracy Tests ============================================== # 2-GPU Accuracy Tests - GSM8K eval (MI30x only) nightly-accuracy-2-gpu: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-2-gpu,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-2-gpu,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -121,7 +162,7 @@ jobs: # 2-GPU VLM Accuracy Tests - Vision-Language Models MMMU evaluation nightly-accuracy-2-gpu-vlm: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-2-gpu-vlm,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-2-gpu-vlm,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -151,7 +192,7 @@ jobs: # 2-GPU Text Models Performance Tests nightly-perf-2-gpu-text: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-2-gpu-text,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-2-gpu-text,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -182,7 +223,7 @@ jobs: # 2-GPU VLM Performance Tests nightly-perf-2-gpu-vlm: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-2-gpu-vlm,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-2-gpu-vlm,')) runs-on: linux-mi325-2gpu-sglang steps: - name: Checkout code @@ -213,7 +254,7 @@ jobs: # 8-GPU Accuracy Tests - GPT-OSS, Grok1-FP8 (accuracy only) nightly-accuracy-8-gpu: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -253,7 +294,7 @@ jobs: # ============================================== MI30x Combined Accuracy + Performance Tests ============================================== # 8-GPU Grok1-INT4 (Accuracy + Performance combined) nightly-8-gpu-grok1-int4: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-grok1-int4,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-grok1-int4,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -296,7 +337,7 @@ jobs: # 8-GPU Grok2 (Accuracy + Performance combined) nightly-8-gpu-grok2: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-grok2,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-grok2,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -339,7 +380,7 @@ jobs: # 8-GPU DeepSeek-V3.1 (Accuracy + Performance combined) nightly-8-gpu-deepseek-v31: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v31,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v31,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -382,7 +423,7 @@ jobs: # 8-GPU DeepSeek-V3.2 (Basic Accuracy + Perf) nightly-8-gpu-deepseek-v32: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v32,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v32,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -423,7 +464,7 @@ jobs: # 8-GPU DeepSeek-V3.2 MTP (MTP Accuracy + Perf) nightly-8-gpu-deepseek-v32-mtp: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v32-mtp,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v32-mtp,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -464,7 +505,7 @@ jobs: # 8-GPU DeepSeek-V3 KV FP8 (Basic + MTP with --kv-cache-dtype fp8_e4m3) nightly-8-gpu-deepseek-v3-kv-fp8: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-deepseek-v3-kv-fp8,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-deepseek-v3-kv-fp8,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -494,7 +535,7 @@ jobs: # 8-GPU Kimi-K2.5 (Accuracy) nightly-8-gpu-kimi-k25: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-kimi-k25,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-kimi-k25,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -523,7 +564,7 @@ jobs: exit ${TEST_EXIT_CODE:-0} nightly-8-gpu-qwen3-235b: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-qwen3-235b,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-qwen3-235b,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -553,7 +594,7 @@ jobs: # 8-GPU Qwen 3.5 (Accuracy) nightly-8-gpu-qwen35: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-qwen35,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-qwen35,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -584,7 +625,7 @@ jobs: exit ${TEST_EXIT_CODE:-0} nightly-8-gpu-glm5: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-glm5,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-glm5,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -617,7 +658,7 @@ jobs: # 8-GPU MiniMax-M2.5 (Accuracy) nightly-8-gpu-minimax-m25: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-minimax-m25,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-minimax-m25,')) runs-on: linux-mi325-8gpu-sglang steps: - name: Checkout code @@ -649,7 +690,7 @@ jobs: # ============================================== MI30x Diffusion Tests ============================================== # 1-GPU Z-Image-Turbo (Diffusion T2I) nightly-1-gpu-zimage-turbo: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || inputs.job_filter == 'nightly-1-gpu-zimage-turbo') + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-1-gpu-zimage-turbo,')) runs-on: linux-mi325-1gpu-sglang steps: - name: Checkout code @@ -689,7 +730,7 @@ jobs: # ============================================== MI35x Tests ============================================== # MI35x 1-GPU tests - platform-agnostic tests that may work on CDNA4 (gfx950) nightly-test-1-gpu-mi35x: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-test-1-gpu-mi35x,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-test-1-gpu-mi35x,')) runs-on: linux-mi35x-gpu-1 steps: - name: Checkout code @@ -721,7 +762,7 @@ jobs: # MI35x 8-GPU Accuracy Tests - GPT-OSS (accuracy only) nightly-accuracy-8-gpu-mi35x: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -753,7 +794,7 @@ jobs: # MI35x 8-GPU Grok1-INT4 (Accuracy + Performance combined) nightly-8-gpu-mi35x-grok1-int4: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-grok1-int4,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-grok1-int4,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -799,7 +840,7 @@ jobs: # MI35x 8-GPU Grok2 (Accuracy + Performance combined) nightly-8-gpu-mi35x-grok2: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-grok2,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-grok2,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -845,7 +886,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 (Accuracy + Performance combined) nightly-8-gpu-mi35x-deepseek-r1-mxfp4: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -889,7 +930,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 KV FP8 (Accuracy + Performance combined) nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-kv-fp8,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -933,7 +974,7 @@ jobs: # MI35x 8-GPU DeepSeek-R1-MXFP4 AllReduce Fusion (Accuracy + Performance combined) nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-deepseek-r1-mxfp4-ar-fusion,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -977,7 +1018,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Accuracy Test nightly-accuracy-8-gpu-mi35x-deepseek-v32: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1010,7 +1051,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 TP+MTP Accuracy Test nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-accuracy-8-gpu-mi35x-deepseek-v32-mtp,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1043,7 +1084,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Performance Test (Basic) nightly-perf-8-gpu-mi35x-deepseek-v32-basic: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-8-gpu-mi35x-deepseek-v32-basic,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-8-gpu-mi35x-deepseek-v32-basic,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1076,7 +1117,7 @@ jobs: # MI35x 8-GPU Kimi-K2.5 (Accuracy) nightly-8-gpu-mi35x-kimi-k25: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-kimi-k25,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-kimi-k25,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1109,7 +1150,7 @@ jobs: # MI35x 8-GPU Qwen3-235B-MXFP4 (Accuracy + Performance) nightly-8-gpu-mi35x-qwen3-235b-mxfp4: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-qwen3-235b-mxfp4,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-qwen3-235b-mxfp4,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1142,7 +1183,7 @@ jobs: # MI35x 8-GPU Qwen 3.5 (Accuracy) nightly-8-gpu-mi35x-qwen35: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-qwen35,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-qwen35,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1174,7 +1215,7 @@ jobs: exit ${TEST_EXIT_CODE:-0} nightly-8-gpu-mi35x-glm5: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-glm5,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-glm5,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1209,7 +1250,7 @@ jobs: # MI35x 8-GPU MiniMax-M2.5 (Accuracy) nightly-8-gpu-mi35x-minimax-m25: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-8-gpu-mi35x-minimax-m25,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-mi35x-minimax-m25,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code @@ -1242,7 +1283,7 @@ jobs: # MI35x 8-GPU DeepSeek-V3.2 Performance Test (MTP) nightly-perf-8-gpu-mi35x-deepseek-v32-mtp: - if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (inputs.job_filter == '' || inputs.job_filter == 'all' || contains(format(',{0},', inputs.job_filter), ',nightly-perf-8-gpu-mi35x-deepseek-v32-mtp,')) + if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-perf-8-gpu-mi35x-deepseek-v32-mtp,')) runs-on: linux-mi35x-gpu-8 steps: - name: Checkout code diff --git a/.github/workflows/pr-test-amd-rocm720.yml b/.github/workflows/pr-test-amd-rocm720.yml index c8e848b99..4489ac74a 100644 --- a/.github/workflows/pr-test-amd-rocm720.yml +++ b/.github/workflows/pr-test-amd-rocm720.yml @@ -1,7 +1,7 @@ name: PR Test ROCm 7.2 (AMD) # Dynamic run-name for /rerun-stage commands to enable URL lookup # Format: "[stage-name] sha" for fork PRs, "[stage-name]" for non-fork, default for normal runs -run-name: ${{ inputs.target_stage && (inputs.pr_head_sha && format('[{0}] {1}', inputs.target_stage, inputs.pr_head_sha) || format('[{0}]', inputs.target_stage)) || '' }} +run-name: ${{ (inputs.target_stage || inputs.target_stage_select) && (inputs.pr_head_sha && format('[{0}] {1}', inputs.target_stage || inputs.target_stage_select, inputs.pr_head_sha) || format('[{0}]', inputs.target_stage || inputs.target_stage_select)) || '' }} on: # run rocm 720 pr tests once a day at 2am UTC to avoid overwhelming the CI system @@ -27,8 +27,29 @@ on: # - "docker/rocm.Dockerfile" workflow_dispatch: inputs: + target_stage_select: + description: "Select a stage to run from dropdown (leave empty for auto-detect)" + required: false + type: choice + default: '' + options: + - '' + - sgl-kernel-unit-test-amd + - sgl-kernel-unit-test-2-gpu-amd + - stage-a-test-1-amd + - jit-kernel-unit-test-amd + - stage-b-test-small-1-gpu-amd + - stage-b-test-small-1-gpu-amd-nondeterministic + - stage-b-test-small-1-gpu-amd-mi35x + - stage-b-test-large-1-gpu-amd + - stage-b-test-large-2-gpu-amd + - multimodal-gen-test-1-gpu-amd + - multimodal-gen-test-2-gpu-amd + - stage-c-test-large-8-gpu-amd + - stage-c-test-large-8-gpu-amd-mi35x + - stage-b-test-large-8-gpu-disaggregation-amd target_stage: - description: "Specific stage(s) to run, comma-separated (e.g. 'stage-a-test-1-amd,stage-b-test-small-1-gpu-amd')" + description: "Or type comma-separated stage names (overrides dropdown if non-empty)" required: false type: string default: "" @@ -144,9 +165,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',sgl-kernel-unit-test-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',sgl-kernel-unit-test-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.sgl_kernel == 'true' ) ) @@ -190,9 +211,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',sgl-kernel-unit-test-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',sgl-kernel-unit-test-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.sgl_kernel == 'true' ) ) @@ -231,9 +252,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-a-test-1-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-1-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -270,9 +291,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',jit-kernel-unit-test-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',jit-kernel-unit-test-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.jit_kernel == 'true' ) ) @@ -308,9 +329,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -347,9 +368,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -385,9 +406,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd-mi35x,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-mi35x,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -423,9 +444,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-large-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -462,9 +483,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-large-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -501,9 +522,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',multimodal-gen-test-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',multimodal-gen-test-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -631,9 +652,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',multimodal-gen-test-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',multimodal-gen-test-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -760,9 +781,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-c-test-large-8-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-c-test-large-8-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -807,9 +828,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-c-test-large-8-gpu-amd-mi35x,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-c-test-large-8-gpu-amd-mi35x,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -847,9 +868,9 @@ jobs: if: | always() && ( - (inputs.target_stage == 'stage-b-test-large-8-gpu-disaggregation-amd') || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-8-gpu-disaggregation-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) diff --git a/.github/workflows/pr-test-amd.yml b/.github/workflows/pr-test-amd.yml index 415042b47..1aa7b419b 100644 --- a/.github/workflows/pr-test-amd.yml +++ b/.github/workflows/pr-test-amd.yml @@ -1,7 +1,7 @@ name: PR Test (AMD) # Dynamic run-name for /rerun-stage commands to enable URL lookup # Format: "[stage-name] sha" for fork PRs, "[stage-name]" for non-fork, default for normal runs -run-name: ${{ inputs.target_stage && (inputs.pr_head_sha && format('[{0}] {1}', inputs.target_stage, inputs.pr_head_sha) || format('[{0}]', inputs.target_stage)) || '' }} +run-name: ${{ (inputs.target_stage || inputs.target_stage_select) && (inputs.pr_head_sha && format('[{0}] {1}', inputs.target_stage || inputs.target_stage_select, inputs.pr_head_sha) || format('[{0}]', inputs.target_stage || inputs.target_stage_select)) || '' }} on: push: @@ -24,8 +24,29 @@ on: - "docker/rocm.Dockerfile" workflow_dispatch: inputs: + target_stage_select: + description: "Select a stage to run from dropdown (leave empty for auto-detect)" + required: false + type: choice + default: '' + options: + - '' + - sgl-kernel-unit-test-amd + - sgl-kernel-unit-test-2-gpu-amd + - stage-a-test-1-amd + - jit-kernel-unit-test-amd + - stage-b-test-small-1-gpu-amd + - stage-b-test-small-1-gpu-amd-nondeterministic + - stage-b-test-small-1-gpu-amd-mi35x + - stage-b-test-large-1-gpu-amd + - stage-b-test-large-2-gpu-amd + - multimodal-gen-test-1-gpu-amd + - multimodal-gen-test-2-gpu-amd + - stage-c-test-large-8-gpu-amd + - stage-c-test-large-8-gpu-amd-mi35x + - stage-b-test-large-8-gpu-disaggregation-amd target_stage: - description: "Specific stage(s) to run, comma-separated (e.g. 'stage-a-test-1-amd,stage-b-test-small-1-gpu-amd')" + description: "Or type comma-separated stage names (overrides dropdown if non-empty)" required: false type: string default: "" @@ -141,9 +162,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',sgl-kernel-unit-test-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',sgl-kernel-unit-test-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.sgl_kernel == 'true' ) ) @@ -188,9 +209,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',sgl-kernel-unit-test-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',sgl-kernel-unit-test-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.sgl_kernel == 'true' ) ) @@ -230,9 +251,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-a-test-1-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-1-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -270,9 +291,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',jit-kernel-unit-test-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',jit-kernel-unit-test-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.jit_kernel == 'true' ) ) @@ -309,9 +330,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -349,9 +370,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -388,9 +409,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-small-1-gpu-amd-mi35x,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-mi35x,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -427,9 +448,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-large-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -467,9 +488,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-large-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -507,9 +528,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',multimodal-gen-test-1-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',multimodal-gen-test-1-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.multimodal_gen == 'true' ) ) @@ -635,9 +656,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',multimodal-gen-test-2-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',multimodal-gen-test-2-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && needs.check-changes.outputs.multimodal_gen == 'true' ) ) @@ -762,9 +783,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-c-test-large-8-gpu-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-c-test-large-8-gpu-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -810,9 +831,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-c-test-large-8-gpu-amd-mi35x,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-c-test-large-8-gpu-amd-mi35x,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) ) @@ -851,9 +872,9 @@ jobs: if: | always() && ( - (contains(format(',{0},', inputs.target_stage), ',stage-b-test-large-8-gpu-disaggregation-amd,')) || + (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-8-gpu-disaggregation-amd,')) || ( - !inputs.target_stage && + !(inputs.target_stage || inputs.target_stage_select) && (!failure() && !cancelled()) && ((needs.check-changes.outputs.main_package == 'true') || (needs.check-changes.outputs.sgl_kernel == 'true')) )