diff --git a/.github/workflows/pr-test-xeon.yml b/.github/workflows/pr-test-xeon.yml index 8e10e955e..e5523786e 100644 --- a/.github/workflows/pr-test-xeon.yml +++ b/.github/workflows/pr-test-xeon.yml @@ -83,11 +83,35 @@ jobs: runs-on: ${{ matrix.runner }} strategy: + fail-fast: false matrix: include: + # GNR runs only the TP suite (needs >=6 NUMA nodes for --tp 6), + # full machine, no partitioning. 4 files: 3 TP + autoround. - runner: xeon-gnr - suite: base-b-test-cpu - partition_args: "" + role: gnr + suite: "base-b-tp-test-cpu" + name: gnr + + # Each SPR box (2 sockets / 2 NUMA, 32 cores each) is ONE job that + # runs two socket-pinned containers in parallel, each taking one + # partition of a 4-way split over the merged non-TP pool + # (base-b non-TP + base-c). Building once per job keeps both + # containers on the same locally-built image. + - runner: xeon-spr + role: spr + suite: "base-b-test-cpu,base-c-test-cpu" + name: spr1 + part_size: 4 + part_lo: 0 # socket0 + part_hi: 1 # socket1 + - runner: xeon-spr + role: spr + suite: "base-b-test-cpu,base-c-test-cpu" + name: spr2 + part_size: 4 + part_lo: 2 # socket0 + part_hi: 3 # socket1 steps: - name: Cleanup workspace run: | @@ -100,10 +124,13 @@ jobs: clean: false ref: ${{ inputs.ref || github.ref }} - - name: Build and Push + - name: Build image run: | - version=$(cat python/sglang/version.py | cut -d'"' -f2) - tag=v${version}-xeon + # Fixed tag (no SHA): a new build overwrites the previous image so a + # self-hosted box does not accumulate multi-GB images across PRs. + # --no-cache keeps the CPU image clean (past sgl-eval/accelerate gaps + # came from stale layers). One build per job; on SPR both socket + # containers reuse this locally-built image. PR_REPO=${{ github.event.pull_request.head.repo.clone_url }} PR_HEAD_REF=${{ github.head_ref }} @@ -112,37 +139,89 @@ jobs: ${PR_HEAD_REF:+--build-arg VER_SGLANG=$PR_HEAD_REF} \ . -f docker/xeon.Dockerfile -t sglang_xeon --no-cache - - name: Run container + # ==================== GNR: full machine, TP suite ==================== # + - name: Run container (GNR) + if: matrix.role == 'gnr' run: | + docker rm -f ci_sglang_${{ matrix.name }} || true docker run -dt \ -v ${{ github.workspace }}:/sglang-checkout/ --ipc=host \ -v $HOME/.cache/huggingface:/root/.cache/huggingface \ -e HF_TOKEN="$(cat ~/huggingface_token.txt)" \ - --name ci_sglang_${{ matrix.runner }} \ + --name ci_sglang_${{ matrix.name }} \ sglang_xeon - - name: Check AMX support - id: check_amx + - name: Check AMX support (GNR) + if: matrix.role == 'gnr' timeout-minutes: 5 run: | - docker exec -w /sglang-checkout/ ci_sglang_${{ matrix.runner }} \ + docker exec -w /sglang-checkout/ ci_sglang_${{ matrix.name }} \ bash -c "source /opt/.venv/bin/activate && python3 -c 'import torch; import sgl_kernel; assert torch.cpu._is_amx_tile_supported(); assert hasattr(torch.ops.sgl_kernel, \"convert_weight_packed\"); '" - - name: Run unit tests + - name: Run unit tests (GNR) + if: matrix.role == 'gnr' timeout-minutes: 120 run: | - docker exec -w /sglang-checkout/ ci_sglang_${{ matrix.runner }} \ - bash -c "source /opt/.venv/bin/activate && cd ./test && python3 run_suite.py --hw cpu --suite ${{ matrix.suite }} ${{ matrix.partition_args }}" + docker exec -w /sglang-checkout/ ci_sglang_${{ matrix.name }} \ + bash -c "source /opt/.venv/bin/activate && cd ./test && python3 run_suite.py --hw cpu --suite ${{ matrix.suite }} --timeout-from-est-time" + # ============ SPR: two socket-pinned containers in parallel ========== # + - name: Run unit tests (SPR, two sockets in parallel) + if: matrix.role == 'spr' + timeout-minutes: 120 + run: | + set -uo pipefail + HF_TOKEN_VAL="$(cat ~/huggingface_token.txt)" + + # $1 socket id, $2 cpuset-cpus, $3 cpuset-mems, $4 partition id + run_socket () { + local sid=$1 cpus=$2 mems=$3 pid=$4 + local cname=ci_sglang_${{ matrix.name }}_s${sid} + docker rm -f "$cname" >/dev/null 2>&1 || true + docker run -dt \ + --cpuset-cpus="$cpus" --cpuset-mems="$mems" \ + -v ${{ github.workspace }}:/sglang-checkout/ --ipc=host \ + -v $HOME/.cache/huggingface:/root/.cache/huggingface \ + -e HF_TOKEN="$HF_TOKEN_VAL" \ + -e SGLANG_CPU_OMP_THREADS_BIND="$cpus" \ + --name "$cname" \ + sglang_xeon + # AMX sanity on this socket, then the partition it owns. + docker exec -w /sglang-checkout/ "$cname" bash -c \ + "source /opt/.venv/bin/activate && python3 -c 'import torch; import sgl_kernel; assert torch.cpu._is_amx_tile_supported(); assert hasattr(torch.ops.sgl_kernel, \"convert_weight_packed\")' && \ + cd ./test && python3 run_suite.py --hw cpu --suite ${{ matrix.suite }} --auto-partition-id $pid --auto-partition-size ${{ matrix.part_size }} --timeout-from-est-time" + } + + # socket0 -> part_lo, socket1 -> part_hi; run concurrently, wait both. + # Runners have hyper-threading OFF: 64 physical cores = CPUs 0-63, + # NUMA0=0-31, NUMA1=32-63 (no sibling range). + run_socket 0 "0-31" 0 ${{ matrix.part_lo }} > s0.log 2>&1 & + P0=$! + run_socket 1 "32-63" 1 ${{ matrix.part_hi }} > s1.log 2>&1 & + P1=$! + + rc=0 + wait $P0 || rc=1 + wait $P1 || rc=1 + + echo "==================== socket0 (partition ${{ matrix.part_lo }}) ====================" + cat s0.log || true + echo "==================== socket1 (partition ${{ matrix.part_hi }}) ====================" + cat s1.log || true + exit $rc + + # ============================ Common ================================= # - name: Change permission + if: always() timeout-minutes: 2 run: | - docker exec -u root ci_sglang_${{ matrix.runner }} bash -c " - rm -rf /tmp/ci-home && - chown -R $(id -u):$(id -g) /sglang-checkout/ 2>/dev/null || true - " + for c in ci_sglang_${{ matrix.name }} ci_sglang_${{ matrix.name }}_s0 ci_sglang_${{ matrix.name }}_s1; do + docker exec -u root "$c" bash -c "rm -rf /tmp/ci-home && chown -R $(id -u):$(id -g) /sglang-checkout/ 2>/dev/null || true" 2>/dev/null || true + done - name: Cleanup container if: always() run: | - docker rm -f ci_sglang_${{ matrix.runner }} || true + for c in ci_sglang_${{ matrix.name }} ci_sglang_${{ matrix.name }}_s0 ci_sglang_${{ matrix.name }}_s1; do + docker rm -f "$c" || true + done diff --git a/docker/xeon.Dockerfile b/docker/xeon.Dockerfile index 1706ec933..2a45c17c5 100644 --- a/docker/xeon.Dockerfile +++ b/docker/xeon.Dockerfile @@ -39,7 +39,7 @@ RUN source /opt/.venv/bin/activate && \ git checkout ${VER_SGLANG} && \ cd python && \ cp pyproject_cpu.toml pyproject.toml && \ - uv pip install . && \ + uv pip install ".[diffusion]" && \ cd sglang/kernels/aot && \ cp pyproject_cpu.toml pyproject.toml && \ uv pip install . && \ diff --git a/test/registered/bench_fn/test_benchmark_datasets_api.py b/test/registered/bench_fn/test_benchmark_datasets_api.py index 8937ea29a..ac7671f74 100644 --- a/test/registered/bench_fn/test_benchmark_datasets_api.py +++ b/test/registered/bench_fn/test_benchmark_datasets_api.py @@ -60,7 +60,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=40, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=46, suite="base-c-test-cpu") class _DummyTokenTensor: diff --git a/test/registered/cpu/quant/test_autoround.py b/test/registered/cpu/quant/test_autoround.py index 630432a7a..767196c3d 100644 --- a/test/registered/cpu/quant/test_autoround.py +++ b/test/registered/cpu/quant/test_autoround.py @@ -24,7 +24,7 @@ from sglang.test.test_utils import ( popen_launch_server, ) -register_cpu_ci(est_time=330, suite="base-b-test-cpu") +register_cpu_ci(est_time=183, suite="base-b-tp-test-cpu") class TestAutoRoundCPUConfig(CustomTestCase): diff --git a/test/registered/cpu/test_activation.py b/test/registered/cpu/test_activation.py index d8e966494..7b6cc893c 100644 --- a/test/registered/cpu/test_activation.py +++ b/test/registered/cpu/test_activation.py @@ -8,7 +8,7 @@ from sglang.srt.server_args import ServerArgs, set_global_server_args_for_schedu from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import GeluAndMul, SiluAndMul, precision -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=9, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_binding.py b/test/registered/cpu/test_binding.py index c8bb50d8d..ff9195280 100644 --- a/test/registered/cpu/test_binding.py +++ b/test/registered/cpu/test_binding.py @@ -8,7 +8,7 @@ kernel = torch.ops.sgl_kernel from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=6, suite="base-b-tp-test-cpu") class TestBinding(CustomTestCase): diff --git a/test/registered/cpu/test_bmm.py b/test/registered/cpu/test_bmm.py index dbcdb9e79..f1399e9a5 100644 --- a/test/registered/cpu/test_bmm.py +++ b/test/registered/cpu/test_bmm.py @@ -11,7 +11,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=13, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_causal_conv1d.py b/test/registered/cpu/test_causal_conv1d.py index d0999401f..58e8454d5 100644 --- a/test/registered/cpu/test_causal_conv1d.py +++ b/test/registered/cpu/test_causal_conv1d.py @@ -9,7 +9,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import parametrize, precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=7, suite="base-b-test-cpu") causal_conv1d_weight_pack = torch.ops.sgl_kernel.causal_conv1d_weight_pack causal_conv1d_fwd = torch.ops.sgl_kernel.causal_conv1d_fwd_cpu diff --git a/test/registered/cpu/test_comm.py b/test/registered/cpu/test_comm.py index 181aaf239..4cc175bf9 100644 --- a/test/registered/cpu/test_comm.py +++ b/test/registered/cpu/test_comm.py @@ -13,7 +13,7 @@ import torch.multiprocessing as mp from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase, find_available_port -register_cpu_ci(est_time=30, suite="base-b-test-cpu") +register_cpu_ci(est_time=43, suite="base-b-test-cpu") def run_distributed_test(rank, world_size, master_port, output_writer, fn): diff --git a/test/registered/cpu/test_cpu_graph.py b/test/registered/cpu/test_cpu_graph.py index ba95bc74e..0ed2bcaf2 100644 --- a/test/registered/cpu/test_cpu_graph.py +++ b/test/registered/cpu/test_cpu_graph.py @@ -21,7 +21,7 @@ from sglang.test.test_utils import ( popen_launch_server, ) -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=315, suite="base-b-tp-test-cpu") class TestCPUGraph(CustomTestCase): diff --git a/test/registered/cpu/test_extend.py b/test/registered/cpu/test_extend.py index e6bc055be..99d40e446 100644 --- a/test/registered/cpu/test_extend.py +++ b/test/registered/cpu/test_extend.py @@ -7,7 +7,7 @@ from torch.nn.functional import scaled_dot_product_attention from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=7, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_flash_attn.py b/test/registered/cpu/test_flash_attn.py index efe07c069..f2efd2eb7 100644 --- a/test/registered/cpu/test_flash_attn.py +++ b/test/registered/cpu/test_flash_attn.py @@ -8,7 +8,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import parametrize, precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=54, suite="base-b-test-cpu") flash_attn_varlen_func = torch.ops.sgl_kernel.flash_attn_varlen_func diff --git a/test/registered/cpu/test_gemm.py b/test/registered/cpu/test_gemm.py index 13e22065d..64dfe34dc 100644 --- a/test/registered/cpu/test_gemm.py +++ b/test/registered/cpu/test_gemm.py @@ -18,7 +18,7 @@ from sglang.test.cpu_test_utils import ( ) from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=9, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_intel_amx_attention_backend_a.py b/test/registered/cpu/test_intel_amx_attention_backend_a.py index 11214de23..9037d4f50 100644 --- a/test/registered/cpu/test_intel_amx_attention_backend_a.py +++ b/test/registered/cpu/test_intel_amx_attention_backend_a.py @@ -21,7 +21,7 @@ from sglang.test.test_utils import ( popen_launch_server, ) -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=685, suite="base-b-tp-test-cpu") class TestIntelAMXAttnBackend(CustomTestCase): diff --git a/test/registered/cpu/test_intel_amx_attention_backend_b.py b/test/registered/cpu/test_intel_amx_attention_backend_b.py index 9b1db54ad..c504cf0c9 100644 --- a/test/registered/cpu/test_intel_amx_attention_backend_b.py +++ b/test/registered/cpu/test_intel_amx_attention_backend_b.py @@ -14,7 +14,7 @@ from sglang.test.test_utils import ( intel_amx_benchmark, ) -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=47, suite="base-b-test-cpu") class TestIntelAMXAttnBackendQuant(CustomTestCase): diff --git a/test/registered/cpu/test_intel_amx_attention_backend_c.py b/test/registered/cpu/test_intel_amx_attention_backend_c.py index bf528df45..ce1621f59 100644 --- a/test/registered/cpu/test_intel_amx_attention_backend_c.py +++ b/test/registered/cpu/test_intel_amx_attention_backend_c.py @@ -14,7 +14,7 @@ from sglang.test.test_utils import ( intel_amx_benchmark, ) -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=477, suite="base-b-tp-test-cpu") class TestIntelAMXAttnBackendQuant(CustomTestCase): diff --git a/test/registered/cpu/test_mamba.py b/test/registered/cpu/test_mamba.py index e2e933f01..baaee7ec5 100644 --- a/test/registered/cpu/test_mamba.py +++ b/test/registered/cpu/test_mamba.py @@ -9,7 +9,7 @@ from torch.nn.functional import softplus from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=7, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_mla.py b/test/registered/cpu/test_mla.py index 3fefb9be3..13e441382 100644 --- a/test/registered/cpu/test_mla.py +++ b/test/registered/cpu/test_mla.py @@ -8,7 +8,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=8, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_moe.py b/test/registered/cpu/test_moe.py index 4c903a5b7..1c7fc7f26 100644 --- a/test/registered/cpu/test_moe.py +++ b/test/registered/cpu/test_moe.py @@ -34,7 +34,7 @@ from sglang.test.cpu_test_utils import ( unpack_and_dequant_awq, ) -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=7, suite="base-b-test-cpu") def run_fused_experts( diff --git a/test/registered/cpu/test_norm.py b/test/registered/cpu/test_norm.py index 7ee4eb8ad..0ebfbb818 100644 --- a/test/registered/cpu/test_norm.py +++ b/test/registered/cpu/test_norm.py @@ -8,7 +8,7 @@ import torch from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import make_non_contiguous, precision -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=5, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_qkv_proj_with_rope.py b/test/registered/cpu/test_qkv_proj_with_rope.py index f4f4ee490..2c0cda2e9 100644 --- a/test/registered/cpu/test_qkv_proj_with_rope.py +++ b/test/registered/cpu/test_qkv_proj_with_rope.py @@ -14,7 +14,7 @@ from sglang.test.cpu_test_utils import ( ) from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=7, suite="base-b-test-cpu") convert_weight_packed = torch.ops.sgl_kernel.convert_weight_packed qkv_proj_with_rope = torch.ops.sgl_kernel.qkv_proj_with_rope diff --git a/test/registered/cpu/test_qwen3.py b/test/registered/cpu/test_qwen3.py index 0467ba6e1..202bdf298 100644 --- a/test/registered/cpu/test_qwen3.py +++ b/test/registered/cpu/test_qwen3.py @@ -8,7 +8,7 @@ from sglang.srt.utils import is_host_cpu_arm64 from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=5, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_rank_consensus_checker.py b/test/registered/cpu/test_rank_consensus_checker.py index edcdd0488..254baa618 100644 --- a/test/registered/cpu/test_rank_consensus_checker.py +++ b/test/registered/cpu/test_rank_consensus_checker.py @@ -25,7 +25,7 @@ from sglang.srt.utils.rank_consensus_checker import ( from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase, find_available_port -register_cpu_ci(est_time=30, suite="base-b-test-cpu") +register_cpu_ci(est_time=193, suite="base-b-test-cpu") def run_distributed_test( diff --git a/test/registered/cpu/test_request_decompression.py b/test/registered/cpu/test_request_decompression.py index e27d30923..003a57d6d 100644 --- a/test/registered/cpu/test_request_decompression.py +++ b/test/registered/cpu/test_request_decompression.py @@ -8,7 +8,7 @@ from sglang.srt.entrypoints.http_request_decompression import ( ) from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=5, suite="base-b-test-cpu") PAYLOAD = b'{"text":"hello world","n":7}' COMPRESSED = zstandard.ZstdCompressor().compress(PAYLOAD) diff --git a/test/registered/cpu/test_request_headers.py b/test/registered/cpu/test_request_headers.py index cd27cc68f..5e0504b08 100644 --- a/test/registered/cpu/test_request_headers.py +++ b/test/registered/cpu/test_request_headers.py @@ -7,7 +7,7 @@ from starlette.datastructures import Headers from sglang.srt.entrypoints.request_headers import apply_header_overrides from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=4, suite="base-b-test-cpu") def _obj(): diff --git a/test/registered/cpu/test_rope.py b/test/registered/cpu/test_rope.py index b33590221..d5b24e40a 100644 --- a/test/registered/cpu/test_rope.py +++ b/test/registered/cpu/test_rope.py @@ -17,7 +17,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=33, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_server_args_backend.py b/test/registered/cpu/test_server_args_backend.py index 02c9af632..0f6cb7dc9 100644 --- a/test/registered/cpu/test_server_args_backend.py +++ b/test/registered/cpu/test_server_args_backend.py @@ -7,7 +7,7 @@ from unittest.mock import patch from sglang.srt.server_args import ServerArgs from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=6, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") diff --git a/test/registered/cpu/test_shared_expert.py b/test/registered/cpu/test_shared_expert.py index 5b18dbe69..a2a8bbe41 100644 --- a/test/registered/cpu/test_shared_expert.py +++ b/test/registered/cpu/test_shared_expert.py @@ -20,7 +20,7 @@ from sglang.test.cpu_test_utils import ( ) from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=8, suite="base-b-test-cpu") torch.manual_seed(1234) diff --git a/test/registered/cpu/test_spec_kernels.py b/test/registered/cpu/test_spec_kernels.py index bc330425c..f7460112b 100644 --- a/test/registered/cpu/test_spec_kernels.py +++ b/test/registered/cpu/test_spec_kernels.py @@ -9,7 +9,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.cpu_test_utils import precision from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=20, suite="base-b-test-cpu") +register_cpu_ci(est_time=6, suite="base-b-test-cpu") def _topk1_chain_inputs(bs, num_steps): diff --git a/test/registered/cpu/test_store_cache.py b/test/registered/cpu/test_store_cache.py index bfca54310..7f7b1a451 100644 --- a/test/registered/cpu/test_store_cache.py +++ b/test/registered/cpu/test_store_cache.py @@ -6,7 +6,7 @@ import torch from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=25, suite="base-b-test-cpu") +register_cpu_ci(est_time=14, suite="base-b-test-cpu") torch.manual_seed(42) diff --git a/test/registered/cpu/test_subblock_sparse_attention.py b/test/registered/cpu/test_subblock_sparse_attention.py index d86de3831..ad76b1267 100644 --- a/test/registered/cpu/test_subblock_sparse_attention.py +++ b/test/registered/cpu/test_subblock_sparse_attention.py @@ -13,7 +13,7 @@ from sglang.multimodal_gen.runtime.layers.attention.backends.subblock_sparse_att from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=9, suite="base-b-test-cpu") class TestSubBlockSparseAttentionDispatch(CustomTestCase): diff --git a/test/registered/cpu/test_topk.py b/test/registered/cpu/test_topk.py index b855dc9d3..e3f469b40 100644 --- a/test/registered/cpu/test_topk.py +++ b/test/registered/cpu/test_topk.py @@ -15,7 +15,7 @@ from sglang.srt.models.llama4 import Llama4MoE from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-b-test-cpu") +register_cpu_ci(est_time=30, suite="base-b-test-cpu") register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64") diff --git a/test/registered/debug_utils/comparator/aligner/entrypoint/test_executor.py b/test/registered/debug_utils/comparator/aligner/entrypoint/test_executor.py index 67a81327c..46d149a71 100644 --- a/test/registered/debug_utils/comparator/aligner/entrypoint/test_executor.py +++ b/test/registered/debug_utils/comparator/aligner/entrypoint/test_executor.py @@ -34,7 +34,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestExecuteSubPlans: diff --git a/test/registered/debug_utils/comparator/aligner/entrypoint/test_planner.py b/test/registered/debug_utils/comparator/aligner/entrypoint/test_planner.py index fa47521e3..459df88cf 100644 --- a/test/registered/debug_utils/comparator/aligner/entrypoint/test_planner.py +++ b/test/registered/debug_utils/comparator/aligner/entrypoint/test_planner.py @@ -26,7 +26,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _make_meta( diff --git a/test/registered/debug_utils/comparator/aligner/reorderer/test_executor.py b/test/registered/debug_utils/comparator/aligner/reorderer/test_executor.py index 88f7fa1ba..08e2e5c2d 100644 --- a/test/registered/debug_utils/comparator/aligner/reorderer/test_executor.py +++ b/test/registered/debug_utils/comparator/aligner/reorderer/test_executor.py @@ -27,7 +27,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") def _zigzag_order(cp_size: int) -> list[int]: diff --git a/test/registered/debug_utils/comparator/aligner/reorderer/test_planner.py b/test/registered/debug_utils/comparator/aligner/reorderer/test_planner.py index 2c8ef9ac9..cc4851cab 100644 --- a/test/registered/debug_utils/comparator/aligner/reorderer/test_planner.py +++ b/test/registered/debug_utils/comparator/aligner/reorderer/test_planner.py @@ -27,7 +27,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestComputeReordererPlans: diff --git a/test/registered/debug_utils/comparator/aligner/test_axis_aligner.py b/test/registered/debug_utils/comparator/aligner/test_axis_aligner.py index 5a2049384..594e50cf2 100644 --- a/test/registered/debug_utils/comparator/aligner/test_axis_aligner.py +++ b/test/registered/debug_utils/comparator/aligner/test_axis_aligner.py @@ -18,7 +18,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestComputeAxisAlignerPlan: diff --git a/test/registered/debug_utils/comparator/aligner/token_aligner/test_aux_plugins.py b/test/registered/debug_utils/comparator/aligner/token_aligner/test_aux_plugins.py index 922e60ee9..2621cd2f5 100644 --- a/test/registered/debug_utils/comparator/aligner/token_aligner/test_aux_plugins.py +++ b/test/registered/debug_utils/comparator/aligner/token_aligner/test_aux_plugins.py @@ -17,7 +17,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import TokenLayout from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") _sglang_plugin = _SGLangPlugin() _megatron_plugin = _MegatronPlugin() diff --git a/test/registered/debug_utils/comparator/aligner/token_aligner/test_concat_steps.py b/test/registered/debug_utils/comparator/aligner/token_aligner/test_concat_steps.py index 6b7c25a10..fae03b4a2 100644 --- a/test/registered/debug_utils/comparator/aligner/token_aligner/test_concat_steps.py +++ b/test/registered/debug_utils/comparator/aligner/token_aligner/test_concat_steps.py @@ -11,7 +11,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestExecuteConcat: diff --git a/test/registered/debug_utils/comparator/aligner/token_aligner/test_executor.py b/test/registered/debug_utils/comparator/aligner/token_aligner/test_executor.py index c0134904f..a8f60dcf7 100644 --- a/test/registered/debug_utils/comparator/aligner/token_aligner/test_executor.py +++ b/test/registered/debug_utils/comparator/aligner/token_aligner/test_executor.py @@ -30,7 +30,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _named(tensor: torch.Tensor, names: list[str]) -> torch.Tensor: diff --git a/test/registered/debug_utils/comparator/aligner/token_aligner/test_planner.py b/test/registered/debug_utils/comparator/aligner/token_aligner/test_planner.py index 68a156296..1e3758623 100644 --- a/test/registered/debug_utils/comparator/aligner/token_aligner/test_planner.py +++ b/test/registered/debug_utils/comparator/aligner/token_aligner/test_planner.py @@ -24,7 +24,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=30, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestBuildTokenIndexSGLangThd: diff --git a/test/registered/debug_utils/comparator/aligner/unsharder/test_executor.py b/test/registered/debug_utils/comparator/aligner/unsharder/test_executor.py index 3627dce7f..7acd25be7 100644 --- a/test/registered/debug_utils/comparator/aligner/unsharder/test_executor.py +++ b/test/registered/debug_utils/comparator/aligner/unsharder/test_executor.py @@ -31,7 +31,7 @@ from sglang.srt.debug_utils.comparator.output_types import ReplicatedCheckResult from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _name_tensors( diff --git a/test/registered/debug_utils/comparator/aligner/unsharder/test_parallel_info.py b/test/registered/debug_utils/comparator/aligner/unsharder/test_parallel_info.py index 280cb5b3d..7b23e3618 100644 --- a/test/registered/debug_utils/comparator/aligner/unsharder/test_parallel_info.py +++ b/test/registered/debug_utils/comparator/aligner/unsharder/test_parallel_info.py @@ -10,7 +10,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestNormalizeParallelInfo: diff --git a/test/registered/debug_utils/comparator/aligner/unsharder/test_planner.py b/test/registered/debug_utils/comparator/aligner/unsharder/test_planner.py index 63965dcf2..f2f6a52a4 100644 --- a/test/registered/debug_utils/comparator/aligner/unsharder/test_planner.py +++ b/test/registered/debug_utils/comparator/aligner/unsharder/test_planner.py @@ -20,7 +20,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ParallelAxis, parse_dims from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestComputeUnsharderPlan: diff --git a/test/registered/debug_utils/comparator/dims_spec/test_dim_parser.py b/test/registered/debug_utils/comparator/dims_spec/test_dim_parser.py index e5d5dcdd9..e6f69b9df 100644 --- a/test/registered/debug_utils/comparator/dims_spec/test_dim_parser.py +++ b/test/registered/debug_utils/comparator/dims_spec/test_dim_parser.py @@ -13,7 +13,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=5, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestParseDim: diff --git a/test/registered/debug_utils/comparator/dims_spec/test_dims_parser.py b/test/registered/debug_utils/comparator/dims_spec/test_dims_parser.py index 94eaed994..7aa0b18da 100644 --- a/test/registered/debug_utils/comparator/dims_spec/test_dims_parser.py +++ b/test/registered/debug_utils/comparator/dims_spec/test_dims_parser.py @@ -16,7 +16,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=5, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestSingletonDimUtilFilterOut: diff --git a/test/registered/debug_utils/comparator/dims_spec/test_tensor_naming.py b/test/registered/debug_utils/comparator/dims_spec/test_tensor_naming.py index fdfcd5e9b..cdebcf010 100644 --- a/test/registered/debug_utils/comparator/dims_spec/test_tensor_naming.py +++ b/test/registered/debug_utils/comparator/dims_spec/test_tensor_naming.py @@ -15,7 +15,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=5, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestFindDimIndex: diff --git a/test/registered/debug_utils/comparator/dims_spec/test_types.py b/test/registered/debug_utils/comparator/dims_spec/test_types.py index 85506966f..7f36aead0 100644 --- a/test/registered/debug_utils/comparator/dims_spec/test_types.py +++ b/test/registered/debug_utils/comparator/dims_spec/test_types.py @@ -10,7 +10,7 @@ from sglang.srt.debug_utils.comparator.dims_spec import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=5, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestDimConstants: diff --git a/test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py b/test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py index dd7aff671..9a9e0c1fa 100644 --- a/test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py +++ b/test/registered/debug_utils/comparator/tensor_comparator/test_comparator.py @@ -17,7 +17,7 @@ from sglang.srt.debug_utils.comparator.threshold_dsl import DiffThresholdRule from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=20, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestComputeTensorInfo: diff --git a/test/registered/debug_utils/comparator/tensor_comparator/test_types.py b/test/registered/debug_utils/comparator/tensor_comparator/test_types.py index a1c6d6b20..46f19fbcf 100644 --- a/test/registered/debug_utils/comparator/tensor_comparator/test_types.py +++ b/test/registered/debug_utils/comparator/tensor_comparator/test_types.py @@ -22,7 +22,7 @@ from sglang.srt.debug_utils.comparator.tensor_comparator.types import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _make_stats(**overrides) -> TensorStats: diff --git a/test/registered/debug_utils/comparator/test_log_sink.py b/test/registered/debug_utils/comparator/test_log_sink.py index bb664c9a4..977f8fee3 100644 --- a/test/registered/debug_utils/comparator/test_log_sink.py +++ b/test/registered/debug_utils/comparator/test_log_sink.py @@ -12,7 +12,7 @@ from sglang.srt.debug_utils.comparator.report_sink import report_sink from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") def _make_error_log(**overrides) -> ErrorLog: diff --git a/test/registered/debug_utils/comparator/test_meta_overrider.py b/test/registered/debug_utils/comparator/test_meta_overrider.py index 21b8900f5..4a42045a6 100644 --- a/test/registered/debug_utils/comparator/test_meta_overrider.py +++ b/test/registered/debug_utils/comparator/test_meta_overrider.py @@ -17,7 +17,7 @@ from sglang.srt.debug_utils.comparator.meta_overrider import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") # ───────────────────── Unit: MetaOverrideRule ───────────────────── diff --git a/test/registered/debug_utils/comparator/test_model_validation.py b/test/registered/debug_utils/comparator/test_model_validation.py index 74d3d91b8..3d8ef5671 100644 --- a/test/registered/debug_utils/comparator/test_model_validation.py +++ b/test/registered/debug_utils/comparator/test_model_validation.py @@ -45,7 +45,7 @@ from sglang.srt.debug_utils.comparator.utils import Pair, _check_equal_lengths from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestCheckEqualLengths: diff --git a/test/registered/debug_utils/comparator/test_preset.py b/test/registered/debug_utils/comparator/test_preset.py index 5d699c632..91b4a92dd 100644 --- a/test/registered/debug_utils/comparator/test_preset.py +++ b/test/registered/debug_utils/comparator/test_preset.py @@ -4,7 +4,7 @@ from sglang.srt.debug_utils.comparator.preset import PRESETS, expand_preset from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=5, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestExpandPreset: diff --git a/test/registered/debug_utils/comparator/test_utils.py b/test/registered/debug_utils/comparator/test_utils.py index 4201e5aea..dbf79755e 100644 --- a/test/registered/debug_utils/comparator/test_utils.py +++ b/test/registered/debug_utils/comparator/test_utils.py @@ -18,7 +18,7 @@ from sglang.srt.debug_utils.comparator.utils import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class TestCalcRelDiff: diff --git a/test/registered/debug_utils/source_patcher/test_code_patcher.py b/test/registered/debug_utils/source_patcher/test_code_patcher.py index 327c5e446..71330cb5b 100644 --- a/test/registered/debug_utils/source_patcher/test_code_patcher.py +++ b/test/registered/debug_utils/source_patcher/test_code_patcher.py @@ -11,7 +11,7 @@ from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchSpec from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module" diff --git a/test/registered/debug_utils/source_patcher/test_dumper_integration.py b/test/registered/debug_utils/source_patcher/test_dumper_integration.py index 83b226486..7f47915ea 100644 --- a/test/registered/debug_utils/source_patcher/test_dumper_integration.py +++ b/test/registered/debug_utils/source_patcher/test_dumper_integration.py @@ -9,7 +9,7 @@ from sglang.srt.debug_utils.dumper import DumperConfig, _Dumper from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module" diff --git a/test/registered/debug_utils/source_patcher/test_source_editor.py b/test/registered/debug_utils/source_patcher/test_source_editor.py index daf485f18..e8471af86 100644 --- a/test/registered/debug_utils/source_patcher/test_source_editor.py +++ b/test/registered/debug_utils/source_patcher/test_source_editor.py @@ -6,7 +6,7 @@ from sglang.srt.debug_utils.source_patcher.types import EditSpec, PatchApplicati from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") class TestApplyEdits: diff --git a/test/registered/debug_utils/test_crash_dump.py b/test/registered/debug_utils/test_crash_dump.py index a716eb30d..7a825d4c5 100644 --- a/test/registered/debug_utils/test_crash_dump.py +++ b/test/registered/debug_utils/test_crash_dump.py @@ -23,7 +23,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=70, stage="nightly", runner_config="1-gpu-large") register_amd_ci(est_time=40, suite="nightly-amd-1-gpu", nightly=True) -register_cpu_ci(est_time=225, suite="base-c-test-cpu") +register_cpu_ci(est_time=48, suite="base-c-test-cpu") class TestCrashDump(CustomTestCase): diff --git a/test/registered/debug_utils/test_schedule_simulator.py b/test/registered/debug_utils/test_schedule_simulator.py index 045e46a3d..2549e68df 100644 --- a/test/registered/debug_utils/test_schedule_simulator.py +++ b/test/registered/debug_utils/test_schedule_simulator.py @@ -26,7 +26,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=120, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=338, suite="base-c-test-cpu") +register_cpu_ci(est_time=357, suite="base-c-test-cpu") # ==================== Non-E2E Tests ==================== diff --git a/test/registered/debug_utils/test_soft_watchdog.py b/test/registered/debug_utils/test_soft_watchdog.py index 8a9030049..fa2f0c6b2 100644 --- a/test/registered/debug_utils/test_soft_watchdog.py +++ b/test/registered/debug_utils/test_soft_watchdog.py @@ -19,7 +19,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=240, stage="nightly", runner_config="1-gpu-large") register_amd_ci(est_time=120, suite="nightly-amd-1-gpu", nightly=True) -register_cpu_ci(est_time=622, suite="base-c-test-cpu") +register_cpu_ci(est_time=237, suite="base-c-test-cpu") class BaseTestSoftWatchdog: diff --git a/test/registered/function_call/test_kimik2_detector.py b/test/registered/function_call/test_kimik2_detector.py index 8a5228edc..b3e3011e0 100644 --- a/test/registered/function_call/test_kimik2_detector.py +++ b/test/registered/function_call/test_kimik2_detector.py @@ -12,7 +12,7 @@ from sglang.srt.parser.reasoning_parser import KimiK2Detector as KimiK2Reasoning from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(5, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") def _make_tool(name, parameters=None): diff --git a/test/registered/input_embedding/test_input_embeddings.py b/test/registered/input_embedding/test_input_embeddings.py index f9ba44c0c..115d548aa 100644 --- a/test/registered/input_embedding/test_input_embeddings.py +++ b/test/registered/input_embedding/test_input_embeddings.py @@ -7,7 +7,11 @@ import requests from transformers import AutoModelForCausalLM, AutoTokenizer from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -18,6 +22,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=42, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=38, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=58, suite="base-c-test-cpu") class TestInputEmbeds(CustomTestCase): diff --git a/test/registered/input_embedding/test_input_embeds_chunked.py b/test/registered/input_embedding/test_input_embeds_chunked.py index cfaa353b0..5e1ce4a5d 100644 --- a/test/registered/input_embedding/test_input_embeds_chunked.py +++ b/test/registered/input_embedding/test_input_embeds_chunked.py @@ -21,7 +21,11 @@ from transformers import AutoModelForCausalLM, AutoTokenizer from sglang.srt.environ import envs from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -32,6 +36,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=43, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=43, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=54, suite="base-c-test-cpu") CHUNKED_PREFILL_SIZE = 256 diff --git a/test/registered/kv_canary/test_e2e_base.py b/test/registered/kv_canary/test_e2e_base.py index 3581895a7..838ba7ad2 100644 --- a/test/registered/kv_canary/test_e2e_base.py +++ b/test/registered/kv_canary/test_e2e_base.py @@ -8,7 +8,7 @@ from sglang.test.kv_canary.e2e_base import ( ) from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=1, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestCanaryE2EBase(CustomTestCase): diff --git a/test/registered/kv_canary/test_self_unit_e2e_base.py b/test/registered/kv_canary/test_self_unit_e2e_base.py index 3fb176eae..b052f22c0 100644 --- a/test/registered/kv_canary/test_self_unit_e2e_base.py +++ b/test/registered/kv_canary/test_self_unit_e2e_base.py @@ -8,7 +8,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.kv_canary.e2e_base import CanaryE2EBase from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=5, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") _GOOD_LINE: str = SwaDivergenceLog( diff --git a/test/registered/lora/test_lora_openai_api.py b/test/registered/lora/test_lora_openai_api.py index f71acec43..1897c0113 100644 --- a/test/registered/lora/test_lora_openai_api.py +++ b/test/registered/lora/test_lora_openai_api.py @@ -13,7 +13,7 @@ from sglang.srt.server_args import ServerArgs from sglang.test.ci.ci_register import register_amd_ci, register_cpu_ci register_amd_ci(est_time=30, suite="nightly-amd-1-gpu", nightly=True) -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") class MockTokenizerManager: diff --git a/test/registered/model_loading/test_external_models.py b/test/registered/model_loading/test_external_models.py index 92cb8e472..f72d70e3b 100644 --- a/test/registered/model_loading/test_external_models.py +++ b/test/registered/model_loading/test_external_models.py @@ -11,7 +11,7 @@ from sglang.test.test_utils import CustomTestCase register_cuda_ci(est_time=29, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=45, suite="stage-b-test-1-gpu-small-amd") -register_cpu_ci(est_time=203, suite="base-c-test-cpu") +register_cpu_ci(est_time=32, suite="base-c-test-cpu") class TestExternalModels(CustomTestCase): diff --git a/test/registered/models_e2e/test_transformers_backend_eval.py b/test/registered/models_e2e/test_transformers_backend_eval.py index 9ebd5bbe1..5da8d2551 100644 --- a/test/registered/models_e2e/test_transformers_backend_eval.py +++ b/test/registered/models_e2e/test_transformers_backend_eval.py @@ -13,7 +13,7 @@ from sglang.test.server_fixtures.default_fixture import DefaultServerBase register_cuda_ci(est_time=48, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=48, suite="stage-b-test-1-gpu-small-amd") -register_cpu_ci(est_time=320, suite="base-c-test-cpu") +register_cpu_ci(est_time=206, suite="base-c-test-cpu") class TestTransformersBackendEval(DefaultServerBase): diff --git a/test/registered/moe/test_hash_topk.py b/test/registered/moe/test_hash_topk.py index 93452911f..c8e14c467 100644 --- a/test/registered/moe/test_hash_topk.py +++ b/test/registered/moe/test_hash_topk.py @@ -15,7 +15,7 @@ from sglang.srt.runtime_context import get_parallel from sglang.srt.server_args import ServerArgs, set_global_server_args_for_scheduler from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=5, suite="base-b-test-cpu") +register_cpu_ci(est_time=6, suite="base-b-test-cpu") @pytest.fixture(autouse=True) diff --git a/test/registered/observability/test_priority_metrics.py b/test/registered/observability/test_priority_metrics.py index 31eefc299..5a7104813 100644 --- a/test/registered/observability/test_priority_metrics.py +++ b/test/registered/observability/test_priority_metrics.py @@ -26,7 +26,7 @@ register_cuda_ci( runner_config="1-gpu-small", ) register_amd_ci(est_time=60, suite="stage-b-test-1-gpu-small-amd") -register_cpu_ci(est_time=179, suite="base-c-test-cpu") +register_cpu_ci(est_time=49, suite="base-c-test-cpu") _MODEL_NAME = "Qwen/Qwen3-0.6B" diff --git a/test/registered/openai_server/function_call/test_anthropic_tool_use.py b/test/registered/openai_server/function_call/test_anthropic_tool_use.py index 762c23ce3..560b4ef9c 100644 --- a/test/registered/openai_server/function_call/test_anthropic_tool_use.py +++ b/test/registered/openai_server/function_call/test_anthropic_tool_use.py @@ -16,7 +16,11 @@ import unittest import requests from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -27,6 +31,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=50, stage="base-b", runner_config="1-gpu-large") register_amd_ci(est_time=140, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=54, suite="base-c-test-cpu") # System message to guide Llama3.2 to produce proper tool call format SYSTEM_MESSAGE = ( diff --git a/test/registered/openai_server/validation/test_large_max_new_tokens.py b/test/registered/openai_server/validation/test_large_max_new_tokens.py index 8e88dd1f2..5f674066e 100644 --- a/test/registered/openai_server/validation/test_large_max_new_tokens.py +++ b/test/registered/openai_server/validation/test_large_max_new_tokens.py @@ -11,7 +11,11 @@ import openai from sglang.srt.utils import kill_process_tree from sglang.srt.utils.hf_transformers_utils import get_tokenizer -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -24,6 +28,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=58, stage="base-b", runner_config="1-gpu-large") register_amd_ci(est_time=41, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=101, suite="base-c-test-cpu") class TestLargeMaxNewTokens(CustomTestCase): diff --git a/test/registered/openai_server/validation/test_matched_stop.py b/test/registered/openai_server/validation/test_matched_stop.py index 8284c8d07..be2853138 100644 --- a/test/registered/openai_server/validation/test_matched_stop.py +++ b/test/registered/openai_server/validation/test_matched_stop.py @@ -1,7 +1,11 @@ import unittest from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.kits.matched_stop_kit import MatchedStopMixin from sglang.test.test_utils import ( DEFAULT_MODEL_NAME_FOR_TEST, @@ -12,6 +16,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=52, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=60, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=83, suite="base-c-test-cpu") class TestMatchedStop(CustomTestCase, MatchedStopMixin): diff --git a/test/registered/prefill_only/test_openai_embedding.py b/test/registered/prefill_only/test_openai_embedding.py index 0f6435be5..a5ff4ef23 100644 --- a/test/registered/prefill_only/test_openai_embedding.py +++ b/test/registered/prefill_only/test_openai_embedding.py @@ -4,7 +4,11 @@ import unittest import openai from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.test_utils import ( DEFAULT_SMALL_EMBEDDING_MODEL_NAME_FOR_TEST, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, @@ -15,6 +19,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=91, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=141, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=91, suite="base-c-test-cpu") class TestOpenAIEmbedding(CustomTestCase): diff --git a/test/registered/radix_cache/test_radix_attention.py b/test/registered/radix_cache/test_radix_attention.py index 8814f6a27..509628786 100644 --- a/test/registered/radix_cache/test_radix_attention.py +++ b/test/registered/radix_cache/test_radix_attention.py @@ -1,7 +1,11 @@ import unittest from sglang.srt.environ import envs -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.kits.radix_cache_server_kit import run_radix_attention_test from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, @@ -16,6 +20,7 @@ from sglang.test.test_utils import ( # RadixAttention server integration tests register_cuda_ci(est_time=100, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=100, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=405, suite="base-c-test-cpu") class TestRadixCacheFCFS(CustomTestCase): diff --git a/test/registered/radix_cache/test_radix_cache_hit.py b/test/registered/radix_cache/test_radix_cache_hit.py index c052dbfdf..d8f607784 100644 --- a/test/registered/radix_cache/test_radix_cache_hit.py +++ b/test/registered/radix_cache/test_radix_cache_hit.py @@ -1,7 +1,11 @@ import unittest from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci +from sglang.test.ci.ci_register import ( + register_amd_ci, + register_cpu_ci, + register_cuda_ci, +) from sglang.test.kits.cache_hit_kit import run_multiturn_cache_hit_test from sglang.test.test_utils import ( DEFAULT_SMALL_MODEL_NAME_FOR_TEST, @@ -13,6 +17,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=55, stage="base-b", runner_config="1-gpu-small") register_amd_ci(est_time=55, suite="stage-b-test-1-gpu-small-amd") +register_cpu_ci(est_time=113, suite="base-c-test-cpu") MODEL = DEFAULT_SMALL_MODEL_NAME_FOR_TEST diff --git a/test/registered/radix_cache/test_swa_radix_cache_kl.py b/test/registered/radix_cache/test_swa_radix_cache_kl.py index 810a3a1c6..e34372221 100644 --- a/test/registered/radix_cache/test_swa_radix_cache_kl.py +++ b/test/registered/radix_cache/test_swa_radix_cache_kl.py @@ -1,12 +1,13 @@ import unittest -from sglang.test.ci.ci_register import register_cuda_ci +from sglang.test.ci.ci_register import register_cpu_ci, register_cuda_ci from sglang.test.kits.kl_divergence_kit import KLDivergenceMixin from sglang.test.server_fixtures.default_fixture import DefaultServerBase MODEL = "openai/gpt-oss-20b" register_cuda_ci(est_time=151, stage="base-b", runner_config="1-gpu-large") +register_cpu_ci(est_time=1602, suite="base-c-test-cpu") class TestSWARadixCacheKL(KLDivergenceMixin, DefaultServerBase): diff --git a/test/registered/rl/test_pause_generation_tensor_consistency.py b/test/registered/rl/test_pause_generation_tensor_consistency.py index 0bd3902c5..c82c1976c 100644 --- a/test/registered/rl/test_pause_generation_tensor_consistency.py +++ b/test/registered/rl/test_pause_generation_tensor_consistency.py @@ -10,7 +10,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") # --------------------------------------------------------------------------- diff --git a/test/registered/scheduler/test_abort_with_metrics.py b/test/registered/scheduler/test_abort_with_metrics.py index 387983804..b35fb210e 100644 --- a/test/registered/scheduler/test_abort_with_metrics.py +++ b/test/registered/scheduler/test_abort_with_metrics.py @@ -19,7 +19,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") _HTTP_SCOPE = { "type": "http", diff --git a/test/registered/scheduler/test_routing_key_scheduling.py b/test/registered/scheduler/test_routing_key_scheduling.py index b39b5aa50..cc6b5a713 100644 --- a/test/registered/scheduler/test_routing_key_scheduling.py +++ b/test/registered/scheduler/test_routing_key_scheduling.py @@ -22,7 +22,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=50, stage="nightly", runner_config="1-gpu-large") register_amd_ci(est_time=120, suite="nightly-amd-1-gpu", nightly=True) -register_cpu_ci(est_time=184, suite="base-c-test-cpu") +register_cpu_ci(est_time=55, suite="base-c-test-cpu") class TestRoutingKeyScheduling(CustomTestCase): diff --git a/test/registered/sessions/test_streaming_session_swa_extra.py b/test/registered/sessions/test_streaming_session_swa_extra.py index 2fdc336b4..52c8cc13f 100644 --- a/test/registered/sessions/test_streaming_session_swa_extra.py +++ b/test/registered/sessions/test_streaming_session_swa_extra.py @@ -5,7 +5,7 @@ CUDA-only: gpt-oss-20b is not part of the AMD streaming-session coverage. import unittest -from sglang.test.ci.ci_register import register_cuda_ci +from sglang.test.ci.ci_register import register_cpu_ci, register_cuda_ci from sglang.test.kits.streaming_session_kit import StreamingSessionKitMixin from sglang.test.server_fixtures.streaming_session_fixture import ( SWA_COMMON_ARGS, @@ -14,6 +14,7 @@ from sglang.test.server_fixtures.streaming_session_fixture import ( ) register_cuda_ci(est_time=130, stage="extra-a", runner_config="1-gpu-large") +register_cpu_ci(est_time=449, suite="base-c-test-cpu") class TestStreamingSessionSWARetractMixedChunk( diff --git a/test/registered/unit/bench/test_mixed_prefix_gsm8k.py b/test/registered/unit/bench/test_mixed_prefix_gsm8k.py index 4d7626fd6..be32ae4be 100644 --- a/test/registered/unit/bench/test_mixed_prefix_gsm8k.py +++ b/test/registered/unit/bench/test_mixed_prefix_gsm8k.py @@ -11,7 +11,7 @@ from sglang.test.simple_eval_mixed_prefix_gsm8k import ( ) from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=5, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _write_synthetic_dataset(path: str, n: int) -> None: diff --git a/test/registered/unit/bench/test_simple_eval_gsm8k.py b/test/registered/unit/bench/test_simple_eval_gsm8k.py index 6c4fda7ec..f5bf0fb43 100644 --- a/test/registered/unit/bench/test_simple_eval_gsm8k.py +++ b/test/registered/unit/bench/test_simple_eval_gsm8k.py @@ -10,7 +10,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.run_eval import _run_sgl_eval from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=5, suite="base-b-test-cpu") +register_cpu_ci(est_time=6, suite="base-b-test-cpu") def _write_fake_metrics(out_parent: Path, eval_name: str, payload: dict) -> None: diff --git a/test/registered/unit/constrained/test_grammar_manager.py b/test/registered/unit/constrained/test_grammar_manager.py index 9f5c96524..95c57c639 100644 --- a/test/registered/unit/constrained/test_grammar_manager.py +++ b/test/registered/unit/constrained/test_grammar_manager.py @@ -31,7 +31,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(2.0, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") def _make_scheduler(grammar_backend_name="none", skip_tokenizer=False): diff --git a/test/registered/unit/constrained/test_reasoner_grammar_backend.py b/test/registered/unit/constrained/test_reasoner_grammar_backend.py index 4d418fce9..da1eaf219 100644 --- a/test/registered/unit/constrained/test_reasoner_grammar_backend.py +++ b/test/registered/unit/constrained/test_reasoner_grammar_backend.py @@ -18,7 +18,7 @@ from sglang.srt.parser.reasoning_parser import KimiK3Detector as KimiK3Reasoning from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(2.0, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class _DummyTokenizer: diff --git a/test/registered/unit/constrained/test_utils.py b/test/registered/unit/constrained/test_utils.py index 257ea4db9..818a336f2 100644 --- a/test/registered/unit/constrained/test_utils.py +++ b/test/registered/unit/constrained/test_utils.py @@ -15,7 +15,7 @@ from sglang.srt.constrained.utils import is_legacy_structural_tag from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(1.0, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class TestIsLegacyStructuralTag(unittest.TestCase): diff --git a/test/registered/unit/entrypoints/openai/test_serving_embedding.py b/test/registered/unit/entrypoints/openai/test_serving_embedding.py index 09a2d9797..e2d0f1085 100644 --- a/test/registered/unit/entrypoints/openai/test_serving_embedding.py +++ b/test/registered/unit/entrypoints/openai/test_serving_embedding.py @@ -59,7 +59,7 @@ from sglang.srt.managers.io_struct import EmbeddingReqInput from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=10, suite="base-a-test-cpu") -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") # Mock TokenizerManager for embedding tests diff --git a/test/registered/unit/function_call/test_function_call_parser.py b/test/registered/unit/function_call/test_function_call_parser.py index 6202f7aef..8fcd0eb59 100644 --- a/test/registered/unit/function_call/test_function_call_parser.py +++ b/test/registered/unit/function_call/test_function_call_parser.py @@ -34,7 +34,7 @@ from sglang.srt.function_call.qwen3_coder_detector import Qwen3CoderDetector from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=15, suite="base-a-test-cpu") -register_cpu_ci(est_time=61, suite="base-c-test-cpu") +register_cpu_ci(est_time=70, suite="base-c-test-cpu") class TestInklingDetector(unittest.TestCase): diff --git a/test/registered/unit/function_call/test_json_schema_constraint.py b/test/registered/unit/function_call/test_json_schema_constraint.py index ffeb64304..d53c607d3 100644 --- a/test/registered/unit/function_call/test_json_schema_constraint.py +++ b/test/registered/unit/function_call/test_json_schema_constraint.py @@ -19,7 +19,7 @@ from sglang.srt.function_call.utils import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(5, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestJsonSchemaConstraint(unittest.TestCase): diff --git a/test/registered/unit/function_call/test_parallel_tool_calls.py b/test/registered/unit/function_call/test_parallel_tool_calls.py index 5b4ecce2e..6dbb6d2d6 100644 --- a/test/registered/unit/function_call/test_parallel_tool_calls.py +++ b/test/registered/unit/function_call/test_parallel_tool_calls.py @@ -24,7 +24,7 @@ from sglang.srt.function_call.json_array_parser import JsonArrayParser from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(5, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") class TestParallelToolCalls(unittest.TestCase): diff --git a/test/registered/unit/function_call/test_unknown_tool_name.py b/test/registered/unit/function_call/test_unknown_tool_name.py index 6bf8d56da..d07d2ed45 100644 --- a/test/registered/unit/function_call/test_unknown_tool_name.py +++ b/test/registered/unit/function_call/test_unknown_tool_name.py @@ -10,7 +10,7 @@ from sglang.srt.function_call.core_types import StreamingParseResult from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(5, "base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class DummyDetector(BaseFormatDetector): diff --git a/test/registered/unit/layers/moe/test_aiter_runner.py b/test/registered/unit/layers/moe/test_aiter_runner.py index 500b52c7e..65b941a59 100644 --- a/test/registered/unit/layers/moe/test_aiter_runner.py +++ b/test/registered/unit/layers/moe/test_aiter_runner.py @@ -14,7 +14,7 @@ from sglang.srt.layers.moe.moe_runner.aiter import ( from sglang.srt.layers.moe.moe_runner.base import MoeRunnerConfig from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=5, suite="base-c-test-cpu") +register_cpu_ci(est_time=7, suite="base-c-test-cpu") def _runner_input(): diff --git a/test/registered/unit/layers/moe/test_hpc_ops_runner_guard.py b/test/registered/unit/layers/moe/test_hpc_ops_runner_guard.py index 95175cdc9..e5fcaf0f5 100644 --- a/test/registered/unit/layers/moe/test_hpc_ops_runner_guard.py +++ b/test/registered/unit/layers/moe/test_hpc_ops_runner_guard.py @@ -14,7 +14,7 @@ from sglang.srt.layers.moe.utils import MoeRunnerBackend from sglang.srt.runtime_context import get_flags from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=5, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") @pytest.fixture diff --git a/test/registered/unit/managers/test_io_struct.py b/test/registered/unit/managers/test_io_struct.py index 2f145220a..759054a48 100644 --- a/test/registered/unit/managers/test_io_struct.py +++ b/test/registered/unit/managers/test_io_struct.py @@ -37,7 +37,7 @@ from sglang.test.test_utils import ( register_cuda_ci(est_time=8, stage="base-b", runner_config="1-gpu-large") register_amd_ci(est_time=8, suite="stage-b-test-1-gpu-small-amd") -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestTokenizedReqInputMsgpack(unittest.TestCase): diff --git a/test/registered/unit/managers/test_mm_embedding_length.py b/test/registered/unit/managers/test_mm_embedding_length.py index ff5e0f40a..0a6823fd4 100644 --- a/test/registered/unit/managers/test_mm_embedding_length.py +++ b/test/registered/unit/managers/test_mm_embedding_length.py @@ -7,7 +7,7 @@ from sglang.srt.environ import envs from sglang.srt.managers import mm_schedule as mm_utils from sglang.test.ci.ci_register import register_cpu_ci -register_cpu_ci(est_time=5, suite="base-b-test-cpu") +register_cpu_ci(est_time=8, suite="base-b-test-cpu") @pytest.mark.parametrize( diff --git a/test/registered/unit/managers/test_msgpack_ipc_roundtrip.py b/test/registered/unit/managers/test_msgpack_ipc_roundtrip.py index 0dabbe330..bb354e8b2 100644 --- a/test/registered/unit/managers/test_msgpack_ipc_roundtrip.py +++ b/test/registered/unit/managers/test_msgpack_ipc_roundtrip.py @@ -40,7 +40,7 @@ from sglang.srt.utils.weight_checker import ParallelismInfo as PydanticParalleli from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase -register_cpu_ci(est_time=10, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def _round_trip(obj): diff --git a/test/registered/unit/managers/test_scheduler_pause_generation.py b/test/registered/unit/managers/test_scheduler_pause_generation.py index b24411117..f2711acc9 100644 --- a/test/registered/unit/managers/test_scheduler_pause_generation.py +++ b/test/registered/unit/managers/test_scheduler_pause_generation.py @@ -24,7 +24,7 @@ from sglang.srt.runtime_context import publish, reset_context from sglang.srt.sampling.sampling_params import SamplingParams register_cpu_ci(est_time=15, suite="base-a-test-cpu") -register_cpu_ci(est_time=9, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestSchedulerPauseGeneration(unittest.TestCase): diff --git a/test/registered/unit/mem_cache/test_evict_policy.py b/test/registered/unit/mem_cache/test_evict_policy.py index 95a34b39c..ea94793c0 100644 --- a/test/registered/unit/mem_cache/test_evict_policy.py +++ b/test/registered/unit/mem_cache/test_evict_policy.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") import unittest from unittest.mock import MagicMock diff --git a/test/registered/unit/observability/test_cpu_monitor.py b/test/registered/unit/observability/test_cpu_monitor.py index b80c10ac9..7027df69c 100644 --- a/test/registered/unit/observability/test_cpu_monitor.py +++ b/test/registered/unit/observability/test_cpu_monitor.py @@ -7,7 +7,7 @@ from unittest.mock import MagicMock, patch from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=60, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class TestCpuMonitor(unittest.TestCase): diff --git a/test/registered/unit/observability/test_func_timer.py b/test/registered/unit/observability/test_func_timer.py index 43171bc1c..fa50e5e8e 100644 --- a/test/registered/unit/observability/test_func_timer.py +++ b/test/registered/unit/observability/test_func_timer.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") import asyncio import unittest diff --git a/test/registered/unit/observability/test_label_transform.py b/test/registered/unit/observability/test_label_transform.py index e6e4c664e..978d871c6 100644 --- a/test/registered/unit/observability/test_label_transform.py +++ b/test/registered/unit/observability/test_label_transform.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") import unittest diff --git a/test/registered/unit/observability/test_metrics_utils.py b/test/registered/unit/observability/test_metrics_utils.py index dddaa6d94..2be98978f 100644 --- a/test/registered/unit/observability/test_metrics_utils.py +++ b/test/registered/unit/observability/test_metrics_utils.py @@ -7,7 +7,7 @@ from sglang.srt.observability.utils import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class TestMetricsUtils(unittest.TestCase): diff --git a/test/registered/unit/observability/test_request_metrics_exporter.py b/test/registered/unit/observability/test_request_metrics_exporter.py index 6d3ce153d..fe7de76da 100644 --- a/test/registered/unit/observability/test_request_metrics_exporter.py +++ b/test/registered/unit/observability/test_request_metrics_exporter.py @@ -6,7 +6,7 @@ from typing import Any, Dict, List, Optional from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") import asyncio import json diff --git a/test/registered/unit/observability/test_startup_func_log_and_timer.py b/test/registered/unit/observability/test_startup_func_log_and_timer.py index 6b72246de..67ab25121 100644 --- a/test/registered/unit/observability/test_startup_func_log_and_timer.py +++ b/test/registered/unit/observability/test_startup_func_log_and_timer.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") import unittest from unittest.mock import MagicMock, patch diff --git a/test/registered/unit/parser/test_code_completion_parser.py b/test/registered/unit/parser/test_code_completion_parser.py index 89ffbfc57..0acdb8e98 100644 --- a/test/registered/unit/parser/test_code_completion_parser.py +++ b/test/registered/unit/parser/test_code_completion_parser.py @@ -19,7 +19,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestRegisterCompletionTemplate(CustomTestCase): diff --git a/test/registered/unit/parser/test_conversation.py b/test/registered/unit/parser/test_conversation.py index dcc3b0040..7ac627b94 100644 --- a/test/registered/unit/parser/test_conversation.py +++ b/test/registered/unit/parser/test_conversation.py @@ -33,7 +33,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestConversationGetPrompt(CustomTestCase): diff --git a/test/registered/unit/parser/test_harmony_parser.py b/test/registered/unit/parser/test_harmony_parser.py index b10b2b8ea..30f90eef6 100644 --- a/test/registered/unit/parser/test_harmony_parser.py +++ b/test/registered/unit/parser/test_harmony_parser.py @@ -13,7 +13,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestPrefixHold(CustomTestCase): diff --git a/test/registered/unit/parser/test_jinja_template_utils.py b/test/registered/unit/parser/test_jinja_template_utils.py index 85fcd474a..d23b88fc3 100644 --- a/test/registered/unit/parser/test_jinja_template_utils.py +++ b/test/registered/unit/parser/test_jinja_template_utils.py @@ -10,7 +10,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestTemplateContentFormatDetection(CustomTestCase): diff --git a/test/registered/unit/parser/test_reasoning_content_without_parser.py b/test/registered/unit/parser/test_reasoning_content_without_parser.py index dd8805ac1..dee92a07f 100644 --- a/test/registered/unit/parser/test_reasoning_content_without_parser.py +++ b/test/registered/unit/parser/test_reasoning_content_without_parser.py @@ -5,7 +5,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") # Simulated model output that contains think tags (e.g. from DeepSeek-R1) THINK_OUTPUT = ( diff --git a/test/registered/unit/sampling/test_custom_logit_processor.py b/test/registered/unit/sampling/test_custom_logit_processor.py index 4efa13a5a..2b706f671 100644 --- a/test/registered/unit/sampling/test_custom_logit_processor.py +++ b/test/registered/unit/sampling/test_custom_logit_processor.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") import json import unittest diff --git a/test/registered/unit/sampling/test_sampling_batch_info.py b/test/registered/unit/sampling/test_sampling_batch_info.py index 83abf7f90..59f7f3fe3 100644 --- a/test/registered/unit/sampling/test_sampling_batch_info.py +++ b/test/registered/unit/sampling/test_sampling_batch_info.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=9, suite="base-a-test-cpu") -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") import unittest from types import SimpleNamespace diff --git a/test/registered/unit/sampling/test_sampling_params.py b/test/registered/unit/sampling/test_sampling_params.py index 4ea9712af..016783c49 100644 --- a/test/registered/unit/sampling/test_sampling_params.py +++ b/test/registered/unit/sampling/test_sampling_params.py @@ -3,7 +3,7 @@ from sglang.test.ci.ci_register import register_cpu_ci, register_xpu_ci register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") register_xpu_ci(est_time=10, suite="stage-a-test-1-gpu-xpu") import copy diff --git a/test/registered/unit/server_args/test_server_args.py b/test/registered/unit/server_args/test_server_args.py index eccd680fc..5c3e085b5 100644 --- a/test/registered/unit/server_args/test_server_args.py +++ b/test/registered/unit/server_args/test_server_args.py @@ -35,7 +35,7 @@ from sglang.test.test_utils import ( ) register_cpu_ci(est_time=10, suite="base-a-test-cpu") -register_cpu_ci(est_time=12, suite="base-c-test-cpu") +register_cpu_ci(est_time=11, suite="base-c-test-cpu") # Mock get_device() so all tests run on CPU-only CI runners _mock_device = patch("sglang.srt.server_args.get_device", return_value="cuda") diff --git a/test/registered/unit/test_runai_utils.py b/test/registered/unit/test_runai_utils.py index 60576affd..244b1633d 100644 --- a/test/registered/unit/test_runai_utils.py +++ b/test/registered/unit/test_runai_utils.py @@ -6,7 +6,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestRunaiUtils(CustomTestCase): diff --git a/test/registered/unit/utils/test_gauge_histogram.py b/test/registered/unit/utils/test_gauge_histogram.py index fac97402a..f78a2a3f3 100644 --- a/test/registered/unit/utils/test_gauge_histogram.py +++ b/test/registered/unit/utils/test_gauge_histogram.py @@ -1,7 +1,7 @@ from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") import unittest diff --git a/test/registered/unit/utils/test_http_server_auth.py b/test/registered/unit/utils/test_http_server_auth.py index 6cfb3902c..690fa3e6f 100644 --- a/test/registered/unit/utils/test_http_server_auth.py +++ b/test/registered/unit/utils/test_http_server_auth.py @@ -11,7 +11,7 @@ from sglang.srt.utils.auth import AuthLevel, decide_request_auth from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class TestHttpServerAdminAuth(unittest.TestCase): diff --git a/test/registered/unit/utils/test_json_response.py b/test/registered/unit/utils/test_json_response.py index f99d6cea3..ae3fa72b4 100644 --- a/test/registered/unit/utils/test_json_response.py +++ b/test/registered/unit/utils/test_json_response.py @@ -11,7 +11,7 @@ from sglang.srt.utils.json_response import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class TestJSONResponseUtils(unittest.TestCase): diff --git a/test/registered/unit/utils/test_patch_tokenizer.py b/test/registered/unit/utils/test_patch_tokenizer.py index cdd3ed79d..17a9318ce 100644 --- a/test/registered/unit/utils/test_patch_tokenizer.py +++ b/test/registered/unit/utils/test_patch_tokenizer.py @@ -12,7 +12,7 @@ from sglang.srt.utils.patch_tokenizer import ( from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=30, suite="base-a-test-cpu", nightly=True) -register_cpu_ci(est_time=53, suite="base-c-test-cpu") +register_cpu_ci(est_time=16, suite="base-c-test-cpu") class TestPatchTokenizerEndToEndTest(unittest.TestCase): diff --git a/test/registered/unit/utils/test_subprocess_watchdog.py b/test/registered/unit/utils/test_subprocess_watchdog.py index d486a2d48..6d62a65f0 100644 --- a/test/registered/unit/utils/test_subprocess_watchdog.py +++ b/test/registered/unit/utils/test_subprocess_watchdog.py @@ -25,7 +25,7 @@ from sglang.test.ci.ci_register import register_cpu_ci from sglang.test.test_utils import CustomTestCase register_cpu_ci(est_time=9, suite="base-a-test-cpu") -register_cpu_ci(est_time=9, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") def healthy_worker(): diff --git a/test/registered/utils/test_log_utils.py b/test/registered/utils/test_log_utils.py index 021a59627..422dba29a 100644 --- a/test/registered/utils/test_log_utils.py +++ b/test/registered/utils/test_log_utils.py @@ -11,7 +11,7 @@ from sglang.srt.utils.log_utils import create_log_targets, log_json from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=6, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=4, suite="base-c-test-cpu") _LOG_PREFIX_RE = re.compile(r"^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] ") diff --git a/test/registered/utils/test_model_file_verifier.py b/test/registered/utils/test_model_file_verifier.py index b83763ef3..848c4422d 100644 --- a/test/registered/utils/test_model_file_verifier.py +++ b/test/registered/utils/test_model_file_verifier.py @@ -28,7 +28,7 @@ from sglang.test.test_utils import ( ) # Note: AMD registration removed - test_model_file_verifier fails on AMD -register_cpu_ci(est_time=540, suite="base-c-test-cpu") +register_cpu_ci(est_time=146, suite="base-c-test-cpu") MODEL_NAME = "Qwen/Qwen3-0.6B" diff --git a/test/registered/utils/test_network_address.py b/test/registered/utils/test_network_address.py index 09e3b8068..87194b3aa 100644 --- a/test/registered/utils/test_network_address.py +++ b/test/registered/utils/test_network_address.py @@ -7,7 +7,7 @@ from sglang.srt.utils.network import NetworkAddress, is_zmq_endpoint_ipv6 from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") # Mock get_device() so ServerArgs tests run on CPU-only CI runners _mock_device = patch("sglang.srt.server_args.get_device", return_value="cuda") diff --git a/test/registered/utils/test_socket_utils.py b/test/registered/utils/test_socket_utils.py index 1b52c631c..00adac911 100644 --- a/test/registered/utils/test_socket_utils.py +++ b/test/registered/utils/test_socket_utils.py @@ -16,7 +16,7 @@ from sglang.test.test_utils import CustomTestCase from sglang.utils import normalize_base_url, release_port, reserve_port register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=8, suite="base-c-test-cpu") class TestTryBindSocket(CustomTestCase): diff --git a/test/registered/utils/test_type_based_dispatcher.py b/test/registered/utils/test_type_based_dispatcher.py index 911cda058..b9f9280a9 100644 --- a/test/registered/utils/test_type_based_dispatcher.py +++ b/test/registered/utils/test_type_based_dispatcher.py @@ -12,7 +12,7 @@ from sglang.test.ci.ci_register import register_amd_ci, register_cpu_ci from sglang.utils import TypeBasedDispatcher register_amd_ci(est_time=10, suite="stage-b-test-1-gpu-small-amd") -register_cpu_ci(est_time=8, suite="base-c-test-cpu") +register_cpu_ci(est_time=6, suite="base-c-test-cpu") class TestTypeBasedDispatcher(unittest.TestCase): diff --git a/test/registered/vlm/test_token_id_retokenize_e2e.py b/test/registered/vlm/test_token_id_retokenize_e2e.py index 670a60bbb..402ac513b 100644 --- a/test/registered/vlm/test_token_id_retokenize_e2e.py +++ b/test/registered/vlm/test_token_id_retokenize_e2e.py @@ -27,7 +27,7 @@ from PIL import Image from transformers import AutoProcessor from sglang.srt.utils import kill_process_tree -from sglang.test.ci.ci_register import register_cuda_ci +from sglang.test.ci.ci_register import register_cpu_ci, register_cuda_ci from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, DEFAULT_URL_FOR_TEST, @@ -36,6 +36,7 @@ from sglang.test.test_utils import ( ) register_cuda_ci(est_time=300, stage="base-b", runner_config="1-gpu-large") +register_cpu_ci(est_time=123, suite="base-c-test-cpu") def _data_uri(): diff --git a/test/registered/vlm/test_video_utils.py b/test/registered/vlm/test_video_utils.py index 7040be748..d0e9b18f4 100644 --- a/test/registered/vlm/test_video_utils.py +++ b/test/registered/vlm/test_video_utils.py @@ -6,7 +6,7 @@ from sglang.srt.utils import sample_video_frames from sglang.test.ci.ci_register import register_cpu_ci register_cpu_ci(est_time=7, suite="base-a-test-cpu") -register_cpu_ci(est_time=7, suite="base-c-test-cpu") +register_cpu_ci(est_time=5, suite="base-c-test-cpu") class DummyVideo: diff --git a/test/run_suite.py b/test/run_suite.py index 869481840..754db79c8 100644 --- a/test/run_suite.py +++ b/test/run_suite.py @@ -33,6 +33,7 @@ PER_COMMIT_SUITES = { HWBackend.CPU: [ "base-a-test-cpu", "base-b-test-cpu", + "base-b-tp-test-cpu", "base-c-test-cpu", "base-b-test-cpu-arm64", ], @@ -233,18 +234,27 @@ def validate_all_suites(all_tests: List[CIRegistry]): def filter_tests( - ci_tests: List[CIRegistry], hw: HWBackend, suite: str, nightly: bool = False -) -> List[CIRegistry]: + ci_tests: List[CIRegistry], + hw: HWBackend, + suites: List[str], + nightly: bool = False, +) -> tuple[List[CIRegistry], List[CIRegistry]]: + # `suites` may hold more than one suite (comma-separated --suite): the + # matched tests are unioned so a single runner can partition several + # suites as one balanced pool (e.g. base-b + base-c on a Xeon SPR box). + suite_set = set(suites) ci_tests = [ t for t in ci_tests - if t.backend == hw and t.effective_suite == suite and t.nightly == nightly + if t.backend == hw and t.effective_suite in suite_set and t.nightly == nightly ] # Union of all three dicts, not just the per-commit or nightly half: # CUDA nightly suites are selected by name alone, without --nightly. - if suite not in _valid_suites_by_backend().get(hw, set()): - print(f"Warning: Unknown suite {suite} for backend {hw.name}") + valid = _valid_suites_by_backend().get(hw, set()) + for suite in suites: + if suite not in valid: + print(f"Warning: Unknown suite {suite} for backend {hw.name}") enabled_tests = [t for t in ci_tests if t.disabled is None] skipped_tests = [t for t in ci_tests if t.disabled is not None] @@ -292,10 +302,11 @@ def pretty_print_tests( def load_live_est( - partition_model_file: Optional[str], suite: str, repo_root: str + partition_model_file: Optional[str], suites: List[str], repo_root: str ) -> Optional[Dict[str, float]]: - """`CIRegistry.filename -> est seconds` from `model.json est[suite]`; - None on any miss (caller falls back to in-source `est_time`).""" + """`CIRegistry.filename -> est seconds` from `model.json est[suite]`, + merged across all requested `suites`; None if no suite yielded any entry + (caller then falls back to in-source `est_time`).""" if not partition_model_file or not os.path.exists(partition_model_file): return None try: @@ -305,18 +316,26 @@ def load_live_est( return None if not isinstance(partition_model, dict): return None - suite_est = partition_model.get("est", {}).get(suite) - if not isinstance(suite_est, dict) or not suite_est: + est_by_suite = partition_model.get("est", {}) + if not isinstance(est_by_suite, dict): return None - return { - os.path.join(repo_root, relpath): float(elapsed) - for relpath, elapsed in suite_est.items() - } + merged: Dict[str, float] = {} + for suite in suites: + suite_est = est_by_suite.get(suite) + if not isinstance(suite_est, dict): + continue + for relpath, elapsed in suite_est.items(): + merged[os.path.join(repo_root, relpath)] = float(elapsed) + return merged or None def run_a_suite(args): hw = HW_MAPPING[args.hw] - suite = args.suite + # --suite accepts a comma-separated list; the matched tests are unioned + # into one pool so a single runner can LPT-partition several suites + # together (e.g. base-b + base-c on one Xeon SPR box). A single suite is + # just a one-element list, so existing callers are unaffected. + suites = [s.strip() for s in args.suite.split(",") if s.strip()] nightly = args.nightly auto_partition_id = args.auto_partition_id auto_partition_size = args.auto_partition_size @@ -341,10 +360,10 @@ def run_a_suite(args): all_tests = collect_tests(files, sanity_check=sanity_check) validate_all_suites(all_tests) - ci_tests, skipped_tests = filter_tests(all_tests, hw, suite, nightly) + ci_tests, skipped_tests = filter_tests(all_tests, hw, suites, nightly) if auto_partition_size: - live_est = load_live_est(args.partition_model_file, suite, repo_root) + live_est = load_live_est(args.partition_model_file, suites, repo_root) if live_est is not None: print( f"LPT: {len(live_est)} live est entries from {args.partition_model_file}", @@ -389,7 +408,16 @@ def main(): required=True, help="Hardware backend to run tests on.", ) - parser.add_argument("--suite", type=str, required=True, help="Test suite to run.") + parser.add_argument( + "--suite", + type=str, + required=True, + help=( + "Test suite to run. Accepts a comma-separated list of suites " + "(e.g. 'base-b-test-cpu,base-c-test-cpu'); their tests are unioned " + "into one pool before partitioning." + ), + ) parser.add_argument( "--nightly", action="store_true",