Files
wehub-resource-sync 94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:16 +08:00

110 lines
3.7 KiB
Python

from __future__ import annotations
from enum import IntEnum
import torch
import triton
import triton.language as tl
from sglang.srt.environ import envs
def _phase_repr(phase: int | IntEnum) -> str:
if isinstance(phase, IntEnum):
return f"{phase.name}({int(phase)})"
return str(int(phase))
def _host_debug(msg: str) -> None:
if envs.SGLANG_PHASE_CHECKER_DEBUG.get():
print(msg, flush=True)
# debug=True so tl.device_assert below actually raises. Without it the assert
# is stripped at compile time and only tl.device_print fires (the assert is
# gated on the TRITON_DEBUG env var by default — see tl.device_assert docstring).
@triton.jit(debug=True)
def _phase_check_kernel(
phase_ptr,
enable_assert_ptr,
EXPECT_PHASE: tl.constexpr,
NEXT_PHASE: tl.constexpr,
CALLER_TAG: tl.constexpr,
):
cur = tl.load(phase_ptr)
enable_assert = tl.load(enable_assert_ptr)
if enable_assert != 0:
if cur != EXPECT_PHASE:
# constexpr values get baked into the prefix string at compile time;
# only `cur` is runtime.
tl.device_print(
f"[SimplePhaseChecker FAIL] caller_tag={CALLER_TAG} "
f"expect={EXPECT_PHASE} next={NEXT_PHASE} actual=",
cur,
)
tl.device_assert(cur == EXPECT_PHASE, "SimplePhaseChecker: phase mismatch")
tl.store(phase_ptr, NEXT_PHASE)
class SimplePhaseChecker:
"""GPU-side state machine for any int-keyed phase sequence."""
def __init__(self, *, initial_phase: int | IntEnum, device: torch.device) -> None:
self._initial_phase = int(initial_phase)
self._phase = torch.tensor(
self._initial_phase, dtype=torch.int32, device=device
)
self._enable_assert_device = torch.zeros(1, dtype=torch.int32, device=device)
self._caller_tag_registry: dict[str, int] = {}
_host_debug(
f"[SimplePhaseChecker.__init__] device={device} "
f"initial_phase={_phase_repr(initial_phase)} "
f"enable_assert=OFF (call enable_assert() after init is done)"
)
def enable_assert(self) -> None:
"""Reset phase to initial_phase, then enable the device-side assert."""
self._reset_to_idle()
self._enable_assert_device.fill_(1)
_host_debug(f"[SimplePhaseChecker.enable_assert] assert ENABLED")
def update(
self,
*,
expect_phase: int | IntEnum,
next_phase: int | IntEnum,
caller_name: str = "",
) -> None:
caller_tag = self._resolve_caller_tag(caller_name)
_host_debug(
f"[SimplePhaseChecker.update] caller={caller_name!r} "
f"caller_tag={caller_tag} "
f"expect={_phase_repr(expect_phase)} "
f"next={_phase_repr(next_phase)} "
f"capturing={torch.cuda.is_current_stream_capturing()}"
)
_phase_check_kernel[(1,)](
self._phase,
self._enable_assert_device,
EXPECT_PHASE=int(expect_phase),
NEXT_PHASE=int(next_phase),
CALLER_TAG=caller_tag,
)
def _reset_to_idle(self) -> None:
self._phase.fill_(self._initial_phase)
_host_debug(
f"[SimplePhaseChecker._reset_to_idle] phase reset to "
f"{self._initial_phase}"
)
def _resolve_caller_tag(self, caller_name: str) -> int:
registry = self._caller_tag_registry
if caller_name not in registry:
registry[caller_name] = len(registry) + 1
_host_debug(
f"[SimplePhaseChecker] registered caller_tag "
f"{registry[caller_name]} <- {caller_name!r}"
)
return registry[caller_name]