Refine diffusion skills and align JIT kernel docs with the new CI flow (#21283)

This commit is contained in:
Xiaoyu Zhang
2026-03-24 14:38:36 +08:00
committed by GitHub
parent c01ee848b0
commit d9f97b2115
21 changed files with 183 additions and 156 deletions
+2
View File
@@ -429,6 +429,8 @@ register_cuda_ci(est_time=30, suite="stage-b-kernel-unit-1-gpu-large")
# register_cuda_ci(est_time=120, suite="nightly-kernel-1-gpu", nightly=True)
```
Keep `est_time` and `suite` as literal values. `run_suite.py` collects them from the file AST, so computed values and helper wrappers can break CI discovery.
Use `register_cuda_ci(..., disabled="reason")` if the file must stay in-tree but should be skipped in CI (e.g. multi-GPU only).
**Run like CI** (from repo root):
+23 -5
View File
@@ -10,10 +10,16 @@ description: Guide for writing SGLang CI/UT tests. Covers CustomTestCase, CI reg
## Core Rules
1. **Always use `CustomTestCase`** — never raw `unittest.TestCase`
2. **Place tests in `test/registered/<category>/`**only use `test/manual/` for debugging / non-CI tests
2. **Place tests in `test/registered/<category>/`**except JIT kernel tests and benchmarks, which live in `python/sglang/jit_kernel/tests/` and `python/sglang/jit_kernel/benchmark/`
3. **Reuse server fixtures** — inherit from `DefaultServerBase` or write `setUpClass`/`tearDownClass` with `popen_launch_server`
4. **Prefer mock over real server** — when testing logic that doesn't need a server / engine launch (middleware, request routing, config validation, argument parsing), use `unittest.mock.patch` / `MagicMock` and place tests in `test/registered/unit/`. Only launch a real server when the test genuinely needs inference results or server lifecycle behavior.
JIT kernel exception:
- If the task is adding or updating code under `python/sglang/jit_kernel/`, prefer the `add-jit-kernel` skill first.
- JIT kernel correctness tests use `python/sglang/jit_kernel/tests/test_*.py`.
- JIT kernel benchmarks use `python/sglang/jit_kernel/benchmark/bench_*.py`.
- Those files are still executed by `test/run_suite.py`, but through dedicated kernel suites rather than `test/registered/`.
---
## Model & Backend Selection
@@ -224,7 +230,7 @@ Available fixtures in `python/sglang/test/server_fixtures/`:
## CI Registration
Every test file in `test/registered/` **must** call a registration function at module level:
Every CI-discovered test file must call a registration function at module level:
```python
from sglang.test.ci.ci_register import register_cuda_ci
@@ -240,6 +246,12 @@ Parameters:
Only add `register_amd_ci` / `register_cpu_ci` when the test exercises backend-specific code paths.
For JIT kernel files:
- Place correctness tests in `python/sglang/jit_kernel/tests/`
- Place benchmarks in `python/sglang/jit_kernel/benchmark/`
- Use `register_cuda_ci` with kernel suites such as `stage-b-kernel-unit-1-gpu-large`, `stage-b-kernel-benchmark-1-gpu-large`, and optionally `nightly-kernel-1-gpu`
- Keep `est_time` and `suite` as literal values because `test/run_suite.py` collects them by AST parsing
---
## Test Placement
@@ -257,12 +269,17 @@ test/
│ ├── perf/ # performance benchmarks
│ └── <category>/ # create new category if needed
├── manual/ # Non-CI: debugging, one-off, manual verification
└── run_suite.py # CI runner (scans registered/ only)
└── run_suite.py # CI runner (scans registered/ plus jit_kernel test/benchmark files)
python/sglang/jit_kernel/
├── tests/ # JIT kernel correctness tests (CI-discovered by test/run_suite.py)
└── benchmark/ # JIT kernel benchmarks (CI-discovered by test/run_suite.py)
```
**Decision rule** (see also `test/registered/README.md`):
- Component logic, no server → `registered/unit/`
- Kernel correctness `registered/kernels/`
- JIT kernel correctness / benchmarks → `python/sglang/jit_kernel/tests/` or `python/sglang/jit_kernel/benchmark/`
- Other kernel correctness → `registered/kernels/`
- Server needed → `registered/<category>/`
- Local debugging → `manual/`
@@ -289,7 +306,8 @@ Before submitting a test:
- [ ] Inherits from `CustomTestCase` (not `unittest.TestCase`)
- [ ] Has `register_*_ci(...)` call at module level
- [ ] Placed in `test/registered/<category>/`
- [ ] Placed in `test/registered/<category>/`, unless this is a JIT kernel test/benchmark
- [ ] JIT kernel work: files live in `python/sglang/jit_kernel/tests/` or `python/sglang/jit_kernel/benchmark/`
- [ ] Backend-independent tests: `register_cuda_ci` only + smallest model
- [ ] Logic that doesn't need a server / engine launch → unit test in `registered/unit/` (see Unit Tests section)
- [ ] `setUpClass` launches server, `tearDownClass` kills it (if server-based)