contribution/compass
sgl-project/sglang

SGLang

551 signals · 636 observation events

Open repository ↗

SGLang is a high-performance serving framework for large language models and multimodal models.

31.8K stars7.9K forksPythonApache-2.0attentionblackwellcudadeepseekdiffusionglmgpt-ossinferencekeyword: SGLang
PROJECT NEWS

Release, roadmap, and discussion

All news →
sgl-project/sglang

SGLang

AI Infrastructure
Latest stable

v0.5.17

v0.5.17
  • New Model Support
  • Kimi K3
  • [Kimi] Support kimi-k3: #32541 ⭐
  • [Kimi] Support DCP + DSpark (ported from kimi-k3 branch): #32828
  • [Kimi K3] Add reasoning, tool-call, and OpenAI serving support: #33025
Original release notes ↗

Publicly indicated next

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. changedtext, updatedAt
  2. changedtext, updatedAt
  3. discoveredinitial snapshot
  4. changedupdatedAt
  5. changedtext, updatedAt
  6. changedupdatedAt
  7. changedtext, updatedAt
  8. changedupdatedAt, assignees
  9. changedupdatedAt
  10. changedtext, updatedAt
  11. changedupdatedAt, state
  12. changedtext, updatedAt, labels
  13. changedtext, updatedAt
  14. discoveredinitial snapshot
  15. changedtext, updatedAt
  16. changedtext, updatedAt
  17. discoveredinitial snapshot
  18. changedtext, updatedAt
  19. discoveredinitial snapshot
  20. changedtext, updatedAt
  21. discoveredinitial snapshot
  22. changedupdatedAt, state
  23. changedtext, updatedAt
  24. changedupdatedAt, state
  25. changedtext, updatedAt
  26. discoveredinitial snapshot
  27. discoveredinitial snapshot
  28. changedupdatedAt
  29. discoveredinitial snapshot
  30. changedtext, updatedAt
50 shown
pull request

Delete cutlass_mla, non-Marlin GPTQ, AWQ AOT kernel, and Dual Chunk Flash Attention

## Summary - Delete the `cutlass_mla` attention backend (kernel + Python integration): SM10.0-only decode kernel, already disabled on GB300 (SM10.3), falls through to `FlashInferMLABackend` for everything except plain decode, no CI coverage. - Delete the non-Marlin GPTQ CUDA kernel (`gptq_gemm`/`gptq_shuffle`) and the `"gptq"` GPU quantization choice: supers

importance 2@b8zhongdocumentationquantspeculative-decodingsgl-kernelblackwellOriginal evidence ↗
pull request

[AMD] Strict bit-exact SWA HiCache for DeepSeek-V4 with unified_kv: SWA-window + c4/indexer state riding across L1/L2/L3

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation <!-- Describe the purpose and goals of this pull request. --> DeepSeek-V4's `unified_kv

importance 2@amd-danli103opendeepseekhicacheOriginal evidence ↗
pull request

[PD] Don't release KV pages while Mooncake transfers are in flight

## The bug An abort or timeout _during a prefill→decode transfer_ frees the request's KV pages back to the allocator, but it **_does not cancel the transfer_**. The next request can then be allocated those same pages and have them overwritten by the earlier, still-in-flight write, causing the next request to hold the first request's KV, with no error raised

importance 2@KastanDayopenhigh priorityhicacheOriginal evidence ↗
pull request

Support streaming session on NPU

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation Support streaming session on NPU. ## Modifications Modify streaming_session.py, when pa

importance 2@sigama-wopenrun-ciOriginal evidence ↗
pull request

[AMD][Not-Merge]: torch fallbacks for top-k/top-p renorm so DSPARK/DFLASH works on ROCm

## Problem `build_dflash_verify_target_probs()` calls `top_k_renorm_prob()` and `top_p_renorm_prob()` unconditionally, but `sgl_kernel` only exports them under CUDA/MUSA. On ROCm both are `None`, so DSPARK/DFLASH speculative decoding dies with: ``` TypeError: 'NoneType' object is not callable ``` as soon as a request sets `top_p < 1` **or** `top_k > 1`. That

importance 2@stefanskiasanclosedamdDO NOT MERGEOriginal evidence ↗
pull request

Optimize delayed sample and mrope position computation

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation Improve inference performance by reducing M-RoPE position computation overhead and impr

importance 2@Estrella-xxclosedrun-ciOriginal evidence ↗
pull request

[Bugfix] Fix Llama 4 FA3 local attention with paged KV cache

[by Codex] ## Motivation Llama 4 Scout with FlashAttention 3 crashes during warmup on H100 when the KV cache uses pages larger than one token. The same workload succeeds with `--page-size 1`. This is a long-standing paged-local-attention bug rather than a new 0.5.7 regression: the explicit page-size-16 reproducer fails on 0.5.6.post2, 0.5.7, and current `mai

importance 2@nvpohanhopenrun-ciOriginal evidence ↗
pull request

GLM5.2 DSA Indexer Fallback

## Motivation `SGLANG_FP8_PAGED_MQA_LOGITS_TORCH=1` is meant to be the escape hatch that runs the FP8 MQA-logits indexer without DeepGEMM. Today it only covers the **dsv4** indexer path (`dsv4/metadata.py`, `dsv4/indexer.py`). GLM 5.2 (`GlmMoeDsaForCausalLM`, derived from `DeepseekV2ForCausalLM`) runs the **dsa** indexer instead, which calls `deep_gemm.get_p

importance 2@wenscarlopenfeaturerun-ciGLMOriginal evidence ↗
pull request

fix(dsa): use FlashInfer fused top-k for packed PAGED rows

## Motivation @humansand - [sgl-project/sglang#32490](https://github.com/sgl-project/sglang/pull/32490) added an SGL-kernel fallback because FlashInfer previously used one `row_starts` tensor for both score and page-table windows. - [flashinfer-ai/flashinfer#4169](https://github.com/flashinfer-ai/flashinfer/pull/4169) adds `page_table_row_starts`, allowing i

importance 2@zianglihopenrun-ciOriginal evidence ↗
pull request

[AMD] DeepSeek-V4 MI355X: eliminate bpreshuffle fp8-scale relayout copy in dense w8a8 linear

## Summary On MI355X (gfx950) the CK bpreshuffle w8a8 blockscale GEMM consumes the per-group activation scale in **column-major** `[num_groups, tokens]` layout. `aiter_w8a8_block_fp8_linear` quantizes the activation row-major and then relays the scale out with `materialize_bpreshuffle_fp8_scale` = `.t().contiguous().t()` — a real relayout **copy per dense w8

importance 2@karverma-amdopenamddeepseekrun-ciOriginal evidence ↗
pull request

[MoonEP] BF16 PoC integration for Kimi-K3

It is opened as a draft for partial task of #32607's Integrate MoonEP, not as a final production-ready merge request. ### What is included - Distinct `moonep` MoE A2A backend recognition. - MoonEP dispatch/combine data contracts and process-wide buffer facade. - BF16 contiguous expert layout and correctness-first expert segment runner. - Eager runtime path:

importance 2@wirybeaveropendocumentationOriginal evidence ↗
pull request

[XPU] Use SYCL kernels for topk_transform_512 on XPU

## Motivation Route `topk_transform_512` and `topk_transform_512_v2` to the native SYCL kernels on XPU. The SYCL implementations are added in the `sgl-kernel-xpu` PR (https://github.com/sgl-project/sgl-kernel-xpu/pull/366) and exposed as `torch.ops.sgl_kernel.topk_transform_512{,_v2}`. Without this dispatch, XPU runs fall through to the JIT CUDA path and fai

importance 2@cyxlilyopenrun-cijit-kernelrun-ci-extraOriginal evidence ↗
pull request

[XPU] Use a fused GDN kernel from sgl-kernel for Qwen3.5

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation <!-- Describe the purpose and goals of this pull request. --> To use a fused GDN kernel

importance 2@Xia-Weiwenopenrun-ciOriginal evidence ↗
pull request

[XPU][DSV4] Fix MXFP4 expert scale dtype handling

## Description Reinterpret MXFP4 expert scales as raw `uint8` E8M0 bytes for the Intel XPU fused MoE kernel. <!-- pr-states:start --> --- ### CI States Latest PR Test (Base): <!-- slot:pr-test:start -->:x: [Run #31554105834](https://github.com/sgl-project/sglang/actions/runs/31554105834)<!-- slot:pr-test:end --> Latest PR Test (Extra): <!-- slot:pr-test-extr

importance 2@YangKai0616openintelxpurun-ciOriginal evidence ↗
pull request

Fix Whisper transcription for audio over 30 seconds

## Summary Whisper's feature extractor pads or truncates input to its fixed 3000-mel-frame (30-second) encoder window, so `/v1/audio/transcriptions` silently drops everything after 30 seconds when the serving layer sends a long file as one generation. This change: - splits long Whisper audio into contiguous chunks of at most 30 seconds; - places each seam at

importance 2@shenxiulopenrun-cirun-ci-extraOriginal evidence ↗
pull request

[DSV4] Support raw-index output in TopK v2

## Summary Allow TopK v2 to populate a raw-index output buffer. DSV4 sparse prefill internally allocates `c4_sparse_raw_indices` even when `--enable-return-indexer-topk` is disabled. The previous `raw_indices is None` gate therefore forced the InfX sparse-prefill path to fall back to TopK v1. When `--enable-return-indexer-topk` is enabled, the capture-only t

importance 2@weireweireopenrun-ciOriginal evidence ↗
pull request

[Weight Cache] Support static DP/EP layouts

## Motivation Weight-cache daemons and engines must construct identical model-parallel layouts before CUDA IPC can safely map a cached MoE shard. The existing daemon launcher rejected `dp_size > 1`, preventing static DP/EP deployments from using the daemon-backed weight cache. This change adds static DP/EP layout support to the CUDA IPC weight-cache path. It

importance 2@UNIDY2002openrun-ciOriginal evidence ↗
pull request

[MoE] Fix flashinfer TRT-LLM BF16 expert weight reload on refit

## Motivation `process_weights_after_loading` rewrites BF16 MoE expert weights into the flashinfer TRT-LLM BlockMajorK layout whenever `use_flashinfer_trtllm_moe` is set, and that flag covers **both** `flashinfer_trtllm` and `flashinfer_trtllm_routed`. The inverse hook, however, was gated on `is_flashinfer_trtllm_routed()` alone. So with `--moe-runner-backen

importance 2@Kh4Lopenbugquantrun-ciOriginal evidence ↗
pull request

Avoid materializing GDN QKV tensors during target verification

## Summary This PR removes redundant Q/K/V materialization from compatible GDN speculative target-verification paths. `causal_conv1d_update` already produces packed QKV. Previously, every GDN layer launched `fused_qkv_split_gdn_prefill_kernel` to copy that output into three contiguous tensors before Triton target verification. Triton accepts explicit token s

importance 2@vedantjh2openrun-ciOriginal evidence ↗
pull request

[DSV4] Support dsv4 decode TBO with deepep backend

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation When deploying deepseek v4 with large-scale EP, cross-node communication latency is non

importance 2@SYChen123opendeepseekOriginal evidence ↗
pull request

[Perf] Skip trivial DSV4 nonpaged indexer logits

## Motivation SGL Top-K v1/v2 directly emits sequential indices when a row has no more candidates than `index_topk`, so those logits are never read. The DSV4 eager nonpaged path still computed them with DeepGEMM. ## Modifications - Encode trivial DeepGEMM rows as empty `[ks, ks)` ranges. - Preserve the original lengths used by KV gathering and Top-K. - Apply

importance 2@weireweireopenrun-ciOriginal evidence ↗
pull request

Improve M3 performance on MI350

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation Improve M3 performance on MI350. <!-- Describe the purpose and goals of this pull reque

importance 2@zcnrexopenquantamdjit-kernelOriginal evidence ↗
pull request

Fix GLM streaming unknown-tool filtering

## Motivation GLM-4 and GLM-4.7 streaming parsers currently emit undeclared tool names even when `SGLANG_FORWARD_UNKNOWN_TOOLS` is disabled, unlike their non-streaming paths. This can expose a call that the request did not advertise. Fixes #33902. ## Modifications - centralize the existing unknown-tool policy in `BaseFormatDetector` - validate each GLM strea

importance 2@Ricardo-M-LopenOriginal evidence ↗
pull request

[Kimi K3] Rework skipped-think fix as opt-in force_nonempty_content with streaming coverage

Stacked on top of #33995. Keeps @yhyang201's original commit `d11868d7d9` in history and supersedes it with a rework. ## Why the rework The original fix makes non-stream output content when there are no think markers at all ("still going" was flipped to `content`). That has two leaks: - **Truncated reasoning becomes content**: a `max_tokens` cut also produce

importance 2@JustinTong0323openOriginal evidence ↗
pull request

config: the last runner-side instance reads read the bags

Six reads were left on `self.server_args` outside the per-instance boundary the design reserves for the tokenizer-manager family, and each had a different reason to be there: - `Scheduler.process_input_requests` (`mm_feature_transport`) and `BaseSpecWorker._build_hicache_draft_plan` (`enable_hierarchical_cache`) are plain leaves → `get_mm()` / `get_memory()`

importance 2@ch-wanopenspeculative-decodingnpuOriginal evidence ↗
pull request

config: a named entry point for the resolution pipeline, and the last dynamic config read

Two small changes that make the configuration tier's shape honest. **A named entry point for resolution.** `__post_init__` was a 200-line dispatcher, which made "where does resolution run?" a question about a dunder. It is now one line — `self._run_resolution_pipeline()` — with the dispatcher and its ordering contract living in the named method. The body is

importance 2@ch-wanopenOriginal evidence ↗
pull request

config: the alias form of the runner-side instance read

The previous batch counted `self.server_args.X` and called the runner surface done. It was not: the same read spelled through a local alias — `server_args = model_runner.server_args` (or `sa = kvc.server_args`, `args = ...`) followed by `server_args.leaf` — is the same process-global read wearing a local name, and the AST census counts **57 of them** across

importance 2@ch-wanopenOriginal evidence ↗
pull request

config: the post-publish consumers of the pinned surface read the bags

Four batches of conversions, each one a row of the disposition table the previous member pins, and each one driven by that ratchet: after the flip it fails the other way — "gone (delete from `_EXPOSED`)" with the exact entries to remove. 1. **`page_size` in seven speculative-worker constructors.** All run after publish and all keep a copy of a process-level

importance 2@ch-wanopenloraOriginal evidence ↗
pull request

config: state the bag contract as what resolution produced, and the skill rule that goes with it

**The bag contract.** `test_bag_values_match_server_args` asserted `bag == field`. That holds today only because construction resolves in place; once the record stays raw it becomes **false by design** for every field resolution fills in. Rewritten against the resolved projection, which is the half that survives: the bag carries what resolution produced. The

importance 2@ch-wanopendocumentationOriginal evidence ↗
pull request

[Review vehicle] config: the runner-side instance reads finish converging (not for merge)

**Not for merge.** This branch carries the whole stack so CI runs it as one unit and review comments have one place to land. The members merge individually, in order: | # | PR | what | |---|---|---| | 0 | #34376 | **the stack's base, and a fix for main**: the linear-attn kernel choice becomes a per-runner stamp, plus a direct draft/target loader-hook parity

importance 2@ch-wanopendocumentationloraspeculative-decodingblackwellnpuOriginal evidence ↗
pull request

fix(scheduler): track max prefill batch size over recent real admissions

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation `Scheduler.max_prefill_bs` previously decayed on every scheduler pass. Because the valu

importance 2@hanwlaxopenrun-ciOriginal evidence ↗
pull request

[KDA] Close Phase A CAKE engagement and zero-copy admission

Implements the SGLang Phase-A KDA integration and supersedes #33647. The integration makes CAKE engagement explicit and fail-closed: - aligned tracking (`return_intermediate_states=True` with no consumed interior checkpoint) stays on the existing final-state path and returns an empty checkpoint stand-in; - packed H12 decode admits the positive, non-overlappi

importance 2@yyihuangopenrun-cirun-ci-extraOriginal evidence ↗
pull request

[AMD] Fix weight checking for AITER-shuffled block FP8 weights

## Motivation This ports #34016 from `sglang-miles` to `main` following maintainer feedback. AITER pre-shuffles block-FP8 weights on ROCm for optimized inference kernels. The weight checker was treating the shuffled physical layout as the original logical layout during dequantization, causing false weight-update mismatches even though inference was correct.

importance 2@Xinyu-Kangopenrun-ciOriginal evidence ↗
pull request

[Fix] Make the linear-attn kernel choice per-runner, and pin draft/target loader-hook parity

## Motivation #33312 fixed a per-runner decision that one participant answered differently from the other: the DSV4 DSpark draft entry class did not expose the shared-experts-fusion gate its target family carries, so the loader installed one decision for the target and another for the draft, and the draft's weights were laid out for the wrong one (accept len

importance 2@ch-wanopennpuOriginal evidence ↗
pull request

Fix Kimi-K3 media token resolution

## Motivation Kimi-K3 currently takes the `<|media_pad|>` token ID from the checkpoint configuration. When that value is stale or differs from the tokenizer vocabulary, SGLang looks for and expands the wrong token ID, breaking image-placeholder resolution for multimodal requests. The tokenizer is the source of the input IDs used at runtime, so the processor

importance 2@mmangkadopenOriginal evidence ↗
pull request

Honor should_apply_lora when wrapping LoRA target modules

## Motivation `LoRAManager.init_lora_modules()` decides what to wrap by matching the last one or two components of a module name against `--lora-target-modules`. For multimodal models that is ambiguous: encoder towers name their projections the same way the language model does. `VisionAttention` exposes `qkv_proj` and `proj`, so a target as ordinary as `qkv_

importance 2@SakaiXue6666openloraOriginal evidence ↗
pull request

Support deferred MoE finalize for MXFP4 and FP8 block-scale

## Motivation The FlashInfer TRT-LLM MoE kernels can return the unweighted expert outputs instead of performing the top-k weighted combine inside the kernel. When the combine is deferred, it is merged with the shared-expert addition into a single kernel, which removes one kernel launch per MoE layer per decode step. This mode was previously enabled only for

importance 2@b8zhongcloseddeepseekjit-kernelOriginal evidence ↗
pull request

[AMD][Spec] Accelerate Qwen3.5 verification with grouped-head shared KV

## Motivation Qwen3.5 uses grouped-query attention, where multiple query heads share a KV head. For Qwen3.5-397B under TP2, each rank has 16 query heads sharing one TP-local KV head. During EAGLE target verification, the existing split-KV path processes query heads independently and repeatedly scans the same prefix KV cache. This becomes increasingly expensi

importance 2@chuyehopenrun-cijit-kernelOriginal evidence ↗
pull request

[Fix] Fix Qwen3.5 MTP startup with HiCache

## Motivation Qwen3.5 conditional-generation checkpoints store language-model attributes in the nested `text_config`. During MTP draft remapping, SGLang sets `num_nextn_predict_layers = 1` only on the parent Hugging Face config. However, `ModelConfig.num_nextn_predict_layers` is derived from `hf_text_config`, so the draft depth remains `None`. With NEXTN and

importance 2@DarkraiHLopenhicacherun-ciOriginal evidence ↗
pull request

Fix IndexError when reducing CPU tensors after monkey_patch_torch_red…

## Motivation `monkey_patch_torch_reductions()` installs `_reduce_tensor_modified` as `reductions.reduce_tensor` and calls `init_reductions()`, which rebinds the `ForkingPickler` dispatch for `torch.Tensor` — every tensor in the process, not only the CUDA ones. The replacement rewrites argument 6 unconditionally: ```python output_args = _modify_tuple( output

importance 2@SakaiXue6666openOriginal evidence ↗
pull request

[AMD] Run V4 MTP target-verify through the decode kernel

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> > For testing convenience, this PR cherry-picks #29202 (which enables the draft-extend CUDA graph). P

importance 2@1am9trashclosedamddeepseekrun-ciOriginal evidence ↗
pull request

fix: consolidate typo and grammar fixes across codebase

Consolidates two previously separate typo/grammar PRs (22068 + 22085) into a single submission to reduce review overhead. Changes are limited to comments and docstrings: duplicate words removed, grammar corrected, no behavioral changes. <!-- pr-states:start --> --- ### CI States Latest PR Test (Base): <!-- slot:pr-test:start -->:x: **Missing `run-ci` label**

importance 2@Ricardo-M-LopendeterministicdiffusionOriginal evidence ↗
pull request

[Fix] Harden DeepSeek-V4 tool-call streaming

## Motivation #34458 made DeepSeek-V4 reasoning and tool-call streaming parsing chunk-invariant. Four additional streaming robustness bugs remain on top of that work, causing tool call loss, value truncation, text trapping, and DSML tag leakage in production serving. This PR fixes all four. ## Modifications ### Bug 1: Exception handler clears buffer — tool c

importance 2@LeoyzenopendeepseekOriginal evidence ↗
pull request

docs: update Qwen3.8 disaggregated serving configs

## Summary - make Qwen3.8 PD routing use round-robin explicitly for the main policy and decode policy - document the measured GB300 FP8 and NVFP4 P/D worker layouts and capacity settings - preserve the Qwen-specific `SGLANG_FLASHINFER_MNNVL_CUTEDSL_AR_FUSION` path used by the verified flat-TP recipes Before <img width="1084" height="314" alt="image" src="htt

importance 2@YAMY1234closeddocumentationOriginal evidence ↗
pull request

Add bit-exact unified radix cache KL test for hybrid SWA + mamba

## Motivation Every KL test in `unified_radix_tree/` gates on a loose threshold today, because none of their models can score a token identically twice: Qwen3-Next's chunkwise prefill scan and its decode recurrence are different algorithms and land an ulp apart, so a tight floor there fails on float noise rather than on bugs. That leaves the exact comparison

importance 2@ispobockclosedOriginal evidence ↗
pull request

[MLA] Gather only the batch's KV rows for fp8 paged prefill

## Motivation `FlashInferMLAAttnBackend.forward_extend`'s paged branch up-converts the **whole per-layer KV pool**: ```python k_buf = self.token_to_kv_pool.get_key_buffer(layer.layer_id).to(q.dtype) ``` `O(pool)` per layer per forward. With an fp8 KV cache it OOMs once the pool is large — Kimi-Linear's 16.5M-token pool makes that a **17.76 GiB** bf16 copy pe

importance 2@kpham-sglopenOriginal evidence ↗
pull request

[CI] Split Kimi K2.5 performance batches by config

## Motivation The Kimi K2.5 NVFP4 GB300 test previously applied the default batch sizes `[1, 8, 16]` to both launch configs. That produced six performance combinations, including batches that are not intended for each config. ## Modifications - Run `TP4+EAGLE3` performance tests only at batch sizes 1 and 8. - Run `TP4+DP4+DPA+EAGLE3` performance tests only a

importance 2@Fridge003closedblackwellOriginal evidence ↗
pull request

[diffusion][Minimax H3]support subblock sparse attention on SM90

<!-- Thank you for your contribution! Please follow these guidelines to enhance your pull request. If anything is unclear, submit your PR and reach out to maintainers for assistance. Join our Slack community at https://slack.sglang.io to discuss further. --> ## Motivation This PR is a follow-up to #34148, which introduced SubBlock sparse attention for MiniMa

importance 2@IPostYellowopendiffusionjit-kernelOriginal evidence ↗
pull request

[AMD] CI: drop the spaces from SGL_EVAL_SPEC (fixes ROCm 7.2 stage-a sgl-eval install)

## Problem `stage-a-test-1-gpu-small-amd-rocm720` fails on every `PR Test ROCm 7.2 (AMD)` run that clears the label gate. Stage-a gates all downstream AMD legs, so no AMD PR run on ROCm 7.2 can complete. ``` Attempt 1/3: docker exec ci_sglang pip install --cache-dir=... sgl-eval @ git+https://github.com/sgl-project/sgl-eval.git@6690895... ERROR: Invalid requ

importance 2@kangwangamdopenamdrun-ciOriginal evidence ↗
pull request

[PD] Add the missing Prefill bootstrap timeout for NIXL

- RFC: [PD disaggregation: single protocol layer, per-backend transport #33861](https://github.com/sgl-project/sglang/issues/33861) - Staged implementation plan and PR tracking: [PD shared-protocol implementation plan #34510](https://github.com/sgl-project/sglang/issues/34510) ## Background RFC #33861 proposes gradually consolidating the duplicated PD reques

importance 2@jambow0320closedOriginal evidence ↗