[CI] slash handler: lookup runs_on from runner_configs.yml (#25394)
This commit is contained in:
@@ -63,7 +63,7 @@ jobs:
|
|||||||
const missingCIText = ':x: **Missing `run-ci` label** — add it to run CI tests.';
|
const missingCIText = ':x: **Missing `run-ci` label** — add it to run CI tests.';
|
||||||
const peBlockedByCIText = ':x: **Blocked** — `run-ci` is required first.';
|
const peBlockedByCIText = ':x: **Blocked** — `run-ci` is required first.';
|
||||||
const notExtraEnabledText = ':warning: **Not enabled** — add `run-ci-extra` label to opt in.';
|
const notExtraEnabledText = ':warning: **Not enabled** — add `run-ci-extra` label to opt in.';
|
||||||
const stalePushText = ':warning: **Not run on latest push** — push again or use `/rerun-failed-ci` to dispatch.';
|
const stalePushText = ':warning: **Not run on latest push** — push again to dispatch.';
|
||||||
const ptText = !hasCI
|
const ptText = !hasCI
|
||||||
? missingCIText
|
? missingCIText
|
||||||
: (isReal(ptRun) ? `[Run #${ptRun.id}](${ptRun.html_url})` : '_Not run yet_');
|
: (isReal(ptRun) ? `[Run #${ptRun.id}](${ptRun.html_url})` : '_Not run yet_');
|
||||||
|
|||||||
@@ -4,46 +4,43 @@ run-name: ${{ inputs.pr_head_sha && format('[rerun-test] {0} {1}', inputs.test_c
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
|
mode:
|
||||||
|
description: "Dispatch mode: cuda | multimodal_gen | cpu"
|
||||||
|
required: true
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- cuda
|
||||||
|
- multimodal_gen
|
||||||
|
- cpu
|
||||||
test_command:
|
test_command:
|
||||||
description: "Test command(s) to run, one per line (e.g. 'registered/core/test_srt_endpoint.py TestSRTEndpoint.test_simple_decode')"
|
description: "Test command(s) to run, one per line (e.g. 'registered/core/test_srt_endpoint.py TestSRTEndpoint.test_simple_decode')"
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
runner_label:
|
runs_on:
|
||||||
description: "Runner label"
|
description: "GHA runner label (cuda/multimodal_gen only; ignored for cpu)"
|
||||||
required: true
|
required: false
|
||||||
type: choice
|
type: string
|
||||||
options:
|
default: ""
|
||||||
- 1-gpu-h100
|
install_script:
|
||||||
- 1-gpu-5090
|
description: "Install script path (cuda only). E.g. scripts/ci/cuda/ci_install_dependency.sh"
|
||||||
- 2-gpu-h100
|
required: false
|
||||||
- 4-gpu-h100
|
type: string
|
||||||
- 4-gpu-a10
|
default: ""
|
||||||
- 4-gpu-b200
|
install_timeout:
|
||||||
- 8-gpu-h200
|
description: "Install-step timeout minutes (cuda only)"
|
||||||
- 8-gpu-h200-deepep
|
required: false
|
||||||
- 8-gpu-h20
|
type: string
|
||||||
- 8-gpu-b200
|
default: "20"
|
||||||
- ubuntu-latest
|
rdma_devices:
|
||||||
|
description: "SGLANG_CI_RDMA_ALL_DEVICES csv (cuda only; empty = unset)"
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: ""
|
||||||
pr_head_sha:
|
pr_head_sha:
|
||||||
description: "PR head SHA to checkout (for /rerun-test on fork PRs)"
|
description: "PR head SHA to checkout (for /rerun-test on fork PRs)"
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
default: ""
|
default: ""
|
||||||
use_deepep:
|
|
||||||
description: "Use ci_install_deepep.sh instead of ci_install_dependency.sh"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
is_cpu:
|
|
||||||
description: "Run as CPU-only test (uses ubuntu-latest with uv pip install)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
install_diffusion:
|
|
||||||
description: "Install diffusion dependencies (for multimodal gen tests)"
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
default: "false"
|
|
||||||
reply_comment_id:
|
reply_comment_id:
|
||||||
description: "Reply comment ID to write back result to"
|
description: "Reply comment ID to write back result to"
|
||||||
required: false
|
required: false
|
||||||
@@ -69,15 +66,15 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
rerun-test-cuda:
|
rerun-test-cuda:
|
||||||
if: inputs.is_cpu != 'true'
|
if: inputs.mode == 'cuda'
|
||||||
runs-on: ${{ inputs.runner_label }}
|
runs-on: ${{ inputs.runs_on }}
|
||||||
timeout-minutes: 120
|
timeout-minutes: 120
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
issues: write
|
issues: write
|
||||||
env:
|
env:
|
||||||
RUNNER_LABELS: ${{ inputs.runner_label }}
|
RUNNER_LABELS: ${{ inputs.runs_on }}
|
||||||
SGLANG_CI_RDMA_ALL_DEVICES: ${{ inputs.runner_label == '8-gpu-h20' && 'mlx5_1,mlx5_2,mlx5_3,mlx5_4' || '' }}
|
SGLANG_CI_RDMA_ALL_DEVICES: ${{ inputs.rdma_devices }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -90,7 +87,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ inputs.runner_label }}" == "1-gpu-5090" ]]; then
|
if [[ "${{ inputs.runs_on }}" == "1-gpu-5090" ]]; then
|
||||||
source /etc/profile.d/sglang-ci.sh
|
source /etc/profile.d/sglang-ci.sh
|
||||||
fi
|
fi
|
||||||
python3 scripts/ci/utils/update_rerun_test_status.py \
|
python3 scripts/ci/utils/update_rerun_test_status.py \
|
||||||
@@ -102,26 +99,19 @@ jobs:
|
|||||||
- uses: ./.github/actions/check-maintenance
|
- uses: ./.github/actions/check-maintenance
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
timeout-minutes: 20
|
timeout-minutes: ${{ fromJson(inputs.install_timeout) }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ inputs.runner_label }}" == "1-gpu-5090" ]]; then
|
if [[ "${{ inputs.runs_on }}" == "1-gpu-5090" ]]; then
|
||||||
source /etc/profile.d/sglang-ci.sh
|
source /etc/profile.d/sglang-ci.sh
|
||||||
fi
|
fi
|
||||||
if [[ "${{ inputs.use_deepep }}" == "true" ]]; then
|
bash ${{ inputs.install_script }}
|
||||||
bash scripts/ci/cuda/ci_install_deepep.sh
|
|
||||||
elif [[ "${{ inputs.install_diffusion }}" == "true" ]]; then
|
|
||||||
bash scripts/ci/cuda/ci_install_dependency.sh diffusion
|
|
||||||
else
|
|
||||||
bash scripts/ci/cuda/ci_install_dependency.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Run test
|
- name: Run test
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ inputs.runner_label }}" == "1-gpu-5090" ]]; then
|
if [[ "${{ inputs.runs_on }}" == "1-gpu-5090" ]]; then
|
||||||
source /etc/profile.d/sglang-ci.sh
|
source /etc/profile.d/sglang-ci.sh
|
||||||
fi
|
fi
|
||||||
# Collect non-empty commands into an array for counting.
|
|
||||||
cmds=()
|
cmds=()
|
||||||
while IFS= read -r cmd; do
|
while IFS= read -r cmd; do
|
||||||
[ -z "$cmd" ] && continue
|
[ -z "$cmd" ] && continue
|
||||||
@@ -134,17 +124,74 @@ jobs:
|
|||||||
cmd="${cmds[$idx]}"
|
cmd="${cmds[$idx]}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "."
|
echo "."
|
||||||
if [[ "${{ inputs.install_diffusion }}" == "true" ]]; then
|
echo "Begin ($i/$total): python3 $cmd"
|
||||||
echo "Begin ($i/$total): python3 -m pytest $cmd -x"
|
echo "."
|
||||||
echo "."
|
file_start=$SECONDS
|
||||||
file_start=$SECONDS
|
(cd test/ && python3 $cmd -f) || exit 1
|
||||||
python3 -m pytest $cmd -x || exit 1
|
elapsed=$(( SECONDS - file_start ))
|
||||||
else
|
echo "."
|
||||||
echo "Begin ($i/$total): python3 $cmd"
|
echo "End ($i/$total): elapsed=${elapsed}s"
|
||||||
echo "."
|
echo "."
|
||||||
file_start=$SECONDS
|
echo ""
|
||||||
(cd test/ && python3 $cmd -f) || exit 1
|
done
|
||||||
fi
|
total_elapsed=$(( SECONDS - suite_start ))
|
||||||
|
echo "All $total test(s) passed in ${total_elapsed}s"
|
||||||
|
|
||||||
|
- uses: ./.github/actions/upload-cuda-coredumps
|
||||||
|
if: failure()
|
||||||
|
|
||||||
|
rerun-test-multimodal-gen:
|
||||||
|
if: inputs.mode == 'multimodal_gen'
|
||||||
|
runs-on: ${{ inputs.runs_on }}
|
||||||
|
timeout-minutes: 120
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
env:
|
||||||
|
RUNNER_LABELS: ${{ inputs.runs_on }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.pr_head_sha || github.sha }}
|
||||||
|
|
||||||
|
- name: Mark runner picked up
|
||||||
|
if: inputs.reply_comment_id != '' && inputs.reply_marker != ''
|
||||||
|
continue-on-error: true
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
python3 scripts/ci/utils/update_rerun_test_status.py \
|
||||||
|
--comment-id "${{ inputs.reply_comment_id }}" \
|
||||||
|
--marker "${{ inputs.reply_marker }}" \
|
||||||
|
--status running \
|
||||||
|
--repo "${{ github.repository }}"
|
||||||
|
|
||||||
|
- uses: ./.github/actions/check-maintenance
|
||||||
|
|
||||||
|
- name: Install dependencies (diffusion)
|
||||||
|
timeout-minutes: 20
|
||||||
|
run: bash scripts/ci/cuda/ci_install_dependency.sh diffusion
|
||||||
|
|
||||||
|
- name: Run test
|
||||||
|
timeout-minutes: 60
|
||||||
|
run: |
|
||||||
|
cmds=()
|
||||||
|
while IFS= read -r cmd; do
|
||||||
|
[ -z "$cmd" ] && continue
|
||||||
|
cmds+=("$cmd")
|
||||||
|
done <<< "${{ inputs.test_command }}"
|
||||||
|
total=${#cmds[@]}
|
||||||
|
suite_start=$SECONDS
|
||||||
|
for idx in "${!cmds[@]}"; do
|
||||||
|
i=$((idx + 1))
|
||||||
|
cmd="${cmds[$idx]}"
|
||||||
|
echo ""
|
||||||
|
echo "."
|
||||||
|
echo "Begin ($i/$total): python3 -m pytest $cmd -x"
|
||||||
|
echo "."
|
||||||
|
file_start=$SECONDS
|
||||||
|
python3 -m pytest $cmd -x || exit 1
|
||||||
elapsed=$(( SECONDS - file_start ))
|
elapsed=$(( SECONDS - file_start ))
|
||||||
echo "."
|
echo "."
|
||||||
echo "End ($i/$total): elapsed=${elapsed}s"
|
echo "End ($i/$total): elapsed=${elapsed}s"
|
||||||
@@ -158,7 +205,7 @@ jobs:
|
|||||||
if: failure()
|
if: failure()
|
||||||
|
|
||||||
rerun-test-cpu:
|
rerun-test-cpu:
|
||||||
if: inputs.is_cpu == 'true'
|
if: inputs.mode == 'cpu'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 120
|
timeout-minutes: 120
|
||||||
permissions:
|
permissions:
|
||||||
@@ -214,7 +261,6 @@ jobs:
|
|||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
run: |
|
run: |
|
||||||
cd test/
|
cd test/
|
||||||
# Collect non-empty commands into an array for counting.
|
|
||||||
cmds=()
|
cmds=()
|
||||||
while IFS= read -r cmd; do
|
while IFS= read -r cmd; do
|
||||||
[ -z "$cmd" ] && continue
|
[ -z "$cmd" ] && continue
|
||||||
@@ -241,7 +287,7 @@ jobs:
|
|||||||
echo "All $total test(s) passed in ${total_elapsed}s"
|
echo "All $total test(s) passed in ${total_elapsed}s"
|
||||||
|
|
||||||
write-back-result:
|
write-back-result:
|
||||||
needs: [rerun-test-cuda, rerun-test-cpu]
|
needs: [rerun-test-cuda, rerun-test-multimodal-gen, rerun-test-cpu]
|
||||||
if: always() && inputs.reply_comment_id != '' && inputs.reply_marker != ''
|
if: always() && inputs.reply_comment_id != '' && inputs.reply_marker != ''
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
@@ -263,7 +309,9 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
if [[ "${{ needs.rerun-test-cuda.result }}" == "success" || "${{ needs.rerun-test-cpu.result }}" == "success" ]]; then
|
if [[ "${{ needs.rerun-test-cuda.result }}" == "success" \
|
||||||
|
|| "${{ needs.rerun-test-multimodal-gen.result }}" == "success" \
|
||||||
|
|| "${{ needs.rerun-test-cpu.result }}" == "success" ]]; then
|
||||||
STATUS=success
|
STATUS=success
|
||||||
else
|
else
|
||||||
STATUS=failure
|
STATUS=failure
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
pip install PyGithub
|
pip install PyGithub PyYAML
|
||||||
|
|
||||||
- name: Handle Slash Command
|
- name: Handle Slash Command
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -9,6 +9,21 @@ from datetime import datetime, timezone
|
|||||||
import requests
|
import requests
|
||||||
from github import Auth, Github
|
from github import Auth, Github
|
||||||
|
|
||||||
|
# Import scripts/ci/runner_configs.py (sibling-up dir) for runner_config -> runs_on lookup.
|
||||||
|
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), ".."))
|
||||||
|
import runner_configs as _runner_configs # noqa: E402
|
||||||
|
|
||||||
|
# rerun-test workflow doesn't build sgl-kernel, so b200 stages always use the
|
||||||
|
# non-kernel pool when resolving the `$b200_runner` sentinel from runner_configs.yml.
|
||||||
|
_B200_DEFAULT_RUNNER = "4-gpu-b200"
|
||||||
|
|
||||||
|
# install_script values from runner_configs.yml are passed verbatim into a
|
||||||
|
# `bash ${{ inputs.install_script }}` step in rerun-test.yml. GHA expression
|
||||||
|
# substitution happens before bash parses, so shell metacharacters in the
|
||||||
|
# string would inject. Restrict the allowed shape to `scripts/ci/cuda/*.sh`
|
||||||
|
# (single path component under that dir, no whitespace/operators).
|
||||||
|
_ALLOWED_INSTALL_SCRIPT = re.compile(r"^scripts/ci/cuda/[\w.-]+\.sh$")
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
PERMISSIONS_FILE_PATH = ".github/CI_PERMISSIONS.json"
|
PERMISSIONS_FILE_PATH = ".github/CI_PERMISSIONS.json"
|
||||||
|
|
||||||
@@ -388,49 +403,6 @@ def handle_rerun_failed_ci(gh_repo, pr, comment, user_perms, react_on_success=Tr
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
CUDA_SUITE_TO_RUNNER = {
|
|
||||||
# PR test suites
|
|
||||||
"stage-a-test-1-gpu-small": "1-gpu-5090",
|
|
||||||
"stage-a-test-cpu": "ubuntu-latest",
|
|
||||||
"stage-b-test-1-gpu-small": "1-gpu-5090",
|
|
||||||
"stage-b-test-1-gpu-large": "1-gpu-h100",
|
|
||||||
"stage-b-test-2-gpu-large": "2-gpu-h100",
|
|
||||||
"stage-b-test-4-gpu-b200": "4-gpu-b200",
|
|
||||||
"stage-c-test-4-gpu-h100": "4-gpu-h100",
|
|
||||||
"stage-c-test-8-gpu-h200": "8-gpu-h200",
|
|
||||||
"stage-c-test-8-gpu-h20": "8-gpu-h20",
|
|
||||||
"stage-c-test-4-gpu-b200": "4-gpu-b200",
|
|
||||||
"stage-c-test-deepep-4-gpu-h100": "4-gpu-h100",
|
|
||||||
"stage-c-test-deepep-8-gpu-h200": "8-gpu-h200-deepep",
|
|
||||||
"stage-c-test-dsv4-4-gpu-b200": "4-gpu-b200",
|
|
||||||
"stage-c-test-dsv4-8-gpu-h200": "8-gpu-h200",
|
|
||||||
# Nightly test suites (NVIDIA)
|
|
||||||
"nightly-1-gpu": "1-gpu-h100",
|
|
||||||
"nightly-4-gpu": "4-gpu-h100",
|
|
||||||
"nightly-4-gpu-b200": "4-gpu-b200",
|
|
||||||
"nightly-8-gpu-common": "8-gpu-h200",
|
|
||||||
"nightly-8-gpu-h200": "8-gpu-h200",
|
|
||||||
"nightly-8-gpu-h20": "8-gpu-h20",
|
|
||||||
"nightly-8-gpu-b200": "8-gpu-b200",
|
|
||||||
"nightly-eval-text-2-gpu": "2-gpu-h100",
|
|
||||||
"nightly-eval-vlm-2-gpu": "2-gpu-h100",
|
|
||||||
"nightly-perf-text-2-gpu": "2-gpu-h100",
|
|
||||||
"nightly-perf-vlm-2-gpu": "2-gpu-h100",
|
|
||||||
"nightly-kernel-1-gpu": "1-gpu-h100",
|
|
||||||
"nightly-kernel-8-gpu-h200": "8-gpu-h200",
|
|
||||||
# Weekly test suites
|
|
||||||
"weekly-8-gpu-h200": "8-gpu-h200",
|
|
||||||
}
|
|
||||||
|
|
||||||
DEEPEP_SUITES = {
|
|
||||||
"stage-c-test-8-gpu-h20",
|
|
||||||
"stage-c-test-deepep-4-gpu-h100",
|
|
||||||
"stage-c-test-deepep-8-gpu-h200",
|
|
||||||
"stage-c-test-dsv4-4-gpu-b200",
|
|
||||||
"stage-c-test-dsv4-8-gpu-h200",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MULTIMODAL_TEST_DIR = "python/sglang/multimodal_gen/test"
|
MULTIMODAL_TEST_DIR = "python/sglang/multimodal_gen/test"
|
||||||
|
|
||||||
MULTIMODAL_PATH_TO_RUNNER = {
|
MULTIMODAL_PATH_TO_RUNNER = {
|
||||||
@@ -574,71 +546,100 @@ def detect_multimodal_suite(file_path):
|
|||||||
return MULTIMODAL_DEFAULT_RUNNER, None
|
return MULTIMODAL_DEFAULT_RUNNER, None
|
||||||
|
|
||||||
|
|
||||||
def _extract_suite(content, func_name):
|
def _extract_runner_config(content):
|
||||||
"""Pull a suite name out of a `register_{cuda,cpu}_ci(...)` call.
|
"""Pull `runner_config` and the args string from a `register_cuda_ci(...)` call."""
|
||||||
|
args = re.search(r"^[^#\n]*register_cuda_ci\s*\(([^)]*)\)", content, re.MULTILINE)
|
||||||
Two styles are supported:
|
if not args:
|
||||||
1. legacy: register_cuda_ci(..., suite="stage-X-test-Y")
|
return None, None
|
||||||
2. new: register_cuda_ci(..., stage="stage-X", runner_config="Y")
|
m = re.search(r'runner_config\s*=\s*["\']([^"\']+)["\']', args.group(1))
|
||||||
-> suite = f"{stage}-test-{runner_config}"
|
return (m.group(1), args.group(1)) if m else (None, None)
|
||||||
"""
|
|
||||||
legacy = re.search(
|
|
||||||
rf'^[^#\n]*{func_name}\([^)]*suite\s*=\s*["\']([^"\']+)["\']',
|
|
||||||
content,
|
|
||||||
re.MULTILINE,
|
|
||||||
)
|
|
||||||
if legacy:
|
|
||||||
return legacy.group(1)
|
|
||||||
args = re.search(rf"^[^#\n]*{func_name}\(([^)]*)\)", content, re.MULTILINE)
|
|
||||||
if args:
|
|
||||||
stage_m = re.search(r'stage\s*=\s*["\']([^"\']+)["\']', args.group(1))
|
|
||||||
rc_m = re.search(r'runner_config\s*=\s*["\']([^"\']+)["\']', args.group(1))
|
|
||||||
if stage_m and rc_m:
|
|
||||||
return f"{stage_m.group(1)}-test-{rc_m.group(1)}"
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def detect_suite(file_path_from_test):
|
def detect_suite(file_path_from_test):
|
||||||
"""
|
"""
|
||||||
Read a test file and extract the suite from register_cuda_ci or register_cpu_ci.
|
Read a test file and extract dispatch info from register_cuda_ci or
|
||||||
|
register_cpu_ci.
|
||||||
|
|
||||||
Returns (suite_name, runner_label, use_deepep, is_cpu, error_message).
|
CUDA tests must use `register_cuda_ci(stage=..., runner_config=...)`;
|
||||||
|
runner label, install script, timeout, and rdma_devices are all resolved
|
||||||
|
from scripts/ci/runner_configs.yml — the same single source of truth that
|
||||||
|
drives the main PR test pipeline.
|
||||||
|
|
||||||
|
CPU tests (`register_cpu_ci(...)`) dispatch to the CPU job (ubuntu-latest).
|
||||||
|
|
||||||
|
Returns dict with keys: suite, runner_label, install_script,
|
||||||
|
install_timeout, rdma_devices, is_cpu, error.
|
||||||
"""
|
"""
|
||||||
full_path = f"test/{file_path_from_test}"
|
full_path = f"test/{file_path_from_test}"
|
||||||
with open(full_path, "r") as f:
|
with open(full_path, "r") as f:
|
||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
suite = _extract_suite(content, "register_cuda_ci")
|
def _err(suite, msg):
|
||||||
if suite:
|
return {
|
||||||
runner = CUDA_SUITE_TO_RUNNER.get(suite)
|
"suite": suite,
|
||||||
if not runner:
|
"runner_label": None,
|
||||||
known = ", ".join(f"`{s}`" for s in sorted(CUDA_SUITE_TO_RUNNER))
|
"install_script": "",
|
||||||
return (
|
"install_timeout": "",
|
||||||
suite,
|
"rdma_devices": "",
|
||||||
None,
|
"is_cpu": False,
|
||||||
False,
|
"error": msg,
|
||||||
False,
|
}
|
||||||
(
|
|
||||||
f"Unknown CUDA suite `{suite}` in `{full_path}`.\n\n"
|
rc, args_str = _extract_runner_config(content)
|
||||||
f"Known suites: {known}"
|
if rc:
|
||||||
),
|
configs = _runner_configs.load()
|
||||||
|
cfg = configs.get(rc)
|
||||||
|
if cfg is None:
|
||||||
|
known = ", ".join(f"`{k}`" for k in sorted(configs))
|
||||||
|
return _err(
|
||||||
|
rc,
|
||||||
|
f"Unknown runner_config `{rc}` in `{full_path}` "
|
||||||
|
f"— not in scripts/ci/runner_configs.yml.\n\n"
|
||||||
|
f"Known runner_configs: {known}",
|
||||||
)
|
)
|
||||||
use_deepep = suite in DEEPEP_SUITES
|
install_script = cfg["install"]
|
||||||
return suite, runner, use_deepep, False, None
|
if not _ALLOWED_INSTALL_SCRIPT.match(install_script):
|
||||||
|
return _err(
|
||||||
|
rc,
|
||||||
|
f"Disallowed `install` value `{install_script}` for runner_config "
|
||||||
|
f"`{rc}` in scripts/ci/runner_configs.yml. The slash handler "
|
||||||
|
f"passes this string verbatim into a shell step, so it must "
|
||||||
|
f"match `scripts/ci/cuda/*.sh`.",
|
||||||
|
)
|
||||||
|
runs_on = cfg.get("runs_on")
|
||||||
|
# Resolve $b200_runner sentinel: rerun-test never builds sgl-kernel,
|
||||||
|
# so always pick the non-kernel b200 pool.
|
||||||
|
if runs_on == "$b200_runner":
|
||||||
|
runs_on = _B200_DEFAULT_RUNNER
|
||||||
|
stage_m = re.search(r'stage\s*=\s*["\']([^"\']+)["\']', args_str)
|
||||||
|
suite = f"{stage_m.group(1)}-test-{rc}" if stage_m else rc
|
||||||
|
return {
|
||||||
|
"suite": suite,
|
||||||
|
"runner_label": runs_on,
|
||||||
|
"install_script": install_script,
|
||||||
|
"install_timeout": str(cfg["install_timeout"]),
|
||||||
|
"rdma_devices": cfg.get("rdma_devices", ""),
|
||||||
|
"is_cpu": False,
|
||||||
|
"error": None,
|
||||||
|
}
|
||||||
|
|
||||||
suite = _extract_suite(content, "register_cpu_ci")
|
if re.search(r"^[^#\n]*register_cpu_ci\s*\(", content, re.MULTILINE):
|
||||||
if suite:
|
return {
|
||||||
return suite, "ubuntu-latest", False, True, None
|
"suite": "cpu",
|
||||||
|
"runner_label": "ubuntu-latest",
|
||||||
|
"install_script": "",
|
||||||
|
"install_timeout": "",
|
||||||
|
"rdma_devices": "",
|
||||||
|
"is_cpu": True,
|
||||||
|
"error": None,
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return _err(
|
||||||
None,
|
None,
|
||||||
None,
|
f"No `register_cuda_ci(runner_config=...)` or `register_cpu_ci()` "
|
||||||
False,
|
f"found in `{full_path}`. /rerun-test only supports tests registered "
|
||||||
False,
|
f"via the new-style yml-driven API; nightly/weekly tests aren't "
|
||||||
(
|
f"dispatchable through this command.",
|
||||||
f"No `register_cuda_ci()` or `register_cpu_ci()` found in `{full_path}`.\n\n"
|
|
||||||
f"This file may not be a registered CI test."
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -646,8 +647,8 @@ def _resolve_test_spec(test_spec):
|
|||||||
"""
|
"""
|
||||||
Resolve a single test spec into its components without dispatching.
|
Resolve a single test spec into its components without dispatching.
|
||||||
|
|
||||||
Returns a dict with keys: spec, resolved_path, test_command, suite,
|
Returns a dict with keys: spec, test_command, mode, runs_on,
|
||||||
runner_label, use_deepep, is_cpu, error.
|
install_script, install_timeout, rdma_devices, error.
|
||||||
"""
|
"""
|
||||||
if "::" in test_spec:
|
if "::" in test_spec:
|
||||||
file_part, test_selector = test_spec.split("::", 1)
|
file_part, test_selector = test_spec.split("::", 1)
|
||||||
@@ -674,57 +675,61 @@ def _resolve_test_spec(test_spec):
|
|||||||
test_command = f"{resolved_path}::{test_selector}"
|
test_command = f"{resolved_path}::{test_selector}"
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"Resolved (multimodal): file={resolved_path}, selector={test_selector}, "
|
f"Resolved (multimodal_gen): file={resolved_path}, selector={test_selector}, "
|
||||||
f"runner={runner_label}, command='{test_command}'"
|
f"runner={runner_label}, command='{test_command}'"
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
"spec": test_spec,
|
"spec": test_spec,
|
||||||
"test_command": test_command,
|
"test_command": test_command,
|
||||||
"suite": "multimodal",
|
"mode": "multimodal_gen",
|
||||||
"runner_label": runner_label,
|
"runs_on": runner_label,
|
||||||
"use_deepep": False,
|
"install_script": "",
|
||||||
"is_cpu": False,
|
"install_timeout": "",
|
||||||
"install_diffusion": True,
|
"rdma_devices": "",
|
||||||
"error": None,
|
"error": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
suite, runner_label, use_deepep, is_cpu, err = detect_suite(resolved_path)
|
info = detect_suite(resolved_path)
|
||||||
if err:
|
if info["error"]:
|
||||||
return {"spec": test_spec, "error": err}
|
return {"spec": test_spec, "error": info["error"]}
|
||||||
|
|
||||||
test_command = resolved_path
|
test_command = resolved_path
|
||||||
if test_selector:
|
if test_selector:
|
||||||
test_command = f"{resolved_path} {test_selector}"
|
test_command = f"{resolved_path} {test_selector}"
|
||||||
|
|
||||||
|
mode = "cpu" if info["is_cpu"] else "cuda"
|
||||||
print(
|
print(
|
||||||
f"Resolved: file={resolved_path}, selector={test_selector}, "
|
f"Resolved: file={resolved_path}, selector={test_selector}, "
|
||||||
f"suite={suite}, runner={runner_label}, deepep={use_deepep}, "
|
f"suite={info['suite']}, mode={mode}, runs_on={info['runner_label']}, "
|
||||||
f"cpu={is_cpu}, command='{test_command}'"
|
f"install={info['install_script']}, rdma={info['rdma_devices']}, "
|
||||||
|
f"command='{test_command}'"
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
"spec": test_spec,
|
"spec": test_spec,
|
||||||
"test_command": test_command,
|
"test_command": test_command,
|
||||||
"suite": suite,
|
"mode": mode,
|
||||||
"runner_label": runner_label,
|
"runs_on": info["runner_label"],
|
||||||
"use_deepep": use_deepep,
|
"install_script": info["install_script"],
|
||||||
"is_cpu": is_cpu,
|
"install_timeout": info["install_timeout"],
|
||||||
"install_diffusion": False,
|
"rdma_devices": info["rdma_devices"],
|
||||||
"error": None,
|
"error": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _dispatch_batch(gh_repo, pr, batch, token, reply_comment_id="", reply_marker=""):
|
def _dispatch_batch(gh_repo, pr, batch, token, reply_comment_id="", reply_marker=""):
|
||||||
"""
|
"""
|
||||||
Dispatch a single workflow run for a batch of resolved test specs
|
Dispatch a single workflow run for a batch of resolved test specs that
|
||||||
that share the same (runner_label, use_deepep, is_cpu).
|
share the same dispatch shape (mode + runs_on + install_script +
|
||||||
|
install_timeout + rdma_devices).
|
||||||
|
|
||||||
Returns a dict with keys: specs, success, test_commands, runner_label, run_url, error.
|
Returns a dict with keys: specs, success, test_commands, runner_label, run_url, error.
|
||||||
"""
|
"""
|
||||||
test_commands = [r["test_command"] for r in batch]
|
test_commands = [r["test_command"] for r in batch]
|
||||||
runner_label = batch[0]["runner_label"]
|
mode = batch[0]["mode"]
|
||||||
use_deepep = batch[0]["use_deepep"]
|
runs_on = batch[0]["runs_on"]
|
||||||
is_cpu = batch[0]["is_cpu"]
|
install_script = batch[0]["install_script"]
|
||||||
install_diffusion = batch[0].get("install_diffusion", False)
|
install_timeout = batch[0]["install_timeout"]
|
||||||
|
rdma_devices = batch[0]["rdma_devices"]
|
||||||
|
|
||||||
# Join multiple commands with newlines for the workflow to iterate over
|
# Join multiple commands with newlines for the workflow to iterate over
|
||||||
combined_command = "\n".join(test_commands)
|
combined_command = "\n".join(test_commands)
|
||||||
@@ -751,11 +756,12 @@ def _dispatch_batch(gh_repo, pr, batch, token, reply_comment_id="", reply_marker
|
|||||||
|
|
||||||
pr_head_sha = None
|
pr_head_sha = None
|
||||||
inputs = {
|
inputs = {
|
||||||
|
"mode": mode,
|
||||||
"test_command": combined_command,
|
"test_command": combined_command,
|
||||||
"runner_label": runner_label,
|
"runs_on": runs_on or "",
|
||||||
"use_deepep": str(use_deepep).lower(),
|
"install_script": install_script,
|
||||||
"is_cpu": str(is_cpu).lower(),
|
"install_timeout": install_timeout or "20",
|
||||||
"install_diffusion": str(install_diffusion).lower(),
|
"rdma_devices": rdma_devices,
|
||||||
"reply_comment_id": str(reply_comment_id) if reply_comment_id else "",
|
"reply_comment_id": str(reply_comment_id) if reply_comment_id else "",
|
||||||
"reply_marker": reply_marker,
|
"reply_marker": reply_marker,
|
||||||
}
|
}
|
||||||
@@ -803,7 +809,8 @@ def _dispatch_batch(gh_repo, pr, batch, token, reply_comment_id="", reply_marker
|
|||||||
"specs": [r["spec"] for r in batch],
|
"specs": [r["spec"] for r in batch],
|
||||||
"success": True,
|
"success": True,
|
||||||
"test_commands": test_commands,
|
"test_commands": test_commands,
|
||||||
"runner_label": runner_label,
|
"mode": mode,
|
||||||
|
"runs_on": runs_on,
|
||||||
"run_url": run_url,
|
"run_url": run_url,
|
||||||
"reply_marker": reply_marker,
|
"reply_marker": reply_marker,
|
||||||
}
|
}
|
||||||
@@ -853,7 +860,8 @@ def handle_rerun_test(
|
|||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Handles the /rerun-test command. Resolves all test specs, groups them by
|
Handles the /rerun-test command. Resolves all test specs, groups them by
|
||||||
(runner_label, use_deepep, is_cpu), and dispatches one workflow per group.
|
dispatch shape (mode + runs_on + install_script + install_timeout +
|
||||||
|
rdma_devices), and dispatches one workflow per group.
|
||||||
"""
|
"""
|
||||||
if not skip_permission_check and not _check_rerun_test_permissions(
|
if not skip_permission_check and not _check_rerun_test_permissions(
|
||||||
gh_repo, pr, comment, user_perms, "rerun-test"
|
gh_repo, pr, comment, user_perms, "rerun-test"
|
||||||
@@ -888,14 +896,15 @@ def handle_rerun_test(
|
|||||||
else:
|
else:
|
||||||
resolved.append(r)
|
resolved.append(r)
|
||||||
|
|
||||||
# Phase 2: Group by (runner_label, use_deepep, is_cpu, install_diffusion)
|
# Phase 2: Group by dispatch shape.
|
||||||
groups = {}
|
groups = {}
|
||||||
for r in resolved:
|
for r in resolved:
|
||||||
key = (
|
key = (
|
||||||
r["runner_label"],
|
r["mode"],
|
||||||
r["use_deepep"],
|
r["runs_on"],
|
||||||
r["is_cpu"],
|
r["install_script"],
|
||||||
r.get("install_diffusion", False),
|
r["install_timeout"],
|
||||||
|
r["rdma_devices"],
|
||||||
)
|
)
|
||||||
groups.setdefault(key, []).append(r)
|
groups.setdefault(key, []).append(r)
|
||||||
|
|
||||||
@@ -926,12 +935,7 @@ def handle_rerun_test(
|
|||||||
lines = []
|
lines = []
|
||||||
for dr in dispatch_results:
|
for dr in dispatch_results:
|
||||||
if dr["success"]:
|
if dr["success"]:
|
||||||
install_diff = any(
|
if dr["mode"] == "multimodal_gen":
|
||||||
r.get("install_diffusion", False)
|
|
||||||
for r in resolved
|
|
||||||
if r["spec"] in dr["specs"]
|
|
||||||
)
|
|
||||||
if install_diff:
|
|
||||||
cmds = "\n".join(
|
cmds = "\n".join(
|
||||||
f"python3 -m pytest {cmd} -x" for cmd in dr["test_commands"]
|
f"python3 -m pytest {cmd} -x" for cmd in dr["test_commands"]
|
||||||
)
|
)
|
||||||
@@ -940,15 +944,16 @@ def handle_rerun_test(
|
|||||||
f"cd test/ && python3 {cmd}" for cmd in dr["test_commands"]
|
f"cd test/ && python3 {cmd}" for cmd in dr["test_commands"]
|
||||||
)
|
)
|
||||||
marker = dr.get("reply_marker", "")
|
marker = dr.get("reply_marker", "")
|
||||||
|
label = dr["runs_on"] or dr["mode"]
|
||||||
if dr.get("run_url"):
|
if dr.get("run_url"):
|
||||||
lines.append(
|
lines.append(
|
||||||
f"🚀 `{dr['runner_label']}` ({len(dr['test_commands'])} test{'s' if len(dr['test_commands']) > 1 else ''}): "
|
f"🚀 `{label}` ({len(dr['test_commands'])} test{'s' if len(dr['test_commands']) > 1 else ''}): "
|
||||||
f"⏳ [View workflow run]({dr['run_url']}) {marker}\n"
|
f"⏳ [View workflow run]({dr['run_url']}) {marker}\n"
|
||||||
f"```\n{cmds}\n```"
|
f"```\n{cmds}\n```"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
lines.append(
|
lines.append(
|
||||||
f"🚀 `{dr['runner_label']}` ({len(dr['test_commands'])} test{'s' if len(dr['test_commands']) > 1 else ''}): ⏳ {marker}\n"
|
f"🚀 `{label}` ({len(dr['test_commands'])} test{'s' if len(dr['test_commands']) > 1 else ''}): ⏳ {marker}\n"
|
||||||
f"```\n{cmds}\n```\n"
|
f"```\n{cmds}\n```\n"
|
||||||
f"⚠️ Could not retrieve workflow run URL. "
|
f"⚠️ Could not retrieve workflow run URL. "
|
||||||
f"Check the [Actions tab](https://github.com/{gh_repo.full_name}/actions) for progress."
|
f"Check the [Actions tab](https://github.com/{gh_repo.full_name}/actions) for progress."
|
||||||
|
|||||||
+3
-3
@@ -66,12 +66,12 @@ Every CI-discovered test file must call a registration function at module level:
|
|||||||
```python
|
```python
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
from sglang.test.ci.ci_register import register_cuda_ci
|
||||||
|
|
||||||
register_cuda_ci(est_time=80, suite="stage-b-test-1-gpu-small")
|
register_cuda_ci(est_time=80, stage="stage-b", runner_config="1-gpu-small")
|
||||||
```
|
```
|
||||||
|
|
||||||
Parameters: `est_time` (seconds), `suite` (target suite), `nightly=True` (nightly-only), `disabled="reason"` (temporarily disable).
|
Parameters: `est_time` (seconds), `stage` + `runner_config` (target stage and runner pool from `scripts/ci/runner_configs.yml`), `nightly=True` (nightly-only), `disabled="reason"` (temporarily disable).
|
||||||
|
|
||||||
Keep `est_time` and `suite` as **literal values** — `run_suite.py` collects them by AST parsing.
|
Keep `est_time`, `stage`, `runner_config` as **literal values** — `run_suite.py` collects them by AST parsing.
|
||||||
|
|
||||||
JIT kernel files live outside `test/registered/` but still use registration:
|
JIT kernel files live outside `test/registered/` but still use registration:
|
||||||
- Correctness tests: `python/sglang/jit_kernel/tests/test_*.py` → `stage-b-kernel-unit-1-gpu-large`
|
- Correctness tests: `python/sglang/jit_kernel/tests/test_*.py` → `stage-b-kernel-unit-1-gpu-large`
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.accuracy_test_runner import AccuracyTestParams
|
from sglang.test.accuracy_test_runner import AccuracyTestParams
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
|
|
||||||
# This eval harness applies the chat_template, which is critical for qwen3.5
|
# This eval harness applies the chat_template, which is critical for qwen3.5
|
||||||
# to get good accuracy on gsm8k
|
# to get good accuracy on gsm8k
|
||||||
@@ -11,8 +10,6 @@ from sglang.test.test_utils import (
|
|||||||
ModelLaunchSettings,
|
ModelLaunchSettings,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=720, suite="stage-c-test-4-gpu-b200")
|
|
||||||
|
|
||||||
QWEN35_FP4_MODEL = "nvidia/Qwen3.5-397B-A17B-NVFP4"
|
QWEN35_FP4_MODEL = "nvidia/Qwen3.5-397B-A17B-NVFP4"
|
||||||
ACC_THRESHOLDS = {QWEN35_FP4_MODEL: {"gsm8k": 0.95}}
|
ACC_THRESHOLDS = {QWEN35_FP4_MODEL: {"gsm8k": 0.95}}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
||||||
from sglang.test.kits.kl_divergence_kit import KLDivergenceMixin
|
from sglang.test.kits.kl_divergence_kit import KLDivergenceMixin
|
||||||
from sglang.test.kits.prefix_cache_branching_kit import PrefixCacheBranchingMixin
|
from sglang.test.kits.prefix_cache_branching_kit import PrefixCacheBranchingMixin
|
||||||
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
||||||
|
|
||||||
register_cuda_ci(est_time=142, suite="stage-c-test-4-gpu-h100")
|
|
||||||
|
|
||||||
QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct"
|
QWEN3_NEXT_MODEL = "Qwen/Qwen3-Next-80B-A3B-Instruct"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
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.run_eval import run_eval
|
||||||
from sglang.test.send_one import BenchArgs, send_one_prompt
|
from sglang.test.send_one import BenchArgs, send_one_prompt
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
@@ -15,8 +14,6 @@ from sglang.test.test_utils import (
|
|||||||
write_github_step_summary,
|
write_github_step_summary,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=301, suite="stage-c-test-8-gpu-h200")
|
|
||||||
|
|
||||||
FULL_DEEPSEEK_V3_MODEL_PATH = "deepseek-ai/DeepSeek-V3-0324"
|
FULL_DEEPSEEK_V3_MODEL_PATH = "deepseek-ai/DeepSeek-V3-0324"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
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.run_eval import run_eval
|
||||||
from sglang.test.send_one import BenchArgs, send_one_prompt
|
from sglang.test.send_one import BenchArgs, send_one_prompt
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
@@ -14,8 +13,6 @@ from sglang.test.test_utils import (
|
|||||||
write_github_step_summary,
|
write_github_step_summary,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=1047, suite="stage-c-test-8-gpu-h200")
|
|
||||||
|
|
||||||
DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2"
|
DEEPSEEK_V32_MODEL_PATH = "deepseek-ai/DeepSeek-V3.2"
|
||||||
GLM5_MODEL_PATH = "zai-org/GLM-5-FP8"
|
GLM5_MODEL_PATH = "zai-org/GLM-5-FP8"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import requests
|
|||||||
|
|
||||||
from sglang.srt.environ import envs
|
from sglang.srt.environ import envs
|
||||||
from sglang.srt.utils import get_device_sm, kill_process_tree
|
from sglang.srt.utils import get_device_sm, kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_DRAFT_MODEL_EAGLE3,
|
DEFAULT_DRAFT_MODEL_EAGLE3,
|
||||||
@@ -20,8 +19,6 @@ from sglang.test.test_utils import (
|
|||||||
|
|
||||||
# FlashAttention3 integration tests (requires SM 90+ / H100)
|
# FlashAttention3 integration tests (requires SM 90+ / H100)
|
||||||
# Multiple test classes: FA3, FA3+MLA, FA3+SpecDecode variants
|
# Multiple test classes: FA3, FA3+MLA, FA3+SpecDecode variants
|
||||||
register_cuda_ci(est_time=551, suite="stage-b-test-1-gpu-large")
|
|
||||||
|
|
||||||
GSM_DATASET_PATH = None
|
GSM_DATASET_PATH = None
|
||||||
|
|
||||||
# In case of some machine lack internet connection, we can set OFFLINE_MODE to True.
|
# In case of some machine lack internet connection, we can set OFFLINE_MODE to True.
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from types import SimpleNamespace
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from sglang.srt.utils import get_device_sm, kill_process_tree
|
from sglang.srt.utils import get_device_sm, kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_TEST_LOCAL_ATTENTION,
|
DEFAULT_MODEL_NAME_FOR_TEST_LOCAL_ATTENTION,
|
||||||
@@ -15,10 +14,8 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Local attention with FA3 (requires SM 90+ / H100, tp=4)
|
# Local attention with FA3 (requires SM 90+ / H100, tp=4)
|
||||||
register_cuda_ci(est_time=217, suite="stage-c-test-4-gpu-h100")
|
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(get_device_sm() < 90, "Test requires CUDA SM 90 or higher")
|
@unittest.skipIf(get_device_sm() < 90, "Test requires CUDA SM 90 or higher")
|
||||||
class TestFlashAttention3LocalAttn(CustomTestCase):
|
class TestFlashAttention3LocalAttn(CustomTestCase):
|
||||||
model = DEFAULT_MODEL_NAME_FOR_TEST_LOCAL_ATTENTION
|
model = DEFAULT_MODEL_NAME_FOR_TEST_LOCAL_ATTENTION
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.gpt_oss_common import BaseTestGptOss
|
from sglang.test.gpt_oss_common import BaseTestGptOss
|
||||||
|
|
||||||
register_cuda_ci(est_time=408, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=750, suite="stage-b-test-1-gpu-small-amd-mi35x")
|
|
||||||
|
|
||||||
|
|
||||||
class TestGptOss1Gpu(BaseTestGptOss):
|
class TestGptOss1Gpu(BaseTestGptOss):
|
||||||
def test_mxfp4_20b(self):
|
def test_mxfp4_20b(self):
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import requests
|
|||||||
|
|
||||||
from sglang.lang.chat_template import get_chat_template_by_model_path
|
from sglang.lang.chat_template import get_chat_template_by_model_path
|
||||||
from sglang.srt.utils import kill_process_tree
|
from sglang.srt.utils import kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.kits.ebnf_constrained_kit import EBNFConstrainedMixin
|
from sglang.test.kits.ebnf_constrained_kit import EBNFConstrainedMixin
|
||||||
from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin
|
from sglang.test.kits.json_constrained_kit import JSONConstrainedMixin
|
||||||
from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin
|
from sglang.test.kits.regex_constrained_kit import RegexConstrainedMixin
|
||||||
@@ -22,9 +21,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=245, suite="stage-c-test-4-gpu-h100")
|
|
||||||
register_amd_ci(est_time=350, suite="stage-c-test-4-gpu-amd")
|
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
is_in_amd_ci(),
|
is_in_amd_ci(),
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ python -m unittest test_eval_accuracy_large.TestEvalAccuracyLarge.test_mmlu
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
from sglang.srt.utils import kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.kits.eval_accuracy_kit import HumanEvalMixin, MGSMEnMixin, MMLUMixin
|
from sglang.test.kits.eval_accuracy_kit import HumanEvalMixin, MGSMEnMixin, MMLUMixin
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_TEST,
|
DEFAULT_MODEL_NAME_FOR_TEST,
|
||||||
@@ -16,9 +15,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=496, suite="stage-b-test-1-gpu-small")
|
|
||||||
register_amd_ci(est_time=420, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestEvalAccuracyLarge(CustomTestCase, MMLUMixin, HumanEvalMixin, MGSMEnMixin):
|
class TestEvalAccuracyLarge(CustomTestCase, MMLUMixin, HumanEvalMixin, MGSMEnMixin):
|
||||||
mmlu_score_threshold = 0.70
|
mmlu_score_threshold = 0.70
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import os
|
|||||||
import unittest
|
import unittest
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.lora_utils import (
|
from sglang.test.lora_utils import (
|
||||||
ALL_OTHER_LORA_MODELS,
|
ALL_OTHER_LORA_MODELS,
|
||||||
BACKENDS,
|
BACKENDS,
|
||||||
@@ -29,13 +28,6 @@ from sglang.test.lora_utils import (
|
|||||||
)
|
)
|
||||||
from sglang.test.test_utils import CustomTestCase, is_in_ci
|
from sglang.test.test_utils import CustomTestCase, is_in_ci
|
||||||
|
|
||||||
register_cuda_ci(est_time=224, suite="stage-b-test-1-gpu-small")
|
|
||||||
register_amd_ci(
|
|
||||||
est_time=200,
|
|
||||||
suite="stage-b-test-1-gpu-small-amd",
|
|
||||||
disabled="see https://github.com/sgl-project/sglang/issues/13107",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestLoRABackend(CustomTestCase):
|
class TestLoRABackend(CustomTestCase):
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
from sglang.srt.utils import kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.kits.eval_accuracy_kit import MGSMEnMixin
|
from sglang.test.kits.eval_accuracy_kit import MGSMEnMixin
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MLA_MODEL_NAME_FOR_TEST,
|
DEFAULT_MLA_MODEL_NAME_FOR_TEST,
|
||||||
@@ -11,11 +10,8 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# MLA attention test with MGSM evaluation
|
# MLA attention test with MGSM evaluation
|
||||||
register_cuda_ci(est_time=181, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=1100, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestMLA(CustomTestCase, MGSMEnMixin):
|
class TestMLA(CustomTestCase, MGSMEnMixin):
|
||||||
mgsm_en_score_threshold = 0.8
|
mgsm_en_score_threshold = 0.8
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from types import SimpleNamespace
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from sglang.srt.utils import is_cuda, is_hip, kill_process_tree
|
from sglang.srt.utils import is_cuda, is_hip, kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
||||||
@@ -15,14 +14,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
# DeepSeek-V3 MLA tests with torch compile, FA3, and MTP speculative decoding
|
|
||||||
register_cuda_ci(est_time=543, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(
|
|
||||||
est_time=221,
|
|
||||||
suite="stage-b-test-1-gpu-small-amd",
|
|
||||||
disabled="see https://github.com/sgl-project/sglang/issues/12574",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestMLADeepseekV3(CustomTestCase):
|
class TestMLADeepseekV3(CustomTestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.srt.utils import is_blackwell
|
from sglang.srt.utils import is_blackwell
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
||||||
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
||||||
|
|
||||||
register_cuda_ci(est_time=249, suite="stage-b-test-2-gpu-large")
|
|
||||||
|
|
||||||
|
|
||||||
class TestNvidiaNemotronNanoV2BF16(GSM8KMixin, DefaultServerBase):
|
class TestNvidiaNemotronNanoV2BF16(GSM8KMixin, DefaultServerBase):
|
||||||
model = "nvidia/NVIDIA-Nemotron-Nano-9B-v2"
|
model = "nvidia/NVIDIA-Nemotron-Nano-9B-v2"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
from sglang.test.kits.eval_accuracy_kit import GSM8KMixin
|
||||||
from sglang.test.kits.mmmu_vlm_kit import MMMUMixin
|
from sglang.test.kits.mmmu_vlm_kit import MMMUMixin
|
||||||
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
from sglang.test.server_fixtures.default_fixture import DefaultServerBase
|
||||||
@@ -10,8 +9,6 @@ from sglang.test.server_fixtures.mmmu_fixture import MMMUServerBase
|
|||||||
# GSM8k + MMMU evaluation
|
# GSM8k + MMMU evaluation
|
||||||
|
|
||||||
|
|
||||||
register_cuda_ci(est_time=256, suite="stage-b-test-1-gpu-large")
|
|
||||||
|
|
||||||
MODEL = "nvidia/NVIDIA-Nemotron-Nano-12B-v2-VL-BF16"
|
MODEL = "nvidia/NVIDIA-Nemotron-Nano-12B-v2-VL-BF16"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
from sglang.srt.utils import kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
||||||
@@ -13,9 +12,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=108, suite="stage-b-test-1-gpu-small")
|
|
||||||
register_amd_ci(est_time=130, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestQwen2(CustomTestCase):
|
class TestQwen2(CustomTestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import openai
|
|||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
from sglang.srt.utils import kill_process_tree
|
||||||
from sglang.srt.utils.hf_transformers_utils import get_tokenizer
|
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.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
|
||||||
DEFAULT_URL_FOR_TEST,
|
DEFAULT_URL_FOR_TEST,
|
||||||
@@ -22,9 +21,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=204, stage="stage-b", runner_config="1-gpu-small")
|
|
||||||
register_amd_ci(est_time=258, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestToolChoiceLlama32(CustomTestCase):
|
class TestToolChoiceLlama32(CustomTestCase):
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import unittest
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_TEST,
|
DEFAULT_MODEL_NAME_FOR_TEST,
|
||||||
DEFAULT_SMALL_MODEL_NAME_FOR_TEST,
|
DEFAULT_SMALL_MODEL_NAME_FOR_TEST,
|
||||||
@@ -16,9 +15,6 @@ from sglang.test.test_utils import (
|
|||||||
write_github_step_summary,
|
write_github_step_summary,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=95, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=120, suite="stage-b-test-1-gpu-large-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestBenchOneBatch1GPU(CustomTestCase):
|
class TestBenchOneBatch1GPU(CustomTestCase):
|
||||||
|
|
||||||
|
|||||||
@@ -4,16 +4,12 @@ import unittest
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.runners import TEST_RERANK_QUERY_DOCS, HFRunner, SRTRunner
|
from sglang.test.runners import TEST_RERANK_QUERY_DOCS, HFRunner, SRTRunner
|
||||||
from sglang.test.test_utils import CustomTestCase, is_in_ci
|
from sglang.test.test_utils import CustomTestCase, is_in_ci
|
||||||
|
|
||||||
# Cross encoder model tests
|
# Cross encoder model tests
|
||||||
|
|
||||||
|
|
||||||
register_cuda_ci(est_time=125, suite="stage-b-test-1-gpu-small")
|
|
||||||
register_amd_ci(est_time=150, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
MODELS = [
|
MODELS = [
|
||||||
("cross-encoder/ms-marco-MiniLM-L6-v2", 1, 1e-2),
|
("cross-encoder/ms-marco-MiniLM-L6-v2", 1, 1e-2),
|
||||||
("BAAI/bge-reranker-v2-m3", 1, 1e-2),
|
("BAAI/bge-reranker-v2-m3", 1, 1e-2),
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import unittest
|
|||||||
import torch
|
import torch
|
||||||
from transformers import AutoConfig, AutoTokenizer
|
from transformers import AutoConfig, AutoTokenizer
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
|
||||||
from sglang.test.runners import DEFAULT_PROMPTS, HFRunner, SRTRunner
|
from sglang.test.runners import DEFAULT_PROMPTS, HFRunner, SRTRunner
|
||||||
from sglang.test.test_utils import CustomTestCase, get_similarities, is_in_ci
|
from sglang.test.test_utils import CustomTestCase, get_similarities, is_in_ci
|
||||||
|
|
||||||
@@ -29,8 +28,6 @@ from sglang.test.test_utils import CustomTestCase, get_similarities, is_in_ci
|
|||||||
# python -m unittest test_encoder_embedding_models.TestEncoderEmbeddingModels.test_prefill_logits
|
# python -m unittest test_encoder_embedding_models.TestEncoderEmbeddingModels.test_prefill_logits
|
||||||
|
|
||||||
|
|
||||||
register_cuda_ci(est_time=444, suite="stage-b-test-1-gpu-small")
|
|
||||||
|
|
||||||
MODELS = [("BAAI/bge-small-en", 1, 1e-5), ("BAAI/bge-m3", 1, 1e-5)]
|
MODELS = [("BAAI/bge-small-en", 1, 1e-5), ("BAAI/bge-m3", 1, 1e-5)]
|
||||||
|
|
||||||
ATTENTION_BACKEND = ["torch_native", "triton", "flashinfer"]
|
ATTENTION_BACKEND = ["torch_native", "triton", "flashinfer"]
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
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.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_AUTOROUND_MODEL_NAME_FOR_TEST,
|
DEFAULT_AUTOROUND_MODEL_NAME_FOR_TEST,
|
||||||
@@ -17,8 +16,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=99, suite="stage-b-test-1-gpu-large")
|
|
||||||
|
|
||||||
|
|
||||||
class TestAutoRound(CustomTestCase):
|
class TestAutoRound(CustomTestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
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.run_eval import run_eval
|
||||||
from sglang.test.send_one import BenchArgs, send_one_prompt
|
from sglang.test.send_one import BenchArgs, send_one_prompt
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
@@ -13,8 +12,6 @@ from sglang.test.test_utils import (
|
|||||||
write_github_step_summary,
|
write_github_step_summary,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=874, suite="stage-c-test-4-gpu-b200")
|
|
||||||
|
|
||||||
FULL_DEEPSEEK_V3_FP4_MODEL_PATH = "nvidia/DeepSeek-V3.2-NVFP4"
|
FULL_DEEPSEEK_V3_FP4_MODEL_PATH = "nvidia/DeepSeek-V3.2-NVFP4"
|
||||||
SERVER_LAUNCH_TIMEOUT = 1200
|
SERVER_LAUNCH_TIMEOUT = 1200
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import unittest
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import is_hip, kill_process_tree
|
from sglang.srt.utils import is_hip, kill_process_tree
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_ACCURACY_TEST_FP8,
|
DEFAULT_MODEL_NAME_FOR_ACCURACY_TEST_FP8,
|
||||||
@@ -14,9 +13,6 @@ from sglang.test.test_utils import (
|
|||||||
popen_launch_server,
|
popen_launch_server,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=351, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=600, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestEvalFP8Accuracy(CustomTestCase):
|
class TestEvalFP8Accuracy(CustomTestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import warnings
|
|||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
from sglang.srt.utils import kill_process_tree
|
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.run_eval import run_eval
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_NIGHTLY_EVAL_QUANT_TP1,
|
DEFAULT_MODEL_NAME_FOR_NIGHTLY_EVAL_QUANT_TP1,
|
||||||
@@ -16,8 +15,6 @@ from sglang.test.test_utils import (
|
|||||||
write_results_to_json,
|
write_results_to_json,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=460, suite="stage-b-test-1-gpu-large")
|
|
||||||
|
|
||||||
MODEL_SCORE_THRESHOLDS = {
|
MODEL_SCORE_THRESHOLDS = {
|
||||||
# Baselines observed with gsm8k 5-shot concatenated format via chat API,
|
# Baselines observed with gsm8k 5-shot concatenated format via chat API,
|
||||||
# which scores lower than reported benchmarks using proper CoT format.
|
# which scores lower than reported benchmarks using proper CoT format.
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
DEFAULT_MODEL_NAME_FOR_TEST,
|
DEFAULT_MODEL_NAME_FOR_TEST,
|
||||||
CustomTestCase,
|
CustomTestCase,
|
||||||
@@ -8,9 +7,6 @@ from sglang.test.test_utils import (
|
|||||||
run_mmlu_test,
|
run_mmlu_test,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=131, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=108, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestNoChunkedPrefill(CustomTestCase):
|
class TestNoChunkedPrefill(CustomTestCase):
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,8 @@ python3 test_overlap_schedule.py
|
|||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.test_utils import CustomTestCase, run_mmlu_test
|
from sglang.test.test_utils import CustomTestCase, run_mmlu_test
|
||||||
|
|
||||||
register_cuda_ci(est_time=267, suite="stage-b-test-1-gpu-large")
|
|
||||||
register_amd_ci(est_time=275, suite="stage-b-test-1-gpu-small-amd")
|
|
||||||
|
|
||||||
|
|
||||||
class TestOverlapSchedule(CustomTestCase):
|
class TestOverlapSchedule(CustomTestCase):
|
||||||
def test_no_radix_attention_chunked_prefill(self):
|
def test_no_radix_attention_chunked_prefill(self):
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from types import SimpleNamespace
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from sglang.srt.utils import is_hip
|
from sglang.srt.utils import is_hip
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
|
||||||
from sglang.test.run_eval import run_eval
|
from sglang.test.run_eval import run_eval
|
||||||
from sglang.test.server_fixtures.eagle_fixture import EagleServerBase
|
from sglang.test.server_fixtures.eagle_fixture import EagleServerBase
|
||||||
from sglang.test.test_utils import (
|
from sglang.test.test_utils import (
|
||||||
@@ -12,9 +11,6 @@ from sglang.test.test_utils import (
|
|||||||
DEFAULT_TARGET_MODEL_EAGLE3,
|
DEFAULT_TARGET_MODEL_EAGLE3,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=88, suite="stage-b-test-1-gpu-small")
|
|
||||||
register_amd_ci(est_time=50, suite="stage-b-test-1-gpu-small")
|
|
||||||
|
|
||||||
_is_hip = is_hip()
|
_is_hip = is_hip()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from sglang.test.test_utils import (
|
|||||||
try_cached_model,
|
try_cached_model,
|
||||||
)
|
)
|
||||||
|
|
||||||
register_cuda_ci(est_time=900, suite="stage-c-test-dsv4-4-gpu-b200")
|
register_cuda_ci(est_time=900, stage="stage-c", runner_config="dsv4-4-gpu-b200")
|
||||||
|
|
||||||
MODEL = "deepseek-ai/DeepSeek-V4-Flash"
|
MODEL = "deepseek-ai/DeepSeek-V4-Flash"
|
||||||
SERVER_LAUNCH_TIMEOUT = 3600
|
SERVER_LAUNCH_TIMEOUT = 3600
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from sglang.srt.managers.schedule_batch import FINISH_ABORT # noqa: E402
|
|||||||
from sglang.srt.managers.scheduler import Scheduler # noqa: E402
|
from sglang.srt.managers.scheduler import Scheduler # noqa: E402
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
from sglang.test.ci.ci_register import register_cuda_ci
|
||||||
|
|
||||||
register_cuda_ci(est_time=5, stage="stage-a", runner_config="1-gpu-small")
|
register_cuda_ci(est_time=5, stage="stage-b", runner_config="1-gpu-small")
|
||||||
|
|
||||||
|
|
||||||
class TestDisaggregationPriorityQueueing(unittest.TestCase):
|
class TestDisaggregationPriorityQueueing(unittest.TestCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user