ci: unify PR test suite naming (#21187)

This commit is contained in:
Lianmin Zheng
2026-03-23 00:18:45 -07:00
committed by GitHub
parent 3d312643b9
commit 814202704b
283 changed files with 554 additions and 554 deletions
+12 -12
View File
@@ -18,10 +18,10 @@ description: Guide for writing SGLang CI/UT tests following project conventions.
| Scenario | Model | CI Registration | Suite | | Scenario | Model | CI Registration | Suite |
|----------|-------|-----------------|-------| |----------|-------|-----------------|-------|
| **Unit tests** (no server / engine launch) | None | `register_cpu_ci` (prefer) or `register_cuda_ci` | `stage-a-cpu-only` or `stage-b-test-small-1-gpu` | | **Unit tests** (no server / engine launch) | None | `register_cpu_ci` (prefer) or `register_cuda_ci` | `stage-a-test-cpu` or `stage-b-test-1-gpu-small` |
| **Common / backend-independent** (middleware, abort, routing, config, arg parsing) | `DEFAULT_SMALL_MODEL_NAME_FOR_TEST` (1B) | `register_cuda_ci` only | `stage-b-test-small-1-gpu` | | **Common / backend-independent** (middleware, abort, routing, config, arg parsing) | `DEFAULT_SMALL_MODEL_NAME_FOR_TEST` (1B) | `register_cuda_ci` only | `stage-b-test-1-gpu-small` |
| **Model-agnostic functionality** (sampling, session, OpenAI API features) | `DEFAULT_SMALL_MODEL_NAME_FOR_TEST` (1B) | `register_cuda_ci` (+ AMD if relevant) | `stage-b-test-small-1-gpu` | | **Model-agnostic functionality** (sampling, session, OpenAI API features) | `DEFAULT_SMALL_MODEL_NAME_FOR_TEST` (1B) | `register_cuda_ci` (+ AMD if relevant) | `stage-b-test-1-gpu-small` |
| **General performance** (single node, no spec/DP/parallelism) | `DEFAULT_MODEL_NAME_FOR_TEST` (8B) | `register_cuda_ci` | `stage-b-test-large-1-gpu` | | **General performance** (single node, no spec/DP/parallelism) | `DEFAULT_MODEL_NAME_FOR_TEST` (8B) | `register_cuda_ci` | `stage-b-test-1-gpu-large` |
| **Bigger features** (spec, DP, TP, disaggregation) | Case by case | Case by case | See suite table below | | **Bigger features** (spec, DP, TP, disaggregation) | Case by case | Case by case | See suite table below |
**Key principle for E2E tests**: Do NOT add `register_amd_ci` unless the test specifically exercises AMD/ROCm code paths. Common E2E tests just need any GPU to run — duplicating across backends wastes CI time with no extra coverage. **Key principle for E2E tests**: Do NOT add `register_amd_ci` unless the test specifically exercises AMD/ROCm code paths. Common E2E tests just need any GPU to run — duplicating across backends wastes CI time with no extra coverage.
@@ -43,10 +43,10 @@ Defined in `python/sglang/test/test_utils.py`:
| Suite | Runner | Scenario | | Suite | Runner | Scenario |
|-------|--------|----------| |-------|--------|----------|
| `stage-a-cpu-only` | CPU | CPU unit tests | | `stage-a-test-cpu` | CPU | CPU unit tests |
| `stage-b-test-small-1-gpu` | 1× 5090 (32GB) | Small model tests | | `stage-b-test-1-gpu-small` | 1× 5090 (32GB) | Small model tests |
| `stage-b-test-large-1-gpu` | 1× H100 (80GB) | 8B model tests | | `stage-b-test-1-gpu-large` | 1× H100 (80GB) | 8B model tests |
| `stage-b-test-large-2-gpu` | 2× H100 | TP=2 tests | | `stage-b-test-2-gpu-large` | 2× H100 | TP=2 tests |
| `stage-c-test-4-gpu-h100` | 4× H100 | TP=4 / EP tests | | `stage-c-test-4-gpu-h100` | 4× H100 | TP=4 / EP tests |
| `stage-c-test-8-gpu-h200` | 8× H200 | Large-scale multi-GPU | | `stage-c-test-8-gpu-h200` | 8× H200 | Large-scale multi-GPU |
| `nightly-1-gpu` | 1 GPU | Nightly-only | | `nightly-1-gpu` | 1 GPU | Nightly-only |
@@ -70,7 +70,7 @@ from sglang.srt.<module> import TargetClass
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
from sglang.test.test_utils import CustomTestCase from sglang.test.test_utils import CustomTestCase
register_cpu_ci(est_time=5, suite="stage-a-cpu-only") register_cpu_ci(est_time=5, suite="stage-a-test-cpu")
# Prefer CPU. Only use register_cuda_ci when the test truly needs a GPU. # Prefer CPU. Only use register_cuda_ci when the test truly needs a GPU.
class TestTargetClass(CustomTestCase): class TestTargetClass(CustomTestCase):
@@ -110,7 +110,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=60, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=60, suite="stage-b-test-1-gpu-small")
class TestMyFeature(CustomTestCase): class TestMyFeature(CustomTestCase):
@@ -159,7 +159,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=300, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=300, suite="stage-b-test-1-gpu-large")
class TestMyFeaturePerf(CustomTestCase): class TestMyFeaturePerf(CustomTestCase):
@@ -227,7 +227,7 @@ Every test file in `test/registered/` **must** call a registration function at m
```python ```python
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=60, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=60, suite="stage-b-test-1-gpu-small")
``` ```
Parameters: Parameters:
+1 -1
View File
@@ -8,7 +8,7 @@ inputs:
jobs: jobs:
description: | description: |
JSON array of job specs to wait for. Each element is either: JSON array of job specs to wait for. Each element is either:
- a string: exact job name (e.g. "stage-a-test-small-1-gpu") - a string: exact job name (e.g. "stage-a-test-1-gpu-small")
- an object { "prefix": "...", "expected_count": N }: for matrix jobs - an object { "prefix": "...", "expected_count": N }: for matrix jobs
required: true required: true
max-wait-minutes: max-wait-minutes:
+30 -30
View File
@@ -35,13 +35,13 @@ on:
- '' - ''
- sgl-kernel-unit-test-amd - sgl-kernel-unit-test-amd
- sgl-kernel-unit-test-2-gpu-amd - sgl-kernel-unit-test-2-gpu-amd
- stage-a-test-small-1-gpu-amd - stage-a-test-1-gpu-small-amd
- jit-kernel-unit-test-amd - jit-kernel-unit-test-amd
- stage-b-test-small-1-gpu-amd - stage-b-test-1-gpu-small-amd
- stage-b-test-small-1-gpu-amd-nondeterministic - stage-b-test-1-gpu-small-amd-nondeterministic
- stage-b-test-small-1-gpu-amd-mi35x - stage-b-test-1-gpu-small-amd-mi35x
- stage-b-test-large-1-gpu-amd - stage-b-test-1-gpu-large-amd
- stage-b-test-large-2-gpu-amd - stage-b-test-2-gpu-large-amd
- multimodal-gen-test-1-gpu-amd - multimodal-gen-test-1-gpu-amd
- multimodal-gen-test-2-gpu-amd - multimodal-gen-test-2-gpu-amd
- stage-c-test-large-8-gpu-amd - stage-c-test-large-8-gpu-amd
@@ -246,12 +246,12 @@ jobs:
# =============================================== primary ==================================================== # =============================================== primary ====================================================
stage-a-test-small-1-gpu-amd: stage-a-test-1-gpu-small-amd:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-small-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-1-gpu-small-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -283,7 +283,7 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-a-test-small-1-gpu-amd ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-a-test-1-gpu-small-amd ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
jit-kernel-unit-test-amd: jit-kernel-unit-test-amd:
needs: [check-changes] needs: [check-changes]
@@ -323,12 +323,12 @@ jobs:
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout" python3 -m pytest -q python/sglang/jit_kernel/tests/test_store_cache.py bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout" python3 -m pytest -q python/sglang/jit_kernel/tests/test_store_cache.py
stage-b-test-small-1-gpu-amd: stage-b-test-1-gpu-small-amd:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -360,14 +360,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 14 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 14 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-small-1-gpu-amd-nondeterministic: stage-b-test-1-gpu-small-amd-nondeterministic:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd-nondeterministic,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -398,14 +398,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd-nondeterministic --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd-nondeterministic --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-small-1-gpu-amd-mi35x: stage-b-test-1-gpu-small-amd-mi35x:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-mi35x,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd-mi35x,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -436,14 +436,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd-mi35x ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd-mi35x ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-large-1-gpu-amd: stage-b-test-1-gpu-large-amd:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-large-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -475,14 +475,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-large-1-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-large-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-large-2-gpu-amd: stage-b-test-2-gpu-large-amd:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-2-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-2-gpu-large-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -514,7 +514,7 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-large-2-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-2-gpu-large-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
multimodal-gen-test-1-gpu-amd: multimodal-gen-test-1-gpu-amd:
needs: [check-changes] needs: [check-changes]
@@ -984,13 +984,13 @@ jobs:
multimodal-gen-test-1-gpu-amd, multimodal-gen-test-1-gpu-amd,
multimodal-gen-test-2-gpu-amd, multimodal-gen-test-2-gpu-amd,
stage-a-test-small-1-gpu-amd, stage-a-test-1-gpu-small-amd,
jit-kernel-unit-test-amd, jit-kernel-unit-test-amd,
stage-b-test-small-1-gpu-amd, stage-b-test-1-gpu-small-amd,
stage-b-test-small-1-gpu-amd-nondeterministic, stage-b-test-1-gpu-small-amd-nondeterministic,
stage-b-test-small-1-gpu-amd-mi35x, stage-b-test-1-gpu-small-amd-mi35x,
stage-b-test-large-1-gpu-amd, stage-b-test-1-gpu-large-amd,
stage-b-test-large-2-gpu-amd, stage-b-test-2-gpu-large-amd,
stage-b-test-large-8-gpu-35x-disaggregation-amd, stage-b-test-large-8-gpu-35x-disaggregation-amd,
stage-c-test-large-8-gpu-amd, stage-c-test-large-8-gpu-amd,
stage-c-test-large-8-gpu-amd-mi35x, stage-c-test-large-8-gpu-amd-mi35x,
+38 -38
View File
@@ -33,13 +33,13 @@ on:
- '' - ''
- sgl-kernel-unit-test-amd - sgl-kernel-unit-test-amd
- sgl-kernel-unit-test-2-gpu-amd - sgl-kernel-unit-test-2-gpu-amd
- stage-a-test-small-1-gpu-amd - stage-a-test-1-gpu-small-amd
- jit-kernel-unit-test-amd - jit-kernel-unit-test-amd
- stage-b-test-small-1-gpu-amd - stage-b-test-1-gpu-small-amd
- stage-b-test-small-1-gpu-amd-nondeterministic - stage-b-test-1-gpu-small-amd-nondeterministic
- stage-b-test-small-1-gpu-amd-mi35x - stage-b-test-1-gpu-small-amd-mi35x
- stage-b-test-large-1-gpu-amd - stage-b-test-1-gpu-large-amd
- stage-b-test-large-2-gpu-amd - stage-b-test-2-gpu-large-amd
- multimodal-gen-test-1-gpu-amd - multimodal-gen-test-1-gpu-amd
- multimodal-gen-test-2-gpu-amd - multimodal-gen-test-2-gpu-amd
- stage-c-test-large-8-gpu-amd - stage-c-test-large-8-gpu-amd
@@ -246,12 +246,12 @@ jobs:
# =============================================== primary ==================================================== # =============================================== primary ====================================================
stage-a-test-small-1-gpu-amd: stage-a-test-1-gpu-small-amd:
needs: [check-changes] needs: [check-changes]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-small-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-a-test-1-gpu-small-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -284,7 +284,7 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 10 timeout-minutes: 10
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-a-test-small-1-gpu-amd ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-a-test-1-gpu-small-amd ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
jit-kernel-unit-test-amd: jit-kernel-unit-test-amd:
needs: [check-changes] needs: [check-changes]
@@ -325,12 +325,12 @@ jobs:
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout" python3 -m pytest -q python/sglang/jit_kernel/tests/test_store_cache.py bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout" python3 -m pytest -q python/sglang/jit_kernel/tests/test_store_cache.py
stage-b-test-small-1-gpu-amd: stage-b-test-1-gpu-small-amd:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -363,14 +363,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 14 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 14 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-small-1-gpu-amd-nondeterministic: stage-b-test-1-gpu-small-amd-nondeterministic:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-nondeterministic,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd-nondeterministic,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -402,14 +402,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd-nondeterministic --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd-nondeterministic --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-small-1-gpu-amd-mi35x: stage-b-test-1-gpu-small-amd-mi35x:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-small-1-gpu-amd-mi35x,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-small-amd-mi35x,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -441,14 +441,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-small-1-gpu-amd-mi35x ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-small-amd-mi35x ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-large-1-gpu-amd: stage-b-test-1-gpu-large-amd:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-1-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-1-gpu-large-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -481,14 +481,14 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-large-1-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-1-gpu-large-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-b-test-large-2-gpu-amd: stage-b-test-2-gpu-large-amd:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
(contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-large-2-gpu-amd,')) || (contains(format(',{0},', inputs.target_stage || inputs.target_stage_select), ',stage-b-test-2-gpu-large-amd,')) ||
( (
!(inputs.target_stage || inputs.target_stage_select) && !(inputs.target_stage || inputs.target_stage_select) &&
(!failure() && !cancelled()) && (!failure() && !cancelled()) &&
@@ -521,7 +521,7 @@ jobs:
- name: Run test - name: Run test
timeout-minutes: 30 timeout-minutes: 30
run: | run: |
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-large-2-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-b-test-2-gpu-large-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 --timeout-per-file 1800 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
multimodal-gen-test-1-gpu-amd: multimodal-gen-test-1-gpu-amd:
needs: [check-changes] needs: [check-changes]
@@ -779,7 +779,7 @@ jobs:
stage-c-test-large-8-gpu-amd: stage-c-test-large-8-gpu-amd:
needs: [check-changes, call-gate, stage-b-test-small-1-gpu-amd, stage-b-test-large-2-gpu-amd] needs: [check-changes, call-gate, stage-b-test-1-gpu-small-amd, stage-b-test-2-gpu-large-amd]
if: | if: |
always() && always() &&
( (
@@ -827,7 +827,7 @@ jobs:
bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-c-test-large-8-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 --timeout-per-file 3600 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} bash scripts/ci/amd/amd_ci_exec.sh -w "/sglang-checkout/test" python3 run_suite.py --hw amd --suite stage-c-test-large-8-gpu-amd --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 --timeout-per-file 3600 ${{ inputs.continue_on_error && '--continue-on-error' || '' }}
stage-c-test-large-8-gpu-amd-mi35x: stage-c-test-large-8-gpu-amd-mi35x:
needs: [check-changes, call-gate, stage-b-test-small-1-gpu-amd, stage-b-test-large-2-gpu-amd] needs: [check-changes, call-gate, stage-b-test-1-gpu-small-amd, stage-b-test-2-gpu-large-amd]
if: | if: |
always() && always() &&
( (
@@ -868,7 +868,7 @@ jobs:
# =============================================== Disaggregation ==================================================== # =============================================== Disaggregation ====================================================
stage-b-test-large-8-gpu-35x-disaggregation-amd: stage-b-test-large-8-gpu-35x-disaggregation-amd:
needs: [check-changes, stage-a-test-small-1-gpu-amd] needs: [check-changes, stage-a-test-1-gpu-small-amd]
if: | if: |
always() && always() &&
( (
@@ -989,13 +989,13 @@ jobs:
multimodal-gen-test-1-gpu-amd, multimodal-gen-test-1-gpu-amd,
multimodal-gen-test-2-gpu-amd, multimodal-gen-test-2-gpu-amd,
stage-a-test-small-1-gpu-amd, stage-a-test-1-gpu-small-amd,
jit-kernel-unit-test-amd, jit-kernel-unit-test-amd,
stage-b-test-small-1-gpu-amd, stage-b-test-1-gpu-small-amd,
stage-b-test-small-1-gpu-amd-nondeterministic, stage-b-test-1-gpu-small-amd-nondeterministic,
stage-b-test-small-1-gpu-amd-mi35x, stage-b-test-1-gpu-small-amd-mi35x,
stage-b-test-large-1-gpu-amd, stage-b-test-1-gpu-large-amd,
stage-b-test-large-2-gpu-amd, stage-b-test-2-gpu-large-amd,
stage-b-test-large-8-gpu-35x-disaggregation-amd, stage-b-test-large-8-gpu-35x-disaggregation-amd,
stage-c-test-large-8-gpu-amd, stage-c-test-large-8-gpu-amd,
stage-c-test-large-8-gpu-amd-mi35x, stage-c-test-large-8-gpu-amd-mi35x,
+28 -28
View File
@@ -345,7 +345,7 @@ jobs:
id: wait id: wait
with: with:
stage-name: stage-a stage-name: stage-a
jobs: '["stage-a-test-small-1-gpu", "stage-a-cpu-only"]' jobs: '["stage-a-test-1-gpu-small", "stage-a-test-cpu"]'
max-wait-minutes: '240' max-wait-minutes: '240'
wait-for-stage-b: wait-for-stage-b:
@@ -377,9 +377,9 @@ jobs:
stage-name: stage-b stage-name: stage-b
jobs: | jobs: |
[ [
{"prefix": "stage-b-test-small-1-gpu", "expected_count": 8}, {"prefix": "stage-b-test-1-gpu-small", "expected_count": 8},
{"prefix": "stage-b-test-large-1-gpu", "expected_count": 14}, {"prefix": "stage-b-test-1-gpu-large", "expected_count": 14},
{"prefix": "stage-b-test-large-2-gpu", "expected_count": 4}, {"prefix": "stage-b-test-2-gpu-large", "expected_count": 4},
{"prefix": "stage-b-test-4-gpu-b200", "expected_count": 1} {"prefix": "stage-b-test-4-gpu-b200", "expected_count": 1}
] ]
max-wait-minutes: '480' max-wait-minutes: '480'
@@ -833,12 +833,12 @@ jobs:
# =============================================== primary ==================================================== # =============================================== primary ====================================================
# Runs on 5090 (32GB, SM120) # Runs on 5090 (32GB, SM120)
stage-a-test-small-1-gpu: stage-a-test-1-gpu-small:
needs: [check-changes, call-gate, sgl-kernel-build-wheels] needs: [check-changes, call-gate, sgl-kernel-build-wheels]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-a-test-small-1-gpu') || (inputs.target_stage == 'stage-a-test-1-gpu-small') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -876,17 +876,17 @@ jobs:
CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }} CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }}
run: | run: |
cd test/ cd test/
python3 run_suite.py --hw cuda --suite stage-a-test-small-1-gpu $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cuda --suite stage-a-test-1-gpu-small $CONTINUE_ON_ERROR_FLAG
- uses: ./.github/actions/upload-cuda-coredumps - uses: ./.github/actions/upload-cuda-coredumps
if: always() if: always()
stage-a-cpu-only: stage-a-test-cpu:
needs: [check-changes, call-gate] needs: [check-changes, call-gate]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-a-cpu-only') || (inputs.target_stage == 'stage-a-test-cpu') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -932,15 +932,15 @@ jobs:
CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }} CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }}
run: | run: |
cd test/ cd test/
python3 run_suite.py --hw cpu --suite stage-a-cpu-only $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cpu --suite stage-a-test-cpu $CONTINUE_ON_ERROR_FLAG
# Runs on 5090 (32GB, SM120) # Runs on 5090 (32GB, SM120)
stage-b-test-small-1-gpu: stage-b-test-1-gpu-small:
needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels] needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-b-test-small-1-gpu') || (inputs.target_stage == 'stage-b-test-1-gpu-small') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -988,7 +988,7 @@ jobs:
run: | run: |
source /etc/profile.d/sglang-ci.sh source /etc/profile.d/sglang-ci.sh
cd test/ cd test/
python3 run_suite.py --hw cuda --suite stage-b-test-small-1-gpu --auto-partition-id ${{ matrix.partition }} --auto-partition-size 8 $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cuda --suite stage-b-test-1-gpu-small --auto-partition-id ${{ matrix.partition }} --auto-partition-size 8 $CONTINUE_ON_ERROR_FLAG
- uses: ./.github/actions/upload-cuda-coredumps - uses: ./.github/actions/upload-cuda-coredumps
if: always() if: always()
@@ -996,12 +996,12 @@ jobs:
artifact-suffix: ${{ matrix.partition }} artifact-suffix: ${{ matrix.partition }}
# Runs on H100 (80GB, SM90) - tests that don't pass on 5090 (FA3, FP8, high VRAM, etc.) # Runs on H100 (80GB, SM90) - tests that don't pass on 5090 (FA3, FP8, high VRAM, etc.)
stage-b-test-large-1-gpu: stage-b-test-1-gpu-large:
needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels] needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-b-test-large-1-gpu') || (inputs.target_stage == 'stage-b-test-1-gpu-large') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -1044,19 +1044,19 @@ jobs:
CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }} CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }}
run: | run: |
cd test/ cd test/
python3 run_suite.py --hw cuda --suite stage-b-test-large-1-gpu --auto-partition-id ${{ matrix.partition }} --auto-partition-size 14 --timeout-per-file 1800 $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cuda --suite stage-b-test-1-gpu-large --auto-partition-id ${{ matrix.partition }} --auto-partition-size 14 --timeout-per-file 1800 $CONTINUE_ON_ERROR_FLAG
- uses: ./.github/actions/upload-cuda-coredumps - uses: ./.github/actions/upload-cuda-coredumps
if: always() if: always()
with: with:
artifact-suffix: ${{ matrix.partition }} artifact-suffix: ${{ matrix.partition }}
stage-b-test-large-2-gpu: stage-b-test-2-gpu-large:
needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels] needs: [check-changes, call-gate, wait-for-stage-a, sgl-kernel-build-wheels]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-b-test-large-2-gpu') || (inputs.target_stage == 'stage-b-test-2-gpu-large') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -1101,7 +1101,7 @@ jobs:
CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }} CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }}
run: | run: |
cd test/ cd test/
python3 run_suite.py --hw cuda --suite stage-b-test-large-2-gpu --auto-partition-id ${{ matrix.partition }} --auto-partition-size 4 $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cuda --suite stage-b-test-2-gpu-large --auto-partition-id ${{ matrix.partition }} --auto-partition-size 4 $CONTINUE_ON_ERROR_FLAG
- uses: ./.github/actions/upload-cuda-coredumps - uses: ./.github/actions/upload-cuda-coredumps
if: always() if: always()
@@ -1502,12 +1502,12 @@ jobs:
with: with:
artifact-suffix: ${{ matrix.part }} artifact-suffix: ${{ matrix.part }}
stage-c-test-deepep-4-gpu: stage-c-test-deepep-4-gpu-h100:
needs: [check-changes, call-gate, wait-for-stage-b] needs: [check-changes, call-gate, wait-for-stage-b]
if: | if: |
always() && always() &&
( (
(inputs.target_stage == 'stage-c-test-deepep-4-gpu') || (inputs.target_stage == 'stage-c-test-deepep-4-gpu-h100') ||
( (
!inputs.target_stage && !inputs.target_stage &&
((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) &&
@@ -1557,7 +1557,7 @@ jobs:
CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }} CONTINUE_ON_ERROR_FLAG: ${{ needs.check-changes.outputs.continue_on_error == 'true' && '--continue-on-error' || '' }}
run: | run: |
cd test cd test
python3 run_suite.py --hw cuda --suite stage-c-test-deepep-4-gpu $CONTINUE_ON_ERROR_FLAG python3 run_suite.py --hw cuda --suite stage-c-test-deepep-4-gpu-h100 $CONTINUE_ON_ERROR_FLAG
- uses: ./.github/actions/upload-cuda-coredumps - uses: ./.github/actions/upload-cuda-coredumps
if: always() if: always()
@@ -1753,16 +1753,16 @@ jobs:
multimodal-gen-test-1-gpu, multimodal-gen-test-1-gpu,
multimodal-gen-test-2-gpu, multimodal-gen-test-2-gpu,
stage-a-test-small-1-gpu, stage-a-test-1-gpu-small,
stage-a-cpu-only, stage-a-test-cpu,
stage-b-test-small-1-gpu, stage-b-test-1-gpu-small,
stage-b-test-large-1-gpu, stage-b-test-1-gpu-large,
stage-b-test-large-2-gpu, stage-b-test-2-gpu-large,
stage-b-test-4-gpu-b200, stage-b-test-4-gpu-b200,
stage-c-test-4-gpu-h100, stage-c-test-4-gpu-h100,
stage-c-test-8-gpu-h20, stage-c-test-8-gpu-h20,
stage-c-test-8-gpu-h200, stage-c-test-8-gpu-h200,
stage-c-test-deepep-4-gpu, stage-c-test-deepep-4-gpu-h100,
stage-c-test-deepep-8-gpu-h200, stage-c-test-deepep-8-gpu-h200,
stage-c-test-4-gpu-b200, stage-c-test-4-gpu-b200,
# stage-c-test-4-gpu-gb200, # Temporarily disabled — no GB200 runner # stage-c-test-4-gpu-gb200, # Temporarily disabled — no GB200 runner
@@ -10,7 +10,7 @@ import torch
from sglang.jit_kernel.moe_lora_align import moe_lora_align_block_size from sglang.jit_kernel.moe_lora_align import moe_lora_align_block_size
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=80, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=80, suite="stage-b-test-1-gpu-large")
def round_up(x, base): def round_up(x, base):
+19 -19
View File
@@ -253,18 +253,18 @@ def handle_rerun_stage(
# Valid NVIDIA stage names that support target_stage # Valid NVIDIA stage names that support target_stage
nvidia_stages = [ nvidia_stages = [
"stage-a-test-small-1-gpu", "stage-a-test-1-gpu-small",
"stage-a-cpu-only", "stage-a-test-cpu",
"stage-b-test-small-1-gpu", "stage-b-test-1-gpu-small",
"stage-b-test-large-1-gpu", "stage-b-test-1-gpu-large",
"stage-b-test-large-2-gpu", "stage-b-test-2-gpu-large",
"stage-b-test-4-gpu-b200", "stage-b-test-4-gpu-b200",
"stage-c-test-4-gpu-h100", "stage-c-test-4-gpu-h100",
"stage-c-test-8-gpu-h200", "stage-c-test-8-gpu-h200",
"stage-c-test-8-gpu-h20", "stage-c-test-8-gpu-h20",
"stage-c-test-4-gpu-b200", "stage-c-test-4-gpu-b200",
"stage-c-test-4-gpu-gb200", "stage-c-test-4-gpu-gb200",
"stage-c-test-deepep-4-gpu", "stage-c-test-deepep-4-gpu-h100",
"stage-c-test-deepep-8-gpu-h200", "stage-c-test-deepep-8-gpu-h200",
"multimodal-gen-test-1-gpu", "multimodal-gen-test-1-gpu",
"multimodal-gen-test-2-gpu", "multimodal-gen-test-2-gpu",
@@ -274,12 +274,12 @@ def handle_rerun_stage(
amd_stages = [ amd_stages = [
"sgl-kernel-unit-test-amd", "sgl-kernel-unit-test-amd",
"sgl-kernel-unit-test-2-gpu-amd", "sgl-kernel-unit-test-2-gpu-amd",
"stage-a-test-small-1-gpu-amd", "stage-a-test-1-gpu-small-amd",
"stage-b-test-small-1-gpu-amd", "stage-b-test-1-gpu-small-amd",
"stage-b-test-small-1-gpu-amd-nondeterministic", "stage-b-test-1-gpu-small-amd-nondeterministic",
"stage-b-test-small-1-gpu-amd-mi35x", "stage-b-test-1-gpu-small-amd-mi35x",
"stage-b-test-large-1-gpu-amd", "stage-b-test-1-gpu-large-amd",
"stage-b-test-large-2-gpu-amd", "stage-b-test-2-gpu-large-amd",
"multimodal-gen-test-1-gpu-amd", "multimodal-gen-test-1-gpu-amd",
"multimodal-gen-test-2-gpu-amd", "multimodal-gen-test-2-gpu-amd",
"stage-c-test-large-8-gpu-amd", "stage-c-test-large-8-gpu-amd",
@@ -412,23 +412,23 @@ def handle_rerun_stage(
CUDA_SUITE_TO_RUNNER = { CUDA_SUITE_TO_RUNNER = {
"stage-a-test-small-1-gpu": "1-gpu-5090", "stage-a-test-1-gpu-small": "1-gpu-5090",
"stage-a-cpu-only": "ubuntu-latest", "stage-a-test-cpu": "ubuntu-latest",
"stage-b-test-small-1-gpu": "1-gpu-5090", "stage-b-test-1-gpu-small": "1-gpu-5090",
"stage-b-test-large-1-gpu": "1-gpu-h100", "stage-b-test-1-gpu-large": "1-gpu-h100",
"stage-b-test-large-2-gpu": "2-gpu-h100", "stage-b-test-2-gpu-large": "2-gpu-h100",
"stage-b-test-4-gpu-b200": "4-gpu-b200", "stage-b-test-4-gpu-b200": "4-gpu-b200",
"stage-c-test-4-gpu-h100": "4-gpu-h100", "stage-c-test-4-gpu-h100": "4-gpu-h100",
"stage-c-test-8-gpu-h200": "8-gpu-h200", "stage-c-test-8-gpu-h200": "8-gpu-h200",
"stage-c-test-8-gpu-h20": "8-gpu-h20", "stage-c-test-8-gpu-h20": "8-gpu-h20",
"stage-c-test-4-gpu-b200": "4-gpu-b200", "stage-c-test-4-gpu-b200": "4-gpu-b200",
"stage-c-test-deepep-4-gpu": "4-gpu-h100", "stage-c-test-deepep-4-gpu-h100": "4-gpu-h100",
"stage-c-test-deepep-8-gpu-h200": "8-gpu-h200", "stage-c-test-deepep-8-gpu-h200": "8-gpu-h200",
} }
DEEPEP_SUITES = { DEEPEP_SUITES = {
"stage-c-test-8-gpu-h20", "stage-c-test-8-gpu-h20",
"stage-c-test-deepep-4-gpu", "stage-c-test-deepep-4-gpu-h100",
"stage-c-test-deepep-8-gpu-h200", "stage-c-test-deepep-8-gpu-h200",
} }
+19 -19
View File
@@ -47,23 +47,23 @@ from sglang.test.ci.ci_register import (
) )
# Per-commit test (small 1-gpu, runs on 5090) # Per-commit test (small 1-gpu, runs on 5090)
register_cuda_ci(est_time=80, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=80, suite="stage-b-test-1-gpu-small")
# Per-commit test (large 1-gpu, runs on H100) # Per-commit test (large 1-gpu, runs on H100)
register_cuda_ci(est_time=120, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=120, suite="stage-b-test-1-gpu-large")
# Per-commit test (2-gpu) # Per-commit test (2-gpu)
register_cuda_ci(est_time=200, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=200, suite="stage-b-test-2-gpu-large")
# Nightly-only test # Nightly-only test
register_cuda_ci(est_time=200, suite="nightly-1-gpu", nightly=True) register_cuda_ci(est_time=200, suite="nightly-1-gpu", nightly=True)
# Multi-backend test # Multi-backend test
register_cuda_ci(est_time=80, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=80, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=120, suite="stage-a-test-small-1-gpu-amd") register_amd_ci(est_time=120, suite="stage-a-test-1-gpu-small-amd")
# Temporarily disabled test # Temporarily disabled test
register_cuda_ci(est_time=80, suite="stage-b-test-small-1-gpu", disabled="flaky - see #12345") register_cuda_ci(est_time=80, suite="stage-b-test-1-gpu-small", disabled="flaky - see #12345")
``` ```
### Choosing Between 1-GPU Suites (5090 vs H100) ### Choosing Between 1-GPU Suites (5090 vs H100)
@@ -72,14 +72,14 @@ When adding 1-GPU tests, choose the appropriate suite based on hardware compatib
| Suite | Runner | GPU | When to Use | | Suite | Runner | GPU | When to Use |
|-------|--------|-----|-------------| |-------|--------|-----|-------------|
| `stage-a-test-small-1-gpu` | `1-gpu-5090` | RTX 5090 (32GB, SM120) | Stage A per-commit smoke on 5090 (CUDA) | | `stage-a-test-1-gpu-small` | `1-gpu-5090` | RTX 5090 (32GB, SM120) | Stage A per-commit smoke on 5090 (CUDA) |
| `stage-a-test-small-1-gpu-amd` | AMD CI runners | ROCm | Stage A per-commit smoke (AMD) | | `stage-a-test-1-gpu-small-amd` | AMD CI runners | ROCm | Stage A per-commit smoke (AMD) |
| `stage-b-test-small-1-gpu` | `1-gpu-5090` | RTX 5090 (32GB, SM120) | 5090-compatible tests (preferred) | | `stage-b-test-1-gpu-small` | `1-gpu-5090` | RTX 5090 (32GB, SM120) | 5090-compatible tests (preferred) |
| `stage-b-test-large-1-gpu` | `1-gpu-h100` | H100 (80GB, SM90) | Large models or 5090-incompatible tests | | `stage-b-test-1-gpu-large` | `1-gpu-h100` | H100 (80GB, SM90) | Large models or 5090-incompatible tests |
**Use `stage-b-test-small-1-gpu` (5090) whenever possible** - this is the preferred suite for most 1-GPU tests. **Use `stage-b-test-1-gpu-small` (5090) whenever possible** - this is the preferred suite for most 1-GPU tests.
**Use `stage-b-test-large-1-gpu` (H100) if ANY of these apply:** **Use `stage-b-test-1-gpu-large` (H100) if ANY of these apply:**
1. **Architecture incompatibility (SM120/Blackwell)**: 1. **Architecture incompatibility (SM120/Blackwell)**:
- FA3 attention backend (requires SM≤90) - FA3 attention backend (requires SM≤90)
@@ -95,18 +95,18 @@ When adding 1-GPU tests, choose the appropriate suite based on hardware compatib
- Weight update/sync tests - Weight update/sync tests
- Certain spec decoding tests - Certain spec decoding tests
If a test cannot run on 5090 due to any of the above, use `stage-b-test-large-1-gpu` which runs on H100. If a test cannot run on 5090 due to any of the above, use `stage-b-test-1-gpu-large` which runs on H100.
### Available Suites ### Available Suites
**Per-Commit (CUDA)**: **Per-Commit (CUDA)**:
- Stage A: `stage-a-test-small-1-gpu` (5090), `stage-a-test-2`, `stage-a-test-cpu` - Stage A: `stage-a-test-1-gpu-small` (5090), `stage-a-test-2`, `stage-a-test-cpu`
- Stage B: `stage-b-test-small-1-gpu` (5090), `stage-b-test-large-1-gpu` (H100), `stage-b-test-large-2-gpu` - Stage B: `stage-b-test-1-gpu-small` (5090), `stage-b-test-1-gpu-large` (H100), `stage-b-test-2-gpu-large`
- Stage C (4-GPU): `stage-c-test-4-gpu-h100`, `stage-c-test-4-gpu-b200`, `stage-c-test-4-gpu-gb200`, `stage-c-test-deepep-4-gpu` - Stage C (4-GPU): `stage-c-test-4-gpu-h100`, `stage-c-test-4-gpu-b200`, `stage-c-test-4-gpu-gb200`, `stage-c-test-deepep-4-gpu-h100`
- Stage C (8-GPU): `stage-c-test-8-gpu-h20`, `stage-c-test-8-gpu-h200`, `stage-c-test-8-gpu-b200`, `stage-c-test-deepep-8-gpu-h200` - Stage C (8-GPU): `stage-c-test-8-gpu-h20`, `stage-c-test-8-gpu-h200`, `stage-c-test-8-gpu-b200`, `stage-c-test-deepep-8-gpu-h200`
**Per-Commit (AMD)**: **Per-Commit (AMD)**:
- `stage-a-test-small-1-gpu-amd`, `stage-b-test-small-1-gpu-amd`, `stage-b-test-large-2-gpu-amd` - `stage-a-test-1-gpu-small-amd`, `stage-b-test-1-gpu-small-amd`, `stage-b-test-2-gpu-large-amd`
**Nightly**: **Nightly**:
- `nightly-1-gpu`, `nightly-2-gpu`, `nightly-4-gpu`, `nightly-8-gpu`, etc. - `nightly-1-gpu`, `nightly-2-gpu`, `nightly-4-gpu`, `nightly-8-gpu`, etc.
@@ -115,13 +115,13 @@ If a test cannot run on 5090 due to any of the above, use `stage-b-test-large-1-
```bash ```bash
# Run per-commit tests # Run per-commit tests
python test/run_suite.py --hw cuda --suite stage-b-test-small-1-gpu python test/run_suite.py --hw cuda --suite stage-b-test-1-gpu-small
# Run nightly tests # Run nightly tests
python test/run_suite.py --hw cuda --suite nightly-1-gpu --nightly python test/run_suite.py --hw cuda --suite nightly-1-gpu --nightly
# With auto-partitioning (for parallel CI jobs) # With auto-partitioning (for parallel CI jobs)
python test/run_suite.py --hw cuda --suite stage-b-test-small-1-gpu \ python test/run_suite.py --hw cuda --suite stage-b-test-1-gpu-small \
--auto-partition-id 0 --auto-partition-size 4 --auto-partition-id 0 --auto-partition-size 4
``` ```
@@ -212,7 +212,7 @@ class TestDisaggregationAccuracy(PDDisaggregationServerBase):
) )
# register_amd_ci(est_time=300, suite="stage-b-test-large-2-gpu-amd") # register_amd_ci(est_time=300, suite="stage-b-test-2-gpu-large-amd")
class TestDisaggregationMooncakeFailure(PDDisaggregationServerBase): class TestDisaggregationMooncakeFailure(PDDisaggregationServerBase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
@@ -322,7 +322,7 @@ class TestDisaggregationMooncakeFailure(PDDisaggregationServerBase):
raise e from health_check_error raise e from health_check_error
# register_amd_ci(est_time=300, suite="stage-b-test-large-2-gpu-amd") # register_amd_ci(est_time=300, suite="stage-b-test-2-gpu-large-amd")
class TestDisaggregationSimulatedRetract(PDDisaggregationServerBase): class TestDisaggregationSimulatedRetract(PDDisaggregationServerBase):
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):
@@ -8,7 +8,7 @@ from sglang.srt.layers.attention.fla.fused_recurrent import (
) )
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=60, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=60, suite="stage-b-test-1-gpu-large")
@unittest.skipIf(not torch.cuda.is_available(), "Test requires CUDA") @unittest.skipIf(not torch.cuda.is_available(), "Test requires CUDA")
@@ -9,8 +9,8 @@ from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.test_utils import CustomTestCase from sglang.test.test_utils import CustomTestCase
# Triton kernel unit test for KV indices creation # Triton kernel unit test for KV indices creation
register_cuda_ci(est_time=10, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=10, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=10, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=10, suite="stage-b-test-1-gpu-small-amd")
class TestCreateKvIndices(CustomTestCase): class TestCreateKvIndices(CustomTestCase):
+1 -1
View File
@@ -20,7 +20,7 @@ from sglang.test.test_utils import (
# FlashAttention3 integration tests (requires SM 90+ / H100) # FlashAttention3 integration tests (requires SM 90+ / H100)
# Multiple test classes: FA3, FA3+MLA, FA3+SpecDecode variants # Multiple test classes: FA3, FA3+MLA, FA3+SpecDecode variants
register_cuda_ci(est_time=300, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=300, suite="stage-b-test-1-gpu-large")
GSM_DATASET_PATH = None GSM_DATASET_PATH = None
@@ -20,7 +20,7 @@ from sglang.test.test_utils import (
# Hybrid attention backend tests (FA3 prefill + FlashInfer decode, requires SM 90+ / H100) # Hybrid attention backend tests (FA3 prefill + FlashInfer decode, requires SM 90+ / H100)
# Multiple test classes: base, MLA, TorchCompile, SpecDecode variants # Multiple test classes: base, MLA, TorchCompile, SpecDecode variants
register_cuda_ci(est_time=200, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=200, suite="stage-b-test-1-gpu-large")
GSM_DATASET_PATH = None GSM_DATASET_PATH = None
@@ -8,7 +8,7 @@ from sglang.srt.layers.attention.fla.fused_sigmoid_gating_recurrent import (
from sglang.srt.layers.attention.fla.kda import fused_kda_gate, fused_recurrent_kda from sglang.srt.layers.attention.fla.kda import fused_kda_gate, fused_recurrent_kda
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=30, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=30, suite="stage-b-test-1-gpu-large")
@unittest.skipIf(not torch.cuda.is_available(), "Test requires CUDA") @unittest.skipIf(not torch.cuda.is_available(), "Test requires CUDA")
@@ -21,7 +21,7 @@ from sglang.test.ci.ci_register import register_cuda_ci
from sglang.test.test_utils import CustomTestCase from sglang.test.test_utils import CustomTestCase
# Register this test for CUDA CI in stage-b (fast attention/kernel tests) # Register this test for CUDA CI in stage-b (fast attention/kernel tests)
register_cuda_ci(est_time=25, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=25, suite="stage-b-test-1-gpu-large")
def reference_normal_decode_set_metadata( def reference_normal_decode_set_metadata(
@@ -18,8 +18,8 @@ from sglang.test.test_utils import (
) )
# Torch native attention backend integration test with MMLU eval # Torch native attention backend integration test with MMLU eval
register_cuda_ci(est_time=169, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=169, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=150, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=150, suite="stage-b-test-1-gpu-small-amd")
class TestTorchNativeAttnBackend(CustomTestCase): class TestTorchNativeAttnBackend(CustomTestCase):
@@ -20,8 +20,8 @@ from sglang.test.test_utils import (
) )
# Triton attention backend integration test with latency benchmark and MMLU eval # Triton attention backend integration test with latency benchmark and MMLU eval
register_cuda_ci(est_time=200, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=200, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=1400, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=1400, suite="stage-b-test-1-gpu-small-amd")
class TestTritonAttnBackend(CustomTestCase): class TestTritonAttnBackend(CustomTestCase):
@@ -23,8 +23,8 @@ from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.test_utils import CustomTestCase, is_in_amd_ci from sglang.test.test_utils import CustomTestCase, is_in_amd_ci
# Triton attention kernel unit tests (decode, extend, prefill) # Triton attention kernel unit tests (decode, extend, prefill)
register_cuda_ci(est_time=30, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=30, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=30, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=30, suite="stage-b-test-1-gpu-small-amd")
def extend_attention_fwd_torch( def extend_attention_fwd_torch(
@@ -16,8 +16,8 @@ from sglang.test.test_utils import (
) )
# Sliding window attention with Triton backend (Gemma-3 model) # Sliding window attention with Triton backend (Gemma-3 model)
register_cuda_ci(est_time=100, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=100, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=200, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=200, suite="stage-b-test-1-gpu-small-amd")
class TestSlidingWindowAttentionTriton(CustomTestCase): class TestSlidingWindowAttentionTriton(CustomTestCase):
@@ -25,7 +25,7 @@ from sglang.srt.utils import get_device
from sglang.test.ci.ci_register import register_amd_ci from sglang.test.ci.ci_register import register_amd_ci
# Wave attention kernel unit tests (AMD only - requires wave_lang) # Wave attention kernel unit tests (AMD only - requires wave_lang)
register_amd_ci(est_time=60, suite="stage-a-test-small-1-gpu-amd") register_amd_ci(est_time=60, suite="stage-a-test-1-gpu-small-amd")
class TestWaveAttention(unittest.TestCase): class TestWaveAttention(unittest.TestCase):
@@ -16,8 +16,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=144, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=144, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=1100, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=1100, suite="stage-b-test-1-gpu-small-amd")
class TestTorchCompile(CustomTestCase): class TestTorchCompile(CustomTestCase):
@@ -26,7 +26,7 @@ from sglang.benchmark.datasets.random import sample_random_requests
from sglang.benchmark.datasets.sharegpt import sample_sharegpt_requests from sglang.benchmark.datasets.sharegpt import sample_sharegpt_requests
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only") register_cpu_ci(est_time=5, suite="stage-a-test-cpu")
class _DummyTokenTensor: class _DummyTokenTensor:
@@ -13,8 +13,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=111, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=111, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=179, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=179, suite="stage-b-test-1-gpu-small-amd")
class ServerWithGrammar(CustomTestCase): class ServerWithGrammar(CustomTestCase):
+2 -2
View File
@@ -16,8 +16,8 @@ from sglang.test.test_deterministic_utils import (
) )
from sglang.test.test_utils import is_in_amd_ci from sglang.test.test_utils import is_in_amd_ci
register_cuda_ci(est_time=278, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=278, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=278, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=278, suite="stage-b-test-1-gpu-small-amd")
@unittest.skipIf(is_in_amd_ci(), "Skip for AMD CI.") @unittest.skipIf(is_in_amd_ci(), "Skip for AMD CI.")
+2 -2
View File
@@ -3,8 +3,8 @@ import unittest
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.gpt_oss_common import BaseTestGptOss from sglang.test.gpt_oss_common import BaseTestGptOss
register_cuda_ci(est_time=519, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=519, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=750, suite="stage-b-test-small-1-gpu-amd-mi35x") register_amd_ci(est_time=750, suite="stage-b-test-1-gpu-small-amd-mi35x")
class TestGptOss1Gpu(BaseTestGptOss): class TestGptOss1Gpu(BaseTestGptOss):
+1 -1
View File
@@ -5,7 +5,7 @@ import torch
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
from sglang.test.gpt_oss_common import BaseTestGptOss from sglang.test.gpt_oss_common import BaseTestGptOss
register_cuda_ci(est_time=500, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=500, suite="stage-b-test-1-gpu-small")
@unittest.skipIf(not torch.cuda.is_available(), "CUDA is not available") @unittest.skipIf(not torch.cuda.is_available(), "CUDA is not available")
+2 -2
View File
@@ -8,8 +8,8 @@ from sglang.srt.utils import get_device, is_hip
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.test_utils import DEFAULT_SMALL_MODEL_NAME_FOR_TEST, CustomTestCase from sglang.test.test_utils import DEFAULT_SMALL_MODEL_NAME_FOR_TEST, CustomTestCase
register_cuda_ci(est_time=55, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=55, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=55, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=55, suite="stage-b-test-1-gpu-small-amd")
_is_hip = is_hip() _is_hip = is_hip()
if _is_hip: if _is_hip:
+2 -2
View File
@@ -13,8 +13,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=60, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=60, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=60, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=60, suite="stage-b-test-1-gpu-small-amd")
class TestPageSize(CustomTestCase): class TestPageSize(CustomTestCase):
@@ -17,8 +17,8 @@ from sglang.test.test_utils import (
send_generate_requests, send_generate_requests,
) )
register_cuda_ci(est_time=47, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=47, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=70, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=70, suite="stage-b-test-1-gpu-small-amd")
class TestMaxQueuedRequests(CustomTestCase): class TestMaxQueuedRequests(CustomTestCase):
+1 -1
View File
@@ -7,7 +7,7 @@ from sglang.srt.entrypoints.engine import Engine
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
from sglang.test.test_utils import DEFAULT_SMALL_MODEL_NAME_FOR_TEST, CustomTestCase from sglang.test.test_utils import DEFAULT_SMALL_MODEL_NAME_FOR_TEST, CustomTestCase
register_cuda_ci(est_time=260, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=260, suite="stage-b-test-1-gpu-large")
TEST_MODEL_NAME = DEFAULT_SMALL_MODEL_NAME_FOR_TEST TEST_MODEL_NAME = DEFAULT_SMALL_MODEL_NAME_FOR_TEST
+2 -2
View File
@@ -27,8 +27,8 @@ from sglang.test.test_utils import (
run_logprob_check, run_logprob_check,
) )
register_cuda_ci(est_time=127, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=127, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=130, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=130, suite="stage-b-test-1-gpu-small-amd")
class TestSRTEndpoint(CustomTestCase): class TestSRTEndpoint(CustomTestCase):
+2 -2
View File
@@ -22,8 +22,8 @@ from sglang.test.test_utils import (
CustomTestCase, CustomTestCase,
) )
register_cuda_ci(est_time=252, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=252, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=261, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=261, suite="stage-b-test-1-gpu-small-amd")
class TestSRTEngine(CustomTestCase): class TestSRTEngine(CustomTestCase):
@@ -28,7 +28,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis, TokenLayou
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
class TestExecuteSubPlans: class TestExecuteSubPlans:
@@ -25,7 +25,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _make_meta( def _make_meta(
@@ -22,7 +22,7 @@ from sglang.srt.debug_utils.comparator.aligner.unsharder.types import (
from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _zigzag_order(cp_size: int) -> list[int]: def _zigzag_order(cp_size: int) -> list[int]:
@@ -24,7 +24,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestComputeReordererPlans: class TestComputeReordererPlans:
@@ -13,7 +13,7 @@ from sglang.srt.debug_utils.comparator.log_sink import log_sink
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
class TestComputeAxisAlignerPlan: class TestComputeAxisAlignerPlan:
@@ -19,7 +19,7 @@ from sglang.srt.debug_utils.comparator.log_sink import LogSink
from sglang.srt.debug_utils.comparator.output_types import ErrorLog, InfoLog from sglang.srt.debug_utils.comparator.output_types import ErrorLog, InfoLog
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
_sglang_plugin = _SGLangPlugin() _sglang_plugin = _SGLangPlugin()
_megatron_plugin = _MegatronPlugin() _megatron_plugin = _MegatronPlugin()
@@ -16,7 +16,7 @@ from sglang.srt.debug_utils.comparator.aligner.token_aligner.smart.types import
from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
_sglang_plugin = _SGLangPlugin() _sglang_plugin = _SGLangPlugin()
_megatron_plugin = _MegatronPlugin() _megatron_plugin = _MegatronPlugin()
@@ -9,7 +9,7 @@ from sglang.srt.debug_utils.comparator.aligner.token_aligner.concat_steps import
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
class TestExecuteConcat: class TestExecuteConcat:
@@ -25,7 +25,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _named(tensor: torch.Tensor, names: list[str]) -> torch.Tensor: def _named(tensor: torch.Tensor, names: list[str]) -> torch.Tensor:
@@ -23,7 +23,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
class TestBuildTokenIndexSGLangThd: class TestBuildTokenIndexSGLangThd:
@@ -14,7 +14,7 @@ from sglang.srt.debug_utils.comparator.aligner.token_aligner.smart.aux_plugins i
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _save_pt( def _save_pt(
@@ -27,7 +27,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
from sglang.srt.debug_utils.comparator.output_types import ReplicatedCheckResult from sglang.srt.debug_utils.comparator.output_types import ReplicatedCheckResult
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _name_tensors( def _name_tensors(
@@ -9,7 +9,7 @@ from sglang.srt.debug_utils.comparator.aligner.unsharder.types import AxisInfo
from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestNormalizeParallelInfo: class TestNormalizeParallelInfo:
@@ -19,7 +19,7 @@ from sglang.srt.debug_utils.comparator.aligner.unsharder.types import (
from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis, parse_dims from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis, parse_dims
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestComputeUnsharderPlan: class TestComputeUnsharderPlan:
@@ -12,7 +12,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=5, suite="stage-a-test-cpu", nightly=True)
class TestParseDim: class TestParseDim:
@@ -15,7 +15,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=5, suite="stage-a-test-cpu", nightly=True)
class TestSingletonDimUtilFilterOut: class TestSingletonDimUtilFilterOut:
@@ -13,7 +13,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=5, suite="stage-a-test-cpu", nightly=True)
class TestFindDimIndex: class TestFindDimIndex:
@@ -9,7 +9,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=5, suite="stage-a-test-cpu", nightly=True)
class TestDimConstants: class TestDimConstants:
@@ -14,7 +14,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.comparator import (
from sglang.srt.debug_utils.comparator.tensor_comparator.types import DiffInfo from sglang.srt.debug_utils.comparator.tensor_comparator.types import DiffInfo
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=20, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=20, suite="stage-a-test-cpu", nightly=True)
class TestComputeTensorInfo: class TestComputeTensorInfo:
@@ -58,7 +58,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.types import (
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
_DEFAULT_PERCENTILE_LINES: list[str] = [ _DEFAULT_PERCENTILE_LINES: list[str] = [
" [blue]p1 [/] -1.8000 -1.8000 [dim]+0.00e+00[/]", " [blue]p1 [/] -1.8000 -1.8000 [dim]+0.00e+00[/]",
@@ -21,7 +21,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.types import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _make_stats(**overrides) -> TensorStats: def _make_stats(**overrides) -> TensorStats:
@@ -15,7 +15,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.srt.debug_utils.dump_loader import ValueWithMeta from sglang.srt.debug_utils.dump_loader import ValueWithMeta
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _save_tensor( def _save_tensor(
@@ -13,7 +13,7 @@ from sglang.srt.debug_utils.comparator.bundle_matcher import (
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _make_row( def _make_row(
@@ -21,7 +21,7 @@ from sglang.srt.debug_utils.comparator.output_types import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _render_rich(renderable: object) -> str: def _render_rich(renderable: object) -> str:
@@ -12,7 +12,7 @@ from sglang.srt.debug_utils.comparator.dp_utils import (
from sglang.srt.debug_utils.dump_loader import ValueWithMeta from sglang.srt.debug_utils.dump_loader import ValueWithMeta
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=15, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=15, suite="stage-a-test-cpu", nightly=True)
def _make_sglang_meta( def _make_sglang_meta(
@@ -7,7 +7,7 @@ import torch
from sglang.srt.debug_utils.dump_loader import read_tokenizer_path from sglang.srt.debug_utils.dump_loader import read_tokenizer_path
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _save_pt( def _save_pt(
@@ -30,7 +30,7 @@ from sglang.srt.debug_utils.comparator.output_types import (
from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper, _RecomputeStatus from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper, _RecomputeStatus
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
_FIXED_EXP_NAME = "my_exp_name" _FIXED_EXP_NAME = "my_exp_name"
@@ -11,7 +11,7 @@ from sglang.srt.debug_utils.comparator.output_types import (
from sglang.srt.debug_utils.comparator.report_sink import report_sink from sglang.srt.debug_utils.comparator.report_sink import report_sink
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _make_error_log(**overrides) -> ErrorLog: def _make_error_log(**overrides) -> ErrorLog:
@@ -23,7 +23,7 @@ import torch
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=60, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=60, suite="stage-a-test-cpu", nightly=True)
_PUBLISH_DIR: Path = Path("/tmp/comparator_manual_verify") _PUBLISH_DIR: Path = Path("/tmp/comparator_manual_verify")
_PNG_MAGIC: bytes = b"\x89PNG" _PNG_MAGIC: bytes = b"\x89PNG"
@@ -16,7 +16,7 @@ from sglang.srt.debug_utils.comparator.meta_overrider import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
# ───────────────────── Unit: MetaOverrideRule ───────────────────── # ───────────────────── Unit: MetaOverrideRule ─────────────────────
@@ -44,7 +44,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.types import (
from sglang.srt.debug_utils.comparator.utils import Pair, _check_equal_lengths from sglang.srt.debug_utils.comparator.utils import Pair, _check_equal_lengths
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestCheckEqualLengths: class TestCheckEqualLengths:
@@ -55,7 +55,7 @@ from sglang.srt.debug_utils.comparator.output_types import (
from sglang.srt.debug_utils.comparator.utils import Pair from sglang.srt.debug_utils.comparator.utils import Pair
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
def _render_rich(renderable: object) -> str: def _render_rich(renderable: object) -> str:
@@ -15,7 +15,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.comparator import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
_PNG_MAGIC: bytes = b"\x89PNG" _PNG_MAGIC: bytes = b"\x89PNG"
@@ -3,7 +3,7 @@ import pytest
from sglang.srt.debug_utils.comparator.preset import PRESETS, expand_preset from sglang.srt.debug_utils.comparator.preset import PRESETS, expand_preset
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=5, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=5, suite="stage-a-test-cpu", nightly=True)
class TestExpandPreset: class TestExpandPreset:
@@ -17,7 +17,7 @@ from sglang.srt.debug_utils.comparator.utils import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestCalcRelDiff: class TestCalcRelDiff:
@@ -10,7 +10,7 @@ from sglang.srt.debug_utils.comparator.visualizer.preprocessing import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
class TestPreprocessTensor: class TestPreprocessTensor:
@@ -12,7 +12,7 @@ from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci( register_cpu_ci(
est_time=0, est_time=0,
suite="stage-a-cpu-only", suite="stage-a-test-cpu",
nightly=True, nightly=True,
disabled="helper module, no tests", disabled="helper module, no tests",
) )
@@ -10,7 +10,7 @@ from sglang.srt.debug_utils.source_patcher.code_patcher import (
from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchSpec from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchSpec
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module" SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module"
@@ -8,7 +8,7 @@ import yaml
from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module" SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module"
@@ -5,7 +5,7 @@ from sglang.srt.debug_utils.source_patcher.source_editor import apply_edits
from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchApplicationError from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchApplicationError
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=10, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=10, suite="stage-a-test-cpu", nightly=True)
class TestApplyEdits: class TestApplyEdits:
@@ -12,7 +12,7 @@ from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci( register_cuda_ci(
est_time=10, est_time=10,
suite="stage-a-test-small-1-gpu", suite="stage-a-test-1-gpu-small",
disabled="Manual only: triggers intentional CUDA crash for coredump verification", disabled="Manual only: triggers intentional CUDA crash for coredump verification",
) )
@@ -14,7 +14,7 @@ from sglang.srt.debug_utils.dump_comparator import (
from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
# ----------------------------- Unit tests ----------------------------- # ----------------------------- Unit tests -----------------------------
@@ -15,7 +15,7 @@ from sglang.srt.debug_utils.dump_loader import (
) )
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(est_time=30, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=30, suite="stage-a-test-cpu", nightly=True)
class TestReadMeta: class TestReadMeta:
@@ -25,7 +25,7 @@ from sglang.srt.debug_utils.schedule_simulator import (
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
from sglang.test.test_utils import CustomTestCase from sglang.test.test_utils import CustomTestCase
register_cpu_ci(est_time=120, suite="stage-a-cpu-only", nightly=True) register_cpu_ci(est_time=120, suite="stage-a-test-cpu", nightly=True)
# ==================== Non-E2E Tests ==================== # ==================== Non-E2E Tests ====================
@@ -19,12 +19,12 @@ from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
register_cuda_ci( register_cuda_ci(
est_time=9, est_time=9,
suite="stage-b-test-small-1-gpu", suite="stage-b-test-1-gpu-small",
disabled="Test uses pytest-style function without TestCase class - see #17145", disabled="Test uses pytest-style function without TestCase class - see #17145",
) )
register_amd_ci( register_amd_ci(
est_time=15, est_time=15,
suite="stage-b-test-small-1-gpu-amd", suite="stage-b-test-1-gpu-small-amd",
disabled="Test uses pytest-style function without TestCase class - see #17145", disabled="Test uses pytest-style function without TestCase class - see #17145",
) )
@@ -20,7 +20,7 @@ from sglang.test.test_utils import (
popen_launch_pd_server, popen_launch_pd_server,
) )
register_cuda_ci(est_time=400, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=400, suite="stage-b-test-2-gpu-large")
class TestDisaggregationAccuracy(PDDisaggregationServerBase): class TestDisaggregationAccuracy(PDDisaggregationServerBase):
@@ -18,7 +18,7 @@ from sglang.test.test_utils import (
# Registering the test for CUDA CI with appropriate parameters # Registering the test for CUDA CI with appropriate parameters
# Increasing estimated time since we run evaluation twice # Increasing estimated time since we run evaluation twice
register_cuda_ci(est_time=600, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=600, suite="stage-b-test-2-gpu-large")
@unittest.skipIf(is_in_ci(), "Temporarily disable the flaky test.") @unittest.skipIf(is_in_ci(), "Temporarily disable the flaky test.")
@@ -17,7 +17,7 @@ from sglang.srt.disaggregation.decode_kvcache_offload_manager import (
) )
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=10, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=10, suite="stage-b-test-1-gpu-small")
def _make_mock_req( def _make_mock_req(
@@ -15,8 +15,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=73, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=73, suite="stage-b-test-2-gpu-large")
register_amd_ci(est_time=73, suite="stage-b-test-large-2-gpu-amd") register_amd_ci(est_time=73, suite="stage-b-test-2-gpu-large-amd")
class TestDataParallelism(CustomTestCase): class TestDataParallelism(CustomTestCase):
@@ -25,7 +25,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=350, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=350, suite="stage-b-test-2-gpu-large")
class TestDPAttentionDP2TP2( class TestDPAttentionDP2TP2(
@@ -38,8 +38,8 @@ from sglang.utils import terminate_process
mp.set_start_method("spawn", force=True) mp.set_start_method("spawn", force=True)
register_cuda_ci(est_time=72, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=72, suite="stage-b-test-2-gpu-large")
register_amd_ci(est_time=72, suite="stage-b-test-large-2-gpu-amd") register_amd_ci(est_time=72, suite="stage-b-test-2-gpu-large-amd")
def verify_params_close(params1, params2, error_msg): def verify_params_close(params1, params2, error_msg):
@@ -43,7 +43,7 @@ import pytest
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
register_cuda_ci(est_time=5, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=5, suite="stage-b-test-1-gpu-small")
# Import the actual parallel_state module # Import the actual parallel_state module
parallel_state = pytest.importorskip("sglang.srt.distributed.parallel_state") parallel_state = pytest.importorskip("sglang.srt.distributed.parallel_state")
+2 -2
View File
@@ -1,7 +1,7 @@
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
register_cuda_ci(est_time=181, suite="stage-b-test-large-1-gpu") register_cuda_ci(est_time=181, suite="stage-b-test-1-gpu-large")
register_amd_ci(est_time=330, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=330, suite="stage-b-test-1-gpu-small-amd")
import unittest import unittest
from types import SimpleNamespace from types import SimpleNamespace
+1 -1
View File
@@ -20,7 +20,7 @@ from sglang.test.test_utils import (
write_github_step_summary, write_github_step_summary,
) )
register_amd_ci(est_time=1000, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=1000, suite="stage-b-test-1-gpu-small-amd")
class TestLLaDA2MiniAMD(CustomTestCase): class TestLLaDA2MiniAMD(CustomTestCase):
@@ -32,10 +32,10 @@ from sglang.test.test_utils import (
# Embedding model tests # Embedding model tests
register_amd_ci( register_amd_ci(
est_time=73, est_time=73,
suite="stage-b-test-small-1-gpu-amd", suite="stage-b-test-1-gpu-small-amd",
disabled="see https://github.com/sgl-project/sglang/issues/11127", disabled="see https://github.com/sgl-project/sglang/issues/11127",
) )
register_cuda_ci(est_time=73, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=73, suite="stage-b-test-1-gpu-small")
MODEL_TO_CONFIG = { MODEL_TO_CONFIG = {
"Alibaba-NLP/gte-Qwen2-1.5B-instruct": (1, 1e-5), "Alibaba-NLP/gte-Qwen2-1.5B-instruct": (1, 1e-5),
@@ -29,7 +29,7 @@ from sglang.test.test_utils import CustomTestCase, get_similarities, is_in_ci
# python -m unittest test_encoder_embedding_models.TestEncoderEmbeddingModels.test_prefill_logits # python -m unittest test_encoder_embedding_models.TestEncoderEmbeddingModels.test_prefill_logits
register_cuda_ci(est_time=270, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=270, suite="stage-b-test-1-gpu-small")
MODELS = [("BAAI/bge-small-en", 1, 1e-5), ("BAAI/bge-m3", 1, 1e-5)] MODELS = [("BAAI/bge-small-en", 1, 1e-5), ("BAAI/bge-m3", 1, 1e-5)]
@@ -16,8 +16,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=38, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=38, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=38, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=38, suite="stage-b-test-1-gpu-small-amd")
class TestInputEmbeds(CustomTestCase): class TestInputEmbeds(CustomTestCase):
@@ -30,7 +30,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=45, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=45, suite="stage-b-test-1-gpu-small")
CHUNKED_PREFILL_SIZE = 256 CHUNKED_PREFILL_SIZE = 256
@@ -13,8 +13,8 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=70, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=70, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=141, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=141, suite="stage-b-test-1-gpu-small-amd")
class TestOpenAIEmbedding(CustomTestCase): class TestOpenAIEmbedding(CustomTestCase):
+1 -1
View File
@@ -16,7 +16,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=531, suite="stage-c-test-deepep-4-gpu") register_cuda_ci(est_time=531, suite="stage-c-test-deepep-4-gpu-h100")
class TestPureDP(CustomTestCase): class TestPureDP(CustomTestCase):
+1 -1
View File
@@ -15,7 +15,7 @@ from sglang.test.test_utils import (
popen_launch_server, popen_launch_server,
) )
register_cuda_ci(est_time=660, suite="stage-c-test-deepep-4-gpu") register_cuda_ci(est_time=660, suite="stage-c-test-deepep-4-gpu-h100")
ib_devices = get_rdma_devices_args() ib_devices = get_rdma_devices_args()
@@ -20,8 +20,8 @@ from sglang.test.test_utils import (
write_github_step_summary, write_github_step_summary,
) )
register_cuda_ci(est_time=300, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=300, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=420, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=420, suite="stage-b-test-1-gpu-small-amd")
class TestEvalAccuracyLarge(CustomTestCase): class TestEvalAccuracyLarge(CustomTestCase):
@@ -21,8 +21,8 @@ from sglang.test.test_utils import (
write_github_step_summary, write_github_step_summary,
) )
register_cuda_ci(est_time=500, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=500, suite="stage-b-test-2-gpu-large")
register_amd_ci(est_time=500, suite="stage-b-test-large-2-gpu-amd") register_amd_ci(est_time=500, suite="stage-b-test-2-gpu-large-amd")
class TestMoEEvalAccuracyLarge(CustomTestCase): class TestMoEEvalAccuracyLarge(CustomTestCase):
@@ -11,7 +11,7 @@ from sglang.srt.function_call.kimik2_detector import (
from sglang.srt.parser.reasoning_parser import KimiK2Detector as KimiK2ReasoningDetector from sglang.srt.parser.reasoning_parser import KimiK2Detector as KimiK2ReasoningDetector
from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.ci.ci_register import register_cpu_ci
register_cpu_ci(1.0, "stage-a-cpu-only") register_cpu_ci(1.0, "stage-a-test-cpu")
def _make_tool(name, parameters=None): def _make_tool(name, parameters=None):
@@ -1,7 +1,7 @@
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
register_cuda_ci(est_time=96, suite="stage-b-test-small-1-gpu") register_cuda_ci(est_time=96, suite="stage-b-test-1-gpu-small")
register_amd_ci(est_time=300, suite="stage-b-test-small-1-gpu-amd") register_amd_ci(est_time=300, suite="stage-b-test-1-gpu-small-amd")
import time import time
import unittest import unittest
@@ -13,8 +13,8 @@ from test_hicache_storage_file_backend import HiCacheStorageBaseMixin
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.test_utils import CustomTestCase from sglang.test.test_utils import CustomTestCase
register_cuda_ci(est_time=200, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=200, suite="stage-b-test-2-gpu-large")
register_amd_ci(est_time=300, suite="stage-b-test-large-2-gpu") register_amd_ci(est_time=300, suite="stage-b-test-2-gpu-large")
class HiCacheStorage3FSBackendBaseMixin(HiCacheStorageBaseMixin): class HiCacheStorage3FSBackendBaseMixin(HiCacheStorageBaseMixin):
@@ -32,8 +32,8 @@ from sglang.test.test_utils import (
) )
from sglang.utils import wait_for_http_ready from sglang.utils import wait_for_http_ready
register_cuda_ci(est_time=200, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=200, suite="stage-b-test-2-gpu-large")
register_amd_ci(est_time=526, suite="stage-b-test-large-2-gpu-amd") register_amd_ci(est_time=526, suite="stage-b-test-2-gpu-large-amd")
class HiCacheStorageBaseMixin: class HiCacheStorageBaseMixin:
@@ -20,7 +20,7 @@ from sglang.test.test_utils import (
is_in_ci, is_in_ci,
) )
register_cuda_ci(est_time=300, suite="stage-b-test-large-2-gpu") register_cuda_ci(est_time=300, suite="stage-b-test-2-gpu-large")
class HiCacheStorageMooncakeBackendBaseMixin(HiCacheStorageBaseMixin): class HiCacheStorageMooncakeBackendBaseMixin(HiCacheStorageBaseMixin):

Some files were not shown because too many files have changed in this diff Show More