diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 4b3c835d9..a2b9e3329 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -1298,12 +1298,12 @@ jobs: --total-partitions 2 \ $CONTINUE_ON_ERROR_FLAG - unit-test-backend-4-gpu: + stage-c-test-4-gpu-h100: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-backend-4-gpu') || + (inputs.target_stage == 'stage-c-test-4-gpu-h100') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1340,23 +1340,19 @@ jobs: - name: Run test timeout-minutes: 20 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-4-gpu --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-4-gpu-h100 --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 $CONTINUE_ON_ERROR_FLAG - unit-test-backend-8-gpu-h200: + stage-c-test-8-gpu-h200: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-backend-8-gpu-h200') || + (inputs.target_stage == 'stage-c-test-8-gpu-h200') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1399,23 +1395,19 @@ jobs: - name: Run test timeout-minutes: 20 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-8-gpu-h200 --auto-partition-id ${{ matrix.part }} --auto-partition-size 4 $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-8-gpu-h200 --auto-partition-id ${{ matrix.part }} --auto-partition-size 4 $CONTINUE_ON_ERROR_FLAG - unit-test-backend-8-gpu-h20: + stage-c-test-8-gpu-h20: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-backend-8-gpu-h20') || + (inputs.target_stage == 'stage-c-test-8-gpu-h20') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1453,23 +1445,19 @@ jobs: - name: Run test timeout-minutes: 20 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-8-gpu-h20 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-8-gpu-h20 --auto-partition-id ${{ matrix.part }} --auto-partition-size 2 $CONTINUE_ON_ERROR_FLAG - unit-test-deepep-4-gpu: + stage-c-test-deepep-4-gpu: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-deepep-4-gpu') || + (inputs.target_stage == 'stage-c-test-deepep-4-gpu') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1502,23 +1490,19 @@ jobs: - name: Run test timeout-minutes: 20 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-4-gpu-deepep $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-deepep-4-gpu $CONTINUE_ON_ERROR_FLAG - unit-test-deepep-8-gpu: + stage-c-test-deepep-8-gpu-h200: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-deepep-8-gpu') || + (inputs.target_stage == 'stage-c-test-deepep-8-gpu-h200') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1551,23 +1535,19 @@ jobs: - name: Run test timeout-minutes: 45 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-8-gpu-h200-deepep $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-deepep-8-gpu-h200 $CONTINUE_ON_ERROR_FLAG - unit-test-backend-4-gpu-b200: + stage-c-test-4-gpu-b200: needs: [check-changes, call-gate, wait-for-stage-b] if: | always() && ( - (inputs.target_stage == 'unit-test-backend-4-gpu-b200') || + (inputs.target_stage == 'stage-c-test-4-gpu-b200') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1605,23 +1585,19 @@ jobs: - name: Run test timeout-minutes: 30 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - IS_BLACKWELL=1 python3 run_suite.py --suite per-commit-4-gpu-b200 --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 --timeout-per-file 1800 $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + IS_BLACKWELL=1 python3 run_suite.py --hw cuda --suite stage-c-test-4-gpu-b200 --auto-partition-id ${{ matrix.part }} --auto-partition-size 3 --timeout-per-file 1800 $CONTINUE_ON_ERROR_FLAG - unit-test-backend-4-gpu-gb200: + stage-c-test-4-gpu-gb200: needs: [check-changes, call-gate, wait-for-stage-b, sgl-kernel-build-wheels-arm] if: | always() && ( - (inputs.target_stage == 'unit-test-backend-4-gpu-gb200') || + (inputs.target_stage == 'stage-c-test-4-gpu-gb200') || ( !inputs.target_stage && ((github.event_name == 'schedule' || inputs.test_parallel_dispatch == true) || (!failure() && !cancelled())) && @@ -1656,16 +1632,12 @@ jobs: - name: Run test timeout-minutes: 45 run: | - cd test/srt - RETRY_FLAG="" - if [[ "${{ needs.check-changes.outputs.enable_retry }}" == "true" ]]; then - RETRY_FLAG="--enable-retry" - fi + cd test CONTINUE_ON_ERROR_FLAG="" if [[ "${{ needs.check-changes.outputs.continue_on_error }}" == "true" ]]; then CONTINUE_ON_ERROR_FLAG="--continue-on-error" fi - python3 run_suite.py --suite per-commit-4-gpu-gb200 --auto-partition-id 0 --auto-partition-size 1 --timeout-per-file 3600 $RETRY_FLAG $CONTINUE_ON_ERROR_FLAG + python3 run_suite.py --hw cuda --suite stage-c-test-4-gpu-gb200 --timeout-per-file 3600 $CONTINUE_ON_ERROR_FLAG pr-test-finish: needs: @@ -1694,13 +1666,13 @@ jobs: stage-b-test-large-2-gpu, stage-c-test-large-4-gpu, stage-b-test-4-gpu-b200, - unit-test-backend-4-gpu, - unit-test-backend-8-gpu-h20, - unit-test-backend-8-gpu-h200, - unit-test-deepep-4-gpu, - unit-test-deepep-8-gpu, - unit-test-backend-4-gpu-b200, - unit-test-backend-4-gpu-gb200, + stage-c-test-4-gpu-h100, + stage-c-test-8-gpu-h20, + stage-c-test-8-gpu-h200, + stage-c-test-deepep-4-gpu, + stage-c-test-deepep-8-gpu-h200, + stage-c-test-4-gpu-b200, + stage-c-test-4-gpu-gb200, ] if: always() runs-on: ubuntu-latest diff --git a/scripts/ci/utils/slash_command_handler.py b/scripts/ci/utils/slash_command_handler.py index 258f07cfa..3b21c2fdf 100644 --- a/scripts/ci/utils/slash_command_handler.py +++ b/scripts/ci/utils/slash_command_handler.py @@ -258,6 +258,13 @@ def handle_rerun_stage( "stage-b-test-large-2-gpu", "stage-c-test-large-4-gpu", "stage-c-test-large-4-gpu-b200", + "stage-c-test-4-gpu-h100", + "stage-c-test-8-gpu-h200", + "stage-c-test-8-gpu-h20", + "stage-c-test-4-gpu-b200", + "stage-c-test-4-gpu-gb200", + "stage-c-test-deepep-4-gpu", + "stage-c-test-deepep-8-gpu-h200", "multimodal-gen-test-1-gpu", "multimodal-gen-test-2-gpu", "quantization-test", diff --git a/test/srt/test_deepseek_v3_cutedsl_4gpu.py b/test/registered/4-gpu-models/test_deepseek_v3_cutedsl_4gpu.py similarity index 97% rename from test/srt/test_deepseek_v3_cutedsl_4gpu.py rename to test/registered/4-gpu-models/test_deepseek_v3_cutedsl_4gpu.py index f4e52d1e8..7babc15bd 100644 --- a/test/srt/test_deepseek_v3_cutedsl_4gpu.py +++ b/test/registered/4-gpu-models/test_deepseek_v3_cutedsl_4gpu.py @@ -3,6 +3,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_DEEPSEEK_NVFP4_MODEL_FOR_TEST, @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=1800, suite="stage-c-test-4-gpu-gb200") + class TestDeepseekR1Nvfp4CuteDSLDeepEP(CustomTestCase): @classmethod diff --git a/test/srt/test_gpt_oss_4gpu.py b/test/registered/4-gpu-models/test_gpt_oss_4gpu.py similarity index 82% rename from test/srt/test_gpt_oss_4gpu.py rename to test/registered/4-gpu-models/test_gpt_oss_4gpu.py index f2e212994..8ccf4d1b9 100644 --- a/test/srt/test_gpt_oss_4gpu.py +++ b/test/registered/4-gpu-models/test_gpt_oss_4gpu.py @@ -1,7 +1,11 @@ import unittest +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.gpt_oss_common import BaseTestGptOss +register_cuda_ci(est_time=300, suite="stage-c-test-4-gpu-h100") +register_cuda_ci(est_time=300, suite="stage-c-test-4-gpu-b200") + class TestGptOss4Gpu(BaseTestGptOss): def test_bf16_120b(self): diff --git a/test/srt/models/test_qwen3_next_models.py b/test/registered/4-gpu-models/test_qwen3_next_models.py similarity index 97% rename from test/srt/models/test_qwen3_next_models.py rename to test/registered/4-gpu-models/test_qwen3_next_models.py index 3da79a3d2..982cb6dce 100644 --- a/test/srt/models/test_qwen3_next_models.py +++ b/test/registered/4-gpu-models/test_qwen3_next_models.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.kl_test_utils import ( test_input_output_logprobs_match_decode_cache_hit_helper, @@ -16,6 +17,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=350, suite="stage-c-test-4-gpu-h100") + QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct" ACC_THRESHOLDS = { diff --git a/test/srt/models/test_qwen3_next_models_mtp.py b/test/registered/4-gpu-models/test_qwen3_next_models_mtp.py similarity index 98% rename from test/srt/models/test_qwen3_next_models_mtp.py rename to test/registered/4-gpu-models/test_qwen3_next_models_mtp.py index ecbc1337e..336298ec3 100644 --- a/test/srt/models/test_qwen3_next_models_mtp.py +++ b/test/registered/4-gpu-models/test_qwen3_next_models_mtp.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.kl_test_utils import ( test_input_output_logprobs_match_decode_cache_hit_helper, @@ -16,6 +17,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=500, suite="stage-c-test-4-gpu-h100") + QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct" ACC_THRESHOLDS = { diff --git a/test/srt/test_deepseek_v32_basic.py b/test/registered/8-gpu-models/test_deepseek_v32_basic.py similarity index 97% rename from test/srt/test_deepseek_v32_basic.py rename to test/registered/8-gpu-models/test_deepseek_v32_basic.py index edae36131..f29c49282 100644 --- a/test/srt/test_deepseek_v32_basic.py +++ b/test/registered/8-gpu-models/test_deepseek_v32_basic.py @@ -2,6 +2,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=360, suite="stage-c-test-8-gpu-h200") + DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2-Exp" diff --git a/test/srt/test_deepseek_v32_mtp.py b/test/registered/8-gpu-models/test_deepseek_v32_mtp.py similarity index 97% rename from test/srt/test_deepseek_v32_mtp.py rename to test/registered/8-gpu-models/test_deepseek_v32_mtp.py index cb022e8ea..5446597d3 100644 --- a/test/srt/test_deepseek_v32_mtp.py +++ b/test/registered/8-gpu-models/test_deepseek_v32_mtp.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -15,6 +16,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=360, suite="stage-c-test-8-gpu-h200") + FULL_DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2-Exp" diff --git a/test/srt/test_deepseek_v3_basic.py b/test/registered/8-gpu-models/test_deepseek_v3_basic.py similarity index 95% rename from test/srt/test_deepseek_v3_basic.py rename to test/registered/8-gpu-models/test_deepseek_v3_basic.py index 3bb67baf6..08a683f52 100644 --- a/test/srt/test_deepseek_v3_basic.py +++ b/test/registered/8-gpu-models/test_deepseek_v3_basic.py @@ -2,6 +2,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -14,6 +15,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=275, suite="stage-c-test-8-gpu-h200") + FULL_DEEPSEEK_V3_MODEL_PATH = "deepseek-ai/DeepSeek-V3-0324" diff --git a/test/srt/test_deepseek_v3_mtp.py b/test/registered/8-gpu-models/test_deepseek_v3_mtp.py similarity index 96% rename from test/srt/test_deepseek_v3_mtp.py rename to test/registered/8-gpu-models/test_deepseek_v3_mtp.py index a17ca4380..31e99ab08 100644 --- a/test/srt/test_deepseek_v3_mtp.py +++ b/test/registered/8-gpu-models/test_deepseek_v3_mtp.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -16,6 +17,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=275, suite="stage-c-test-8-gpu-h200") + FULL_DEEPSEEK_V3_MODEL_PATH = "deepseek-ai/DeepSeek-V3-0324" diff --git a/test/srt/models/test_mimo_models.py b/test/registered/8-gpu-models/test_mimo_models.py similarity index 90% rename from test/srt/models/test_mimo_models.py rename to test/registered/8-gpu-models/test_mimo_models.py index 83e430adb..6baa23bef 100644 --- a/test/srt/models/test_mimo_models.py +++ b/test/registered/8-gpu-models/test_mimo_models.py @@ -1,9 +1,12 @@ import unittest +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.kits.gsm8k_accuracy_kit import GSM8KMixin from sglang.test.kits.spec_decoding_kit import SpecDecodingMixin from sglang.test.server_fixtures.default_fixture import DefaultServerBase +register_cuda_ci(est_time=200, suite="stage-c-test-8-gpu-h200") + class TestMiMoV2Flash(GSM8KMixin, SpecDecodingMixin, DefaultServerBase): gsm8k_accuracy_thres = 0.75 diff --git a/test/srt/ep/test_moriep_small.py b/test/registered/amd/test_moriep_small.py similarity index 97% rename from test/srt/ep/test_moriep_small.py rename to test/registered/amd/test_moriep_small.py index 7f65a8a85..2a29b06b1 100644 --- a/test/srt/ep/test_moriep_small.py +++ b/test/registered/amd/test_moriep_small.py @@ -3,6 +3,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_amd_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_DEEPEP_MODEL_NAME_FOR_TEST, @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_amd_ci(est_time=1200, suite="stage-c-test-large-8-gpu-amd") + class TestPureDP(CustomTestCase): diff --git a/test/srt/test_disaggregation_aarch64.py b/test/registered/distributed/test_disaggregation_aarch64.py similarity index 95% rename from test/srt/test_disaggregation_aarch64.py rename to test/registered/distributed/test_disaggregation_aarch64.py index 8a6048adc..ddd6e96f7 100644 --- a/test/srt/test_disaggregation_aarch64.py +++ b/test/registered/distributed/test_disaggregation_aarch64.py @@ -2,6 +2,7 @@ import os import unittest from types import SimpleNamespace +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -12,6 +13,8 @@ from sglang.test.test_utils import ( popen_launch_pd_server, ) +register_cuda_ci(est_time=300, suite="stage-c-test-4-gpu-gb200") + class TestDisaggregationMooncakeAARCH64Accuracy(PDDisaggregationServerBase): @classmethod diff --git a/test/srt/test_disaggregation_different_tp.py b/test/registered/distributed/test_disaggregation_different_tp.py similarity index 98% rename from test/srt/test_disaggregation_different_tp.py rename to test/registered/distributed/test_disaggregation_different_tp.py index e8a26b558..00199ec25 100644 --- a/test/srt/test_disaggregation_different_tp.py +++ b/test/registered/distributed/test_disaggregation_different_tp.py @@ -2,6 +2,7 @@ import unittest from types import SimpleNamespace from sglang.srt.environ import envs +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -14,6 +15,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=600, suite="stage-c-test-8-gpu-h20") + class TestDisaggregationMooncakePrefillLargerTP(PDDisaggregationServerBase): @classmethod diff --git a/test/srt/test_disaggregation_dp_attention.py b/test/registered/distributed/test_disaggregation_dp_attention.py similarity index 95% rename from test/srt/test_disaggregation_dp_attention.py rename to test/registered/distributed/test_disaggregation_dp_attention.py index c962c69b6..90b5b4bab 100644 --- a/test/srt/test_disaggregation_dp_attention.py +++ b/test/registered/distributed/test_disaggregation_dp_attention.py @@ -2,6 +2,7 @@ import unittest from types import SimpleNamespace from sglang.srt.environ import envs +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=155, suite="stage-c-test-8-gpu-h20") + class TestDisaggregationDPAttention(PDDisaggregationServerBase): PREFILL_DP_SIZE = 4 diff --git a/test/srt/test_disaggregation_hybrid_attention.py b/test/registered/distributed/test_disaggregation_hybrid_attention.py similarity index 97% rename from test/srt/test_disaggregation_hybrid_attention.py rename to test/registered/distributed/test_disaggregation_hybrid_attention.py index 04b99fd9b..226a22a8f 100644 --- a/test/srt/test_disaggregation_hybrid_attention.py +++ b/test/registered/distributed/test_disaggregation_hybrid_attention.py @@ -1,6 +1,7 @@ import unittest from types import SimpleNamespace +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -11,6 +12,10 @@ from sglang.test.test_utils import ( popen_launch_pd_server, ) +register_cuda_ci( + est_time=400, suite="stage-c-test-8-gpu-h200", disabled="TCP fallback flaky" +) + @unittest.skipIf(is_in_ci(), "Temporarily disable the flaky test.") class TestDisaggregationHybridAttentionMamba(PDDisaggregationServerBase): diff --git a/test/srt/test_disaggregation_pp.py b/test/registered/distributed/test_disaggregation_pp.py similarity index 98% rename from test/srt/test_disaggregation_pp.py rename to test/registered/distributed/test_disaggregation_pp.py index 4c99ea704..b6396e55b 100644 --- a/test/srt/test_disaggregation_pp.py +++ b/test/registered/distributed/test_disaggregation_pp.py @@ -2,6 +2,7 @@ import time import unittest from types import SimpleNamespace +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=180, suite="stage-c-test-8-gpu-h20") + class TestDisaggregationPrefillPPAccuracy(PDDisaggregationServerBase): @classmethod diff --git a/test/srt/test_epd_disaggregation.py b/test/registered/distributed/test_epd_disaggregation.py similarity index 99% rename from test/srt/test_epd_disaggregation.py rename to test/registered/distributed/test_epd_disaggregation.py index 6733bc569..96e13de3b 100644 --- a/test/srt/test_epd_disaggregation.py +++ b/test/registered/distributed/test_epd_disaggregation.py @@ -3,6 +3,7 @@ import threading import unittest from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.kits.mmmu_vlm_kit import _run_lmms_eval_with_retry from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, @@ -14,6 +15,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=150, suite="stage-c-test-4-gpu-h100") + @unittest.skipIf(is_in_ci(), "Skipping in CI to reduce multi-GPU runtime") class TestEPDDisaggregationOneEncoder(PDDisaggregationServerBase): diff --git a/test/srt/test_pp_single_node.py b/test/registered/distributed/test_pp_single_node.py similarity index 99% rename from test/srt/test_pp_single_node.py rename to test/registered/distributed/test_pp_single_node.py index aeb2454d9..a49fed368 100644 --- a/test/srt/test_pp_single_node.py +++ b/test/registered/distributed/test_pp_single_node.py @@ -15,6 +15,7 @@ import requests from sglang.bench_one_batch_server import BenchArgs as OneBatchBenchArgs from sglang.srt.server_args import ServerArgs from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.run_eval import run_eval from sglang.test.test_utils import ( @@ -30,6 +31,8 @@ from sglang.test.test_utils import ( run_bench_one_batch_server, ) +register_cuda_ci(est_time=500, suite="stage-c-test-4-gpu-h100") + class TestPPAccuracy(unittest.TestCase): @classmethod diff --git a/test/srt/ep/test_deepep_large.py b/test/registered/ep/test_deepep_large.py similarity index 98% rename from test/srt/ep/test_deepep_large.py rename to test/registered/ep/test_deepep_large.py index 688e801cb..e093f86e2 100644 --- a/test/srt/ep/test_deepep_large.py +++ b/test/registered/ep/test_deepep_large.py @@ -4,6 +4,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -14,6 +15,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=563, suite="stage-c-test-deepep-8-gpu-h200") + DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2-Exp" diff --git a/test/srt/ep/test_deepep_small.py b/test/registered/ep/test_deepep_small.py similarity index 99% rename from test/srt/ep/test_deepep_small.py rename to test/registered/ep/test_deepep_small.py index 126adab6b..78c42e1db 100644 --- a/test/srt/ep/test_deepep_small.py +++ b/test/registered/ep/test_deepep_small.py @@ -5,6 +5,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_MODEL_NAME_FOR_TEST_MLA, @@ -15,6 +16,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=531, suite="stage-c-test-deepep-4-gpu") + class TestPureDP(CustomTestCase): @classmethod diff --git a/test/srt/ep/test_mooncake_ep_small.py b/test/registered/ep/test_mooncake_ep_small.py similarity index 96% rename from test/srt/ep/test_mooncake_ep_small.py rename to test/registered/ep/test_mooncake_ep_small.py index ff06e4167..6c91f20da 100644 --- a/test/srt/ep/test_mooncake_ep_small.py +++ b/test/registered/ep/test_mooncake_ep_small.py @@ -3,6 +3,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.server_fixtures.disaggregation_fixture import get_rdma_devices_args from sglang.test.test_utils import ( @@ -14,6 +15,8 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci(est_time=660, suite="stage-c-test-deepep-4-gpu") + ib_devices = get_rdma_devices_args() diff --git a/test/srt/test_fla_layernorm_guard.py b/test/registered/layers/test_fla_layernorm_guard.py similarity index 98% rename from test/srt/test_fla_layernorm_guard.py rename to test/registered/layers/test_fla_layernorm_guard.py index 96b26237f..e0a89fde5 100644 --- a/test/srt/test_fla_layernorm_guard.py +++ b/test/registered/layers/test_fla_layernorm_guard.py @@ -11,6 +11,13 @@ from sglang.srt.layers.attention.fla.layernorm_gated import ( _layer_norm_fwd as layer_norm_fwd, ) from sglang.srt.layers.attention.fla.layernorm_gated import layernorm_fn, rms_norm_ref +from sglang.test.ci.ci_register import register_cuda_ci + +register_cuda_ci( + est_time=60, + suite="stage-b-test-large-2-gpu", + disabled="Temporarily disabled", +) # Optional dependency in sglang repo; skip collection cleanly if absent. custom_all_reduce_utils = pytest.importorskip( diff --git a/test/srt/models/test_dummy_grok_models.py b/test/registered/models/test_dummy_grok_models.py similarity index 83% rename from test/srt/models/test_dummy_grok_models.py rename to test/registered/models/test_dummy_grok_models.py index bebf9949c..e73f55467 100644 --- a/test/srt/models/test_dummy_grok_models.py +++ b/test/registered/models/test_dummy_grok_models.py @@ -1,7 +1,14 @@ import unittest +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.test_utils import CustomTestCase, is_in_ci, run_bench_one_batch +register_cuda_ci( + est_time=120, + suite="stage-b-test-large-2-gpu", + disabled="Temporarily disabled", +) + class TestDummyGrok1(CustomTestCase): diff --git a/test/srt/models/test_ministral3_models.py b/test/registered/models/test_ministral3_models.py similarity index 83% rename from test/srt/models/test_ministral3_models.py rename to test/registered/models/test_ministral3_models.py index b7715855f..0da56fb81 100644 --- a/test/srt/models/test_ministral3_models.py +++ b/test/registered/models/test_ministral3_models.py @@ -1,10 +1,17 @@ import unittest +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.kits.gsm8k_accuracy_kit import GSM8KMixin from sglang.test.kits.mmmu_vlm_kit import MMMUMixin from sglang.test.server_fixtures.default_fixture import DefaultServerBase from sglang.test.server_fixtures.mmmu_fixture import MMMUServerBase +register_cuda_ci( + est_time=200, + suite="stage-b-test-small-1-gpu", + disabled="Temporarily disabled", +) + MODEL = "mistralai/Ministral-3-3B-Instruct-2512" diff --git a/test/srt/models/test_qwen3_next_models_pcg.py b/test/registered/models/test_qwen3_next_models_pcg.py similarity index 91% rename from test/srt/models/test_qwen3_next_models_pcg.py rename to test/registered/models/test_qwen3_next_models_pcg.py index e968cbd63..775227f92 100644 --- a/test/srt/models/test_qwen3_next_models_pcg.py +++ b/test/registered/models/test_qwen3_next_models_pcg.py @@ -10,6 +10,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -18,6 +19,12 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci( + est_time=400, + suite="stage-c-test-4-gpu-h100", + disabled="Intermittent failures, see #17039", +) + QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct" ACC_THRESHOLDS = { diff --git a/test/srt/test_profile_v2.py b/test/registered/profiling/test_profile_v2.py similarity index 94% rename from test/srt/test_profile_v2.py rename to test/registered/profiling/test_profile_v2.py index 8ff16213a..c90c62292 100644 --- a/test/srt/test_profile_v2.py +++ b/test/registered/profiling/test_profile_v2.py @@ -8,6 +8,7 @@ import requests from sglang.srt.environ import envs from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -16,6 +17,12 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci( + est_time=120, + suite="stage-b-test-small-1-gpu", + disabled="Temporarily disabled", +) + class TestStartProfile(CustomTestCase): diff --git a/test/srt/test_deepseek_v32_fp4_4gpu.py b/test/registered/quant/test_deepseek_v32_fp4_4gpu.py similarity index 94% rename from test/srt/test_deepseek_v32_fp4_4gpu.py rename to test/registered/quant/test_deepseek_v32_fp4_4gpu.py index 8b140e7c5..439c2f558 100644 --- a/test/srt/test_deepseek_v32_fp4_4gpu.py +++ b/test/registered/quant/test_deepseek_v32_fp4_4gpu.py @@ -2,6 +2,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_URL_FOR_TEST, @@ -11,6 +12,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=600, suite="stage-c-test-4-gpu-b200") + FULL_DEEPSEEK_V3_FP4_MODEL_PATH = "nvidia/DeepSeek-V3.2-NVFP4" SERVER_LAUNCH_TIMEOUT = 1200 diff --git a/test/srt/test_deepseek_v3_fp4_4gpu.py b/test/registered/quant/test_deepseek_v3_fp4_4gpu.py similarity index 98% rename from test/srt/test_deepseek_v3_fp4_4gpu.py rename to test/registered/quant/test_deepseek_v3_fp4_4gpu.py index 5a9d86419..0ccf4b52e 100644 --- a/test/srt/test_deepseek_v3_fp4_4gpu.py +++ b/test/registered/quant/test_deepseek_v3_fp4_4gpu.py @@ -3,6 +3,7 @@ import unittest from types import SimpleNamespace from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.send_one import BenchArgs, send_one_prompt from sglang.test.test_utils import ( @@ -13,6 +14,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=1500, suite="stage-c-test-4-gpu-b200") + FULL_DEEPSEEK_V3_FP4_MODEL_PATH = "nvidia/DeepSeek-V3-0324-FP4" SERVER_LAUNCH_TIMEOUT = 1200 diff --git a/test/srt/test_fp8_blockwise_gemm.py b/test/registered/quant/test_fp8_blockwise_gemm.py similarity index 94% rename from test/srt/test_fp8_blockwise_gemm.py rename to test/registered/quant/test_fp8_blockwise_gemm.py index 330619fe6..b832e4740 100644 --- a/test/srt/test_fp8_blockwise_gemm.py +++ b/test/registered/quant/test_fp8_blockwise_gemm.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import get_device_sm, kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=280, suite="stage-c-test-4-gpu-b200") + MODEL_PATH = "Qwen/Qwen3-4B-Instruct-2507-FP8" diff --git a/test/srt/test_nvfp4_gemm.py b/test/registered/quant/test_nvfp4_gemm.py similarity index 95% rename from test/srt/test_nvfp4_gemm.py rename to test/registered/quant/test_nvfp4_gemm.py index 1bed4aed6..1a94b6b48 100644 --- a/test/srt/test_nvfp4_gemm.py +++ b/test/registered/quant/test_nvfp4_gemm.py @@ -3,6 +3,7 @@ from types import SimpleNamespace from urllib.parse import urlparse from sglang.srt.utils import get_device_sm, kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -11,6 +12,8 @@ from sglang.test.test_utils import ( try_cached_model, ) +register_cuda_ci(est_time=360, suite="stage-c-test-4-gpu-b200") + MODEL_PATH = "nvidia/Llama-3.1-8B-Instruct-NVFP4" diff --git a/test/srt/quant/test_w4a8_deepseek_v3.py b/test/registered/quant/test_w4a8_deepseek_v3.py similarity index 98% rename from test/srt/quant/test_w4a8_deepseek_v3.py rename to test/registered/quant/test_w4a8_deepseek_v3.py index 064986a57..a6c33bea3 100644 --- a/test/srt/quant/test_w4a8_deepseek_v3.py +++ b/test/registered/quant/test_w4a8_deepseek_v3.py @@ -5,6 +5,7 @@ from types import SimpleNamespace import requests from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k from sglang.test.test_utils import ( DEFAULT_DEEPSEEK_W4AFP8_MODEL_FOR_TEST, @@ -18,6 +19,8 @@ from sglang.test.test_utils import ( write_github_step_summary, ) +register_cuda_ci(est_time=520, suite="stage-c-test-8-gpu-h20") + class TestDeepseekV3W4afp8(CustomTestCase): @classmethod diff --git a/test/srt/test_multi_instance_release_memory_occupation.py b/test/registered/rl/test_multi_instance_release_memory_occupation.py similarity index 98% rename from test/srt/test_multi_instance_release_memory_occupation.py rename to test/registered/rl/test_multi_instance_release_memory_occupation.py index 8aa75e7dd..baf614508 100644 --- a/test/srt/test_multi_instance_release_memory_occupation.py +++ b/test/registered/rl/test_multi_instance_release_memory_occupation.py @@ -12,6 +12,7 @@ from torch.distributed.device_mesh import init_device_mesh from transformers import AutoModelForCausalLM from sglang.srt.entrypoints.engine import Engine as SglangEngine +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_SMALL_MODEL_NAME_FOR_TEST_BASE, @@ -19,6 +20,8 @@ from sglang.test.test_utils import ( find_available_port, ) +register_cuda_ci(est_time=64, suite="stage-c-test-4-gpu-h100") + TEST_SUITE = dict( model_path=DEFAULT_SMALL_MODEL_NAME_FOR_TEST, mem_fraction_static=0.83, diff --git a/test/srt/test_release_memory_occupation.py b/test/registered/rl/test_release_memory_occupation.py similarity index 98% rename from test/srt/test_release_memory_occupation.py rename to test/registered/rl/test_release_memory_occupation.py index 33986e6ee..59bc070a6 100644 --- a/test/srt/test_release_memory_occupation.py +++ b/test/registered/rl/test_release_memory_occupation.py @@ -23,6 +23,8 @@ ensuring correct weight updates and text generation. 3. Tensor Parallel Tests: Tests memory release and resume operations with different tensor parallel configurations (tp=1, tp=2) to ensure proper memory management in distributed settings. For different data parallel size, we test it in verl. + +NOTE: This test is temporarily disabled. """ import os @@ -38,6 +40,7 @@ from sglang.srt.constants import ( GPU_MEMORY_TYPE_KV_CACHE, GPU_MEMORY_TYPE_WEIGHTS, ) +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.test_utils import ( DEFAULT_HYBRID_MAMBA_MODEL_NAME_FOR_TEST, DEFAULT_SMALL_MODEL_NAME_FOR_TEST, @@ -47,6 +50,12 @@ from sglang.test.test_utils import ( CustomTestCase, ) +register_cuda_ci( + est_time=200, + suite="stage-c-test-4-gpu-h100", + disabled="Temporarily disabled - needs investigation", +) + # (temporarily) set to true to observe memory usage in nvidia-smi more clearly _DEBUG_EXTRA = False diff --git a/test/srt/test_prefill_delayer.py b/test/registered/scheduler/test_prefill_delayer.py similarity index 99% rename from test/srt/test_prefill_delayer.py rename to test/registered/scheduler/test_prefill_delayer.py index 80a1e3755..763a035f0 100644 --- a/test/srt/test_prefill_delayer.py +++ b/test/registered/scheduler/test_prefill_delayer.py @@ -16,6 +16,7 @@ import torch.multiprocessing as mp from sglang.bench_serving import run_benchmark from sglang.srt.managers.prefill_delayer import PrefillDelayer from sglang.srt.utils import kill_process_tree +from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.run_eval import run_eval from sglang.test.test_utils import ( DEFAULT_MLA_MODEL_NAME_FOR_TEST, @@ -26,6 +27,12 @@ from sglang.test.test_utils import ( popen_launch_server, ) +register_cuda_ci( + est_time=300, + suite="stage-c-test-8-gpu-h200", + disabled="Temporarily disabled", +) + WORLD_SIZE = os.environ.get("SGLANG_TEST_WORLD_SIZE", "8") # ============================ Unit Tests ============================ diff --git a/test/run_suite.py b/test/run_suite.py index f682bdbc9..502ec397e 100644 --- a/test/run_suite.py +++ b/test/run_suite.py @@ -32,8 +32,14 @@ PER_COMMIT_SUITES = { "stage-b-test-large-1-gpu", "stage-b-test-large-2-gpu", "stage-c-test-large-4-gpu", - "stage-b-test-4-gpu-b200", - "stage-c-test-large-4-gpu-b200", + "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-test-8-gpu-h20", + "stage-c-test-8-gpu-h200", + "stage-c-test-8-gpu-b200", + "stage-c-test-deepep-8-gpu-h200", ], HWBackend.NPU: [], } diff --git a/test/srt/models/test_kimi_k2_models.py b/test/srt/models/test_kimi_k2_models.py deleted file mode 100644 index 6a2fbed71..000000000 --- a/test/srt/models/test_kimi_k2_models.py +++ /dev/null @@ -1,70 +0,0 @@ -import unittest -from types import SimpleNamespace - -import requests - -from sglang.srt.utils import kill_process_tree -from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k -from sglang.test.test_utils import ( - DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, - DEFAULT_URL_FOR_TEST, - CustomTestCase, - is_in_ci, - popen_launch_server, - write_github_step_summary, -) - - -class TestKimiK2Thinking(CustomTestCase): - @classmethod - def setUpClass(cls): - cls.model = "moonshotai/Kimi-K2-Thinking" - cls.base_url = DEFAULT_URL_FOR_TEST - other_args = [ - "--tp", - "8", - "--trust-remote-code", - "--tool-call-parser", - "kimi_k2", - "--reasoning-parser", - "kimi_k2", - "--model-loader-extra-config", - '{"enable_multithread_load": true, "num_threads": 64}', - ] - cls.process = popen_launch_server( - cls.model, - cls.base_url, - timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, - other_args=other_args, - ) - - @classmethod - def tearDownClass(cls): - kill_process_tree(cls.process.pid) - - def test_a_gsm8k( - self, - ): - requests.get(self.base_url + "/flush_cache") - - args = SimpleNamespace( - num_shots=5, - data_path=None, - num_questions=200, - max_new_tokens=512, - parallel=128, - host="http://127.0.0.1", - port=int(self.base_url.split(":")[-1]), - ) - metrics = run_eval_few_shot_gsm8k(args) - print(f"{metrics=}") - - if is_in_ci(): - write_github_step_summary( - f"### test_gsm8k (Kimi-K2-Thinking)\n" f'{metrics["accuracy"]=:.3f}\n' - ) - self.assertGreater(metrics["accuracy"], 0.95) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/srt/run_suite.py b/test/srt/run_suite.py index 0c1bd240e..6dde83ab7 100644 --- a/test/srt/run_suite.py +++ b/test/srt/run_suite.py @@ -7,65 +7,13 @@ import tabulate from sglang.test.ci.ci_utils import TestFile, run_unittest_files # NOTE: please sort the test cases alphabetically by the test file name +# NOTE: per-commit-4-gpu, per-commit-8-gpu-h200, per-commit-8-gpu-h20, per-commit-4-gpu-b200, +# per-commit-4-gpu-gb200, per-commit-4-gpu-deepep, and per-commit-8-gpu-h200-deepep suites +# have been migrated to stage-c suites in test/registered/ using the CI registry system. suites = { - "per-commit-4-gpu": [ - TestFile("models/test_qwen3_next_models.py", 350), - TestFile("models/test_qwen3_next_models_mtp.py", 500), - TestFile("test_gpt_oss_4gpu.py", 300), - TestFile("test_multi_instance_release_memory_occupation.py", 64), - TestFile("test_pp_single_node.py", 500), - TestFile("test_epd_disaggregation.py", 150), - ], - "per-commit-8-gpu-h200": [ - TestFile("test_deepseek_v3_basic.py", 275), - TestFile("test_deepseek_v3_mtp.py", 275), - TestFile("test_disaggregation_hybrid_attention.py", 400), - TestFile("models/test_kimi_k2_models.py", 200), - TestFile("test_deepseek_v32_basic.py", 360), - TestFile("test_deepseek_v32_mtp.py", 360), - TestFile("models/test_mimo_models.py", 200), - ], - "per-commit-8-gpu-h20": [ - TestFile("quant/test_w4a8_deepseek_v3.py", 520), - TestFile("test_disaggregation_different_tp.py", 600), - TestFile("test_disaggregation_pp.py", 180), - TestFile("test_disaggregation_dp_attention.py", 155), - ], - "per-commit-4-gpu-b200": [ - TestFile("test_deepseek_v3_fp4_4gpu.py", 1500), - TestFile("test_fp8_blockwise_gemm.py", 280), - TestFile("test_gpt_oss_4gpu.py", 300), - TestFile("test_nvfp4_gemm.py", 360), - TestFile("test_deepseek_v32_fp4_4gpu.py", 600), - ], - # "per-commit-8-gpu-b200": [ - # TestFile("test_mistral_large3_basic.py", 275), # Moved to nightly - large model - # ], - "per-commit-4-gpu-gb200": [ - TestFile("test_deepseek_v3_cutedsl_4gpu.py", 1800), - TestFile("test_disaggregation_aarch64.py", 300), - ], - "per-commit-4-gpu-deepep": [ - TestFile("ep/test_deepep_small.py", 531), - TestFile("ep/test_mooncake_ep_small.py", 660), - ], - "per-commit-8-gpu-h200-deepep": [ - TestFile("ep/test_deepep_large.py", 563), - ], # quantization_test suite migrated to test/registered/quant/ - "__not_in_ci__": [ - TestFile("test_release_memory_occupation.py", 200), # Temporarily disabled - TestFile("models/test_dummy_grok_models.py"), - TestFile("test_profile_v2.py"), - TestFile("models/test_ministral3_models.py"), - TestFile("test_mistral_large3_basic.py"), - TestFile("test_prefill_delayer.py"), - TestFile("test_fla_layernorm_guard.py"), - TestFile( - "models/test_qwen3_next_models_pcg.py" - ), # Disabled: intermittent failures, see #17039 - TestFile("ep/test_moriep_small.py"), - ], + # All CUDA tests migrated to test/registered/ + "__not_in_ci__": [], } # Add AMD tests @@ -89,9 +37,8 @@ suite_amd = { # TestFile("test_wave_attention_backend.py", 150), # Disabled temporarily, see https://github.com/sgl-project/sglang/issues/11127 # The time estimation for `test_int4fp8_moe.py` assumes `mistralai/Mixtral-8x7B-Instruct-v0.1` is already cached (running on 1xMI300X). ], - "per-commit-4-gpu-amd": [ - TestFile("test_pp_single_node.py", 150), - ], + # per-commit-4-gpu-amd migrated to test/registered/distributed/ using the CI registry system + "per-commit-4-gpu-amd": [], # NOTE: AMD nightly suites (nightly-amd, nightly-amd-vlm, nightly-amd-8-gpu) # have been migrated to test/registered/amd/nightly/ and are now managed # by test/run_suite.py using the registry system. diff --git a/test/srt/test_mistral_large3_basic.py b/test/srt/test_mistral_large3_basic.py deleted file mode 100644 index 2cd496ac2..000000000 --- a/test/srt/test_mistral_large3_basic.py +++ /dev/null @@ -1,89 +0,0 @@ -import os -import unittest -from types import SimpleNamespace - -from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_cuda_ci -from sglang.test.few_shot_gsm8k import run_eval as run_eval_few_shot_gsm8k -from sglang.test.send_one import BenchArgs, send_one_prompt -from sglang.test.test_utils import ( - DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, - DEFAULT_URL_FOR_TEST, - CustomTestCase, - is_in_ci, - popen_launch_server, - write_github_step_summary, -) - -register_cuda_ci(est_time=600, suite="nightly-8-gpu-b200", nightly=True) -MISTRAL_LARGE3_MODEL_PATH = "mistralai/Mistral-Large-3-675B-Instruct-2512" - - -class TestMistralLarge3Basic(CustomTestCase): - @classmethod - def setUpClass(cls): - # Set environment variable to disable JIT DeepGemm - os.environ["SGLANG_ENABLE_JIT_DEEPGEMM"] = "0" - - cls.model = MISTRAL_LARGE3_MODEL_PATH - cls.base_url = DEFAULT_URL_FOR_TEST - other_args = [ - "--tp", - "8", - "--attention-backend", - "trtllm_mla", - "--model-loader-extra-config", - '{"enable_multithread_load": true}', - "--chat-template", - "mistral", - ] - cls.process = popen_launch_server( - cls.model, - cls.base_url, - timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH * 5, - other_args=other_args, - ) - - @classmethod - def tearDownClass(cls): - kill_process_tree(cls.process.pid) - # Clean up environment variable - if "SGLANG_ENABLE_JIT_DEEPGEMM" in os.environ: - del os.environ["SGLANG_ENABLE_JIT_DEEPGEMM"] - - def test_a_gsm8k( - self, - ): # Append an "a" to make this test run first (alphabetically) to warm up the server - args = SimpleNamespace( - num_shots=8, - data_path=None, - num_questions=1400, - parallel=1400, - max_new_tokens=512, - host="http://127.0.0.1", - port=int(self.base_url.split(":")[-1]), - ) - metrics = run_eval_few_shot_gsm8k(args) - print(f"{metrics=}") - - if is_in_ci(): - write_github_step_summary( - f"### test_gsm8k (mistral-large-3)\n" f'{metrics["accuracy"]=:.3f}\n' - ) - self.assertGreater(metrics["accuracy"], 0.90) - - def test_bs_1_speed(self): - args = BenchArgs(port=int(self.base_url.split(":")[-1]), max_new_tokens=2048) - acc_length, speed = send_one_prompt(args) - - print(f"{speed=:.2f}") - - if is_in_ci(): - write_github_step_summary( - f"### test_bs_1_speed (mistral-large-3)\n" f"{speed=:.2f} token/s\n" - ) - self.assertGreater(speed, 50) - - -if __name__ == "__main__": - unittest.main()