Skip to content

[XPU] split Intel nightly into kernel-main and kernel-wheel jobs - #41857

Merged
mingfeima merged 19 commits into
sgl-project:mainfrom
arathi-hlab:xpu-nightly-release-suite
Oct 9, 2026
Merged

mingfeima merged 19 commits into
sgl-project:mainfrom
arathi-hlab:xpu-nightly-release-suite

Conversation

@arathi-hlab

@arathi-hlab arathi-hlab commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

The Intel XPU nightly now runs two setups:

Job Image sglang sgl-kernel-xpu Suites
nightly-xpu-kernel-main-{1,2,4,8}-gpu (renamed from nightly-xpu-*) intel/sglang-dev:latest-kernel-main main main (built from source) nightly-xpu-kernel-main-{1,2,4,8}-gpu (renamed from nightly-xpu-{1,2,4,8}-gpu)
nightly-xpu-kernel-wheel-1-gpu (new) intel/sglang-dev:latest main prebuilt wheel from pyproject_xpu.toml stage-a-test-1-gpu-xpu + stage-b-test-1-gpu-xpu (PR CI, 39 files), then nightly-xpu-kernel-wheel-1-gpu (9 files)

Both images are published by release-docker-intel-xpu-nightly.yml (#41650).

Schedule (single intel-bmg-nightly runner, so jobs run one after another):

  • nightly-xpu-kernel-wheel-1-gpu: 22:30 IST (0 17 * * * UTC)
  • nightly-xpu-kernel-main-*: 01:00 IST (30 19 * * * UTC)

Each cron runs only its own jobs; workflow_dispatch, push and workflow_call runs still run all of them. The concurrency group includes the cron, so one scheduled run doesn't cancel the other.

Changes

  • nightly-test-intel.yml:
    • Rename the four existing jobs and pass --image-tag latest-kernel-main to xpu_ci_start_container.sh.
    • Add nightly-xpu-kernel-wheel-1-gpu. It installs the PR CI test deps and the diffusion extra's deps (read from pyproject_xpu.toml) under a constraints file that pins the image's torch/sglang/kernel builds, so the image itself is tested. It runs the PR CI suites with the same 180-min budget and --enable-retry, then runs nightly-xpu-kernel-wheel-1-gpu --nightly. The second step runs even if the first fails. The job timeout is 600 min because the two suites together (~5h est.) exceed the 360-min default.
    • Split the schedule into two crons (above) and key the concurrency group on the cron.
    • Add the new job to check-all-jobs.
  • nightly-xpu-kernel-wheel-1-gpu's PR CI step: pass --timeout-per-file 600 --retry-timeout-increase 0 to the stage-a + stage-b run. The slowest passing file in recent runs took 487s; hung files (e.g. test_xpu_basic, kv_canary/test_self_unit_req_to_expected_token_ids_manager) ran the full 30 min before retrying. The same cap for pr-test-xpu.yml, plus fail-fast per-file overrides, is in [XPU CI] Optimize PR CI per-file timeouts and fail hanging tests fast #42048.
  • Rename the nightly-xpu-{1,2,4,8}-gpu suites to nightly-xpu-kernel-main-{1,2,4,8}-gpu (test registrations, run_suite.py, --suite args, metrics artifact names). This includes test_fused_inplace_qknorm_rope_xpu (added on main by [XPU] Enable fused QK-norm + RoPE for Qwen3-MoE #40190), which goes to kernel-main only because it imports the new sgl_kernel.fused_inplace_qknorm_rope op, which the released wheel may not have.
  • xpu-ci-job-monitor.yml: point the per-model report at the renamed nightly-xpu-kernel-main-*-metrics artifacts.
  • run_suite.py: add nightly-xpu-kernel-wheel-1-gpu to the XPU nightly suites.
  • Register these tests to nightly-xpu-kernel-wheel-1-gpu. They keep their nightly-xpu-kernel-main-1-gpu registration and existing est_time:
    test_deepseek_ocr_triton, test_gemma_4_e2b, test_spec_eagle_parity, test_xpu_classification, test_xpu_embedding, test_xpu_rerank, test_xpu_reward, test_xpu_zimage_turbo, test_deepseek_ocr_2_olmbench.

The workflow file name is unchanged, so release-branch-cut.yml and ci_failures_analysis.py, which refer to it by file name, are unaffected.

Tests

  • pre-commit passes on the changed files, including the registry validator and the duplicate job-name check.
  • actionlint reports no new issues (only the existing intel-bmg-nightly label and cancel-in-progress warnings).
  • Suite selection via run_suite.py's collector: validate_all_suites passes. stage-a + stage-b select 39 files (6737s est.), nightly-xpu-kernel-wheel-1-gpu selects the 9 files above (10500s est.), and nightly-xpu-kernel-main-1-gpu (renamed from nightly-xpu-1-gpu) was unchanged at 13 before the latest main merge; it now also selects test_fused_inplace_qknorm_rope_xpu.
  • After the latest main merge, the registry validator passes across all files (pre-commit run --all-files).
  • Not yet run on the runners. A workflow_dispatch run will be the first real check.

CI States

Latest PR Test (Base): ❌ Run #37750782757
Latest PR Test (Extra): ❌ Run #37750782172
Latest PR Test (AMD ROCm 10): ❌ Run #37750782599

The existing nightly jobs now test sglang main + sgl-kernel-xpu main, and a
new job tests sglang main + the prebuilt kernel wheel with release coverage.

- Rename nightly-xpu-{1,2,4,8}-gpu jobs to main-nightly-xpu-{1,2,4,8}-gpu and
  pull intel/sglang-dev:latest-kernel-main (published by
  release-docker-intel-xpu-nightly.yml). Their suites are unchanged.
- Add release-nightly-xpu-1-gpu, which pulls intel/sglang-dev:latest and runs
  the PR CI suites (stage-a-test-1-gpu-xpu + stage-b-test-1-gpu-xpu) followed
  by the new release-nightly-xpu-1-gpu suite.
- Register the new suite in run_suite.py and add it to 9 1-GPU tests, which
  keep their nightly-xpu-1-gpu registration.
… IST

release-nightly-xpu-1-gpu runs on the 17:00 UTC cron and
main-nightly-xpu-* on the 19:30 UTC cron; manual, push and workflow_call
runs still run all jobs. The concurrency group now includes the cron, so
one scheduled run doesn't cancel the other while it is still running.
@arathi-hlab arathi-hlab added the run-ci CI: run the baseline test suite on this PR label Sep 30, 2026
arathi-hlab and others added 6 commits September 30, 2026 15:46
Healthy stage-a/stage-b files finish in under ~8 min (max 487s across
recent runs); hung files ran to the 30-min limit before retrying.
run_suite adds --retry-timeout-increase (600s default) to
--timeout-per-file when retry is on, so 600 became 1200s; the old
default was 1200+600 = 1800s, the 30-min hangs seen in CI.
sgl-project#40972 passes defer_expansion to select_decode_tokens and updated the
CUDA test's _DispatchIndexer but not this XPU copy, so it raised
TypeError in stage-a.
Add a kwarg-only `timeout=` to the register_*_ci markers. When set it
overrides --timeout-per-file for that file, so a known-flaky hang fails
quickly and the existing --enable-retry path reruns it.

Across 156 recent XPU stage-a jobs, these files intermittently hang right
after XPU device init with no output, burning the full 600s/1800s limit
before a retry that passes in seconds. Cap each at ~3x its observed max:

  file                                                normal   hangs  timeout
  xpu/test_xpu_basic.py                               21-41s     7     180
  kv_canary/test_self_unit_req_to_expected_...py      8-74s      3     120
  kernels/ops/kvcache/test_hisparse.py                6-9s      11     120
  kv_canary/test_self_unit_plan_input.py              7-11s      6     120
  xpu/test_layernorm_xpu.py                           7-11s      4     120
  e2e/xpu/test_xpu_fp8_linear.py                      8-72s      7     240
  xpu/test_intel_xpu_backend.py                       58-112s    7     360
@github-actions github-actions Bot added the npu label Oct 1, 2026
arathi-hlab and others added 5 commits October 1, 2026 13:26
Keep the hang-timeout change scoped to XPU so other vendors' CI is not
touched: revert the register_*_ci `timeout=` kwarg and the per-test-file
edits, and instead add a repeatable `run_suite.py --timeout-override
PATH=SECONDS` (inert unless passed). pr-test-xpu.yml passes the same
7 overrides as before.
The overrides exist to cut silent hangs short; a retry that is merely slow
should still get the normal --timeout-per-file budget (600s on XPU) rather
than being killed by the tight first-attempt cap.
The pr-test-xpu.yml per-file cap and the --timeout-override work now live
in their own PR, so this one only carries the nightly kernel-main/release
split.

@mingfeima mingfeima left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would avoid A/B for PR #41857. They describe kernel provenance, not test stages, so the names are opaque and easy to confuse with PR CI’s stage-a and stage-b.

Other backends use descriptive names: NVIDIA includes the nightly-test-nvidia.yml, NPU distinguishes nightly-test-npu.yml, and AMD has a nightly-test-amd.yml. The XPU image publisher already calls its variants main and wheel.

I recommend nightly-xpu-kernel-main-{1,2,4,8}-gpu and nightly-xpu-kernel-wheel-1-gpu, consistently across jobs, suites, and artifacts.

Comment on lines +482 to +487
docker exec ci_sglang_xpu /opt/venv/bin/python3 -m pip install --no-cache-dir "lm-eval==0.4.9"
# Test deps of the PR CI suites (mirrors pr-test-xpu.yml, minus the sglang reinstall).
docker exec ci_sglang_xpu /opt/venv/bin/python3 -m pip install --no-cache-dir pytest expecttest ray huggingface_hub "lmcache>=0.3.9" accelerate
# Diffusion extras (needed by test_xpu_zimage_turbo).
# Pins mirror python/pyproject_xpu.toml [project.optional-dependencies.diffusion].
docker exec ci_sglang_xpu /opt/venv/bin/python3 -m pip install --no-cache-dir "sglang[diffusion]"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nightly-B-xpu-1-gpu is supposed to test the image's sglang and the prebuilt kernel wheel. pip install "lm-eval==0.4.9" and pip install "sglang[diffusion]" can replace that torch/sglang with PyPI builds. Install the diffusion extra's dependencies directly, and keep the XPU torch index, so the image packages stay in place.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 141d8ba. The job now writes a constraints file pinning the image's installed torch/torchvision/torchaudio/sglang/sglang-kernel-xpu versions. It installs lm-eval, the PR CI test deps and the diffusion extra's deps with -c that file plus --extra-index-url https://download.pytorch.org/whl/xpu. sglang[diffusion] is gone: the diffusion deps are read from the checkout's pyproject_xpu.toml. If a dependency ever needs a different torch/sglang, pip now fails instead of silently replacing the image's builds.

…ages in wheel job

- Rename nightly-A-xpu-{1,2,4,8}-gpu -> nightly-xpu-kernel-main-{1,2,4,8}-gpu and
  nightly-B-xpu-1-gpu -> nightly-xpu-kernel-wheel-1-gpu across jobs, suites,
  test registrations and metrics artifacts, matching the image's main/wheel variants.
- In the kernel-wheel job, install test extras under a constraints file pinning the
  image's torch/torchvision/torchaudio/sglang/sglang-kernel-xpu, and install the
  diffusion extra's deps from pyproject_xpu.toml instead of sglang[diffusion] from
  PyPI, so the job keeps testing the image's builds.
@arathi-hlab

Copy link
Copy Markdown
Collaborator Author

@mingfeima Thanks, renamed in 141d8ba: nightly-xpu-kernel-main-{1,2,4,8}-gpu and nightly-xpu-kernel-wheel-1-gpu, consistently across jobs, check-all-jobs, run_suite.py, test registrations, metrics artifacts and the xpu-ci-job-monitor.yml artifact pattern. The PR description is updated to match.

@arathi-hlab arathi-hlab changed the title [XPU] split Intel nightly into kernel-main and release (wheel) jobs [XPU] split Intel nightly into kernel-main and kernel-wheel jobs Oct 6, 2026

@mingfeima mingfeima left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test/registered/xpu/test_fused_inplace_qknorm_rope_xpu.py this file is still registered to nightly-xpu-1-gpu, update it.

sgl-project#40190 landed on main registering test_fused_inplace_qknorm_rope_xpu.py to
nightly-xpu-1-gpu, which this PR removes, so run_suite.py's validate_all_suites
rejects it. The test imports sgl_kernel.fused_inplace_qknorm_rope, a new op not
guaranteed in the released wheel, so register it to kernel-main only.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deepseek npu run-ci CI: run the baseline test suite on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants