← 所有项目

Contribution Tasks

sgl-project/sglang

候选人是 GPU kernel / 训练性能工程师,但当前无 GPU。SGLang 的 Rust 服务化(sgl-router、sgl-kv-indexer、rust server)、Python 调度层(radix_cache、schedule_batch、mem_cache)以及采样/请求验证逻辑都是纯 CPU 可开发与验证的模块,与候选人的性能工程、算子融合、分布式训练 rollout 后端经验高度契合。尤其是 sgl-router 的 KV 感知路由策略、可观察性、契约测试方向,与候选人做端侧部署与跨语言系统的经验直接对口。

当前方向:SGLang 当前处于 Rust 服务化加速期(sgl-router、rust server 提交活跃)、HiCache / PD 分离 / HiSparse 等分布式 KV 缓存路线快速推进、扩散模型与多硬件后端(NPU/AMD/Intel/TPU)并行扩张。维护者明显欢迎:Rust 路由策略与可观察性改进、请求验证与 DoS 防护、调度层正确性修复、文档与 benchmark 基建。

★ 36502Fork 91876 个候选任务Gemini:LongCat-2.0

更新于 2026-10-08T07:37:23+00:00 · 本次生成失败,展示上次结果 · 打开仓库 ↗

一、项目定位

SGLang(sgl-project/sglang,LMSYS 非营利组织托管)是高性能大模型与多模态模型推理服务框架,2024 年初以 RadixAttention 前缀缓存起家,README 自称支撑全球 40 万+ GPU、日产数万亿 token,被 xAI、NVIDIA、AMD、Cursor 及各大云厂采用,2025/03 加入 PyTorch 生态,已是工业界事实标准之一。架构为双语言引擎:Python 侧(python/sglang,目录约 3863 个文件)承载调度器、KV 缓存、模型实现与 OpenAI 兼容服务;Rust 侧(rust/sglang-server、sglang-mm、sglang-renderer、experimental/sgl-router、sgl-model-gateway)承担高性能服务器、多模态数据面与路由,rust/sglang-server 是提交热点第二位,服务化正在加速。能力覆盖 continuous batching、paged attention、PD 分离、投机解码(DFlash/Spec V2)、TP/PP/EP/DP 并行、FP4/FP8/INT4/AWQ/GPTQ 量化、多 LoRA、结构化输出;模型覆盖主流 LLM、embedding/reward 模型与扩散模型(WAN、Qwen-Image,即 SGLang Diffusion);硬件覆盖 NVIDIA/AMD/Intel XPU/Xeon CPU/TPU/昇腾 NPU。它同时是 RL 后训练 rollout 后端,被 verl、slime、AReaL、Miles、Tunix 集成。与 vLLM 为最直接竞品(README 致谢承认借鉴 vLLM/FlashInfer/LightLLM),差异化在 RadixAttention、零开销调度器、DeepSeek/Kimi K3 等 day-0 支持与大规模 EP/PD 分离工程。当前 v0.5.x、约两周一个 release、单日十余条合并,成熟期中仍快速扩张(Rust 服务化、扩散管线、TPU 后端均为近一年新增)。对无 GPU 的读者:仓库提供 pyproject_cpu.toml(CPU 安装路径)与可本机构建的 Rust 组件,是可行的切入面。

解决什么问题、给谁用

解决大模型推理从「能跑」到「高吞吐、低延迟、可规模化服务」的工程问题,具体拆解为: 多请求并发下 KV 缓存浪费与前缀重复计算——RadixAttention 树形缓存(官方博客称最高 5x 提速),并有 hicache 层级缓存与 unified_memory 扩展; prefill 与 decode 互相争抢——PD 分离、chunked prefill; decode 受算力与带宽限制——投机解码(2026/06 的 DFlash/Spec V2 为新一代)、FP4/FP8/INT4/AWQ/GPTQ 量化; MoE 模型多机扩展——大规模专家并行(96×H100、GB200/GB300 NVL72 集群博客,称 25x 提升); agent/RL 场景的高并发重复前缀 rollout——被 verl/slime 等用作 rollout 后端; 新模型发布当天可部署——DeepSeek-V4、Kimi K3、GLM5.2 等 day-0 支持; 视频与图像扩散生成纳入统一服务框架(SGLang Diffusion,WAN/Qwen-Image)。

四类目标用户: 推理平台/服务工程师——xAI、Cursor、LinkedIn 及 Oracle/Azure/AWS/GCP 等云厂商(README 采用名单),典型场景是单卡到千卡集群上跑 OpenAI 兼容 API; RL/post-training 团队——作为 verl、slime、AReaL、Miles、Tunix 的 rollout 后端做大规模采样; 模型方与早期采用者——需要 DeepSeek-V4、Kimi K3、GLM5.2、Nemotron 3 等新模型的 day-0 部署与调优(GLM5.2 NVFP4 agentic 500 TPS 案例); 多模态与生成式应用开发者——VLM(LLaVA 类)、OCR、ASR/TTS,以及 2025/11 起的视频/图像扩散生成(WAN、Qwen-Image)。对内核/性能背景的读者,最相关的用户故事是:kernel 与调度优化直接决定其吞吐指标,benchmark/ 目录(146 个文件)就是这些用户的验收场。

同类项目与差别

核心能力

能力在哪成熟度
RadixAttention 前缀缓存与层级 KV 缓存(hicache、unified memory)python/sglang 运行时(具体模块文件需验证);benchmark/hicache、benchmark/unified_memory成熟
零开销 CPU 调度器与 continuous batchingpython/sglang;benchmark/scheduler成熟
Prefill-Decode 分离(PD disaggregation)与 chunked prefillbenchmark/disaggregation;docker/k8s-sglang-distributed-sts.yaml成熟
投机解码(adaptive、ngram;新一代 DFlash/Spec V2)benchmark/bench_adaptive_speculative.py;test(test_ngram_corpus 见 XPU 相关提交)基础成熟;DFlash/Spec V2 为 2026/06 新一代,较新
量化:FP4/FP8/INT4/AWQ/GPTQ(含 NVFP4 agentic 案例)python/sglang成熟
多硬件后端:NVIDIA、AMD ROCm、Intel XPU、Xeon CPU、昇腾 NPU、TPU(SGLang-Jax)、MUSAdocker/{rocm,rocm-gfx1151,xpu,xeon,npu,musa,arm64}.Dockerfile;python/pyproject_{cpu,npu,xpu,other}.tomlNVIDIA/AMD 成熟;XPU/NPU 每周迭代中(提交证据:Xpu/weekly enablement、NPU ACL 修复);TPU 2025/10 起较新;MUSA 仅见 Dockerfile,需验证
SGLang Diffusion:WAN/Qwen-Image 视频/图像生成管线docs/cookbook/diffusion/;[diffusion] 系列提交(pipelines 支持多任务类型)较新(2025/11–2026/01 上线),活跃开发
RL rollout 后端(verl/slime/AReaL/Miles/Tunix 集成)benchmark/agentic-rollout成熟
多模态服务(VLM、OCR、ASR)rust/sglang-mm;benchmark/{llava_bench,mmmu,ocr,asr}成熟
Rust 高性能组件:sglang-server、sgl-router、sglang-rendererrust/;experimental/sgl-router(242 文件);sgl-model-gateway;docker/sgl-router.Dockerfile活跃开发(提交热点第二位);sgl-router 位于 experimental/ 目录,属演进中/实验
结构化输出(compressed FSM,官方称 3x JSON 解码提速)python/sglang成熟
Kernel/性能基准与调优基建benchmark/kernels、benchmark/lean_kernel_sweep.py、bench_rope.py、bench_linear_attention.py、bench_attention_sink、bench_pynccl_allocator、fla/成熟(作为内部工程工具)

阶段:成熟期但仍在快速扩张:核心 serving 能力(调度、缓存、量化、PD 分离)成熟并大规模生产部署;v0.5.x 约两周一个 release(v0.5.18→v0.5.20),主干单日十余条合并、PR 编号已到 4.1 万+;扩张方向为 Rust 服务化(rust/sglang-server 为提交热点第二)、SGLang Diffusion、TPU/XPU/NPU 等新后端;experimental/sgl-router 仍在 experimental 目录,属演进中。

技术栈:Python(主体运行时,python/sglang,目录 3863 个文件);Rust(rust/sglang-server、sglang-mm、sglang-renderer;experimental/sgl-router;sgl-model-gateway;Cargo 构建);PyTorch(2025/03 加入 PyTorch 生态);Triton(AMD 侧提交注册 Triton data movement tests);TileLang(ROCm 构建相关提交);依赖/集成 kernel 库:FlashInfer(README 致谢)、DeepGEMM 与 DeepEP(docker/sgl-deep-gemm.Dockerfile、sgl-deep-ep.Dockerfile);Protobuf(proto/sglang);构建:python/pyproject.toml 多变体(cpu/npu/xpu/other)+ setup.py;rust/Cargo.lock;部署:docker/ 25 个文件(cu134、rocm、rocm-gfx1151、xpu、xeon、npu、musa、arm64、sagemaker、gateway、renderer 等)+ k8s StatefulSet/Service 清单;CI/质量:.github/ 130 文件(workflows、CODEOWNERS、MAINTAINER.md、labeler、linters、audit_permission.py),含 AMD nightly、XPU weekly 等分硬件流水线;pre-commit、isort、codespell、coverage;test/run_suite.py 与 test/registered;文档站:Mintlify(mint CLI、Node.js>=20、MDX、config-driven cookbook);注意仓库内 docs/CONTRIBUTING.md 是文档站贡献指南,代码贡献指南在 docs.sglang.io/developer_guide/contribution_guide.html;AI 辅助开发基建:.claude/(rules、skills,112 个文件)

规模:目录规模:python/ 3863 个文件(主体)、docs/ 553、experimental/sgl-router 242、benchmark/ 146、.github/ 130、examples/ 98;Release 节奏:v0.5.18(2026-08-22)→ v0.5.19(2026-09-05)→ v0.5.20(2026-09-18),约两周一版;提交频率:2026-09-28 单日可见 12 条合并,commit 热点为 python/sglang 45、rust/sglang-server 29、test/registered 23;PR 编号已至 #41387(2026-09),累计 PR 4 万+;README 自称 40 万+ GPU 部署、日产数万亿 token、PyPI 有月下载徽章(具体数值需验证);star 数证据未给出,需验证。

二、架构与代码地图

SGLang 采用「双语言、五层」架构。最上层是接入层(Rust 服务器 + Python 前端),负责 HTTP/gRPC 入口、OpenAI 兼容 API、多模态数据面与 KV 感知路由;Rust 侧由 experimental/sgl-router(KV 感知路由、策略、健康检查)与 rust/sglang-server、rust/sglang-mm(统一数据面)构成,Python 侧由 python/sglang/srt/entrypoints/ 下的 OpenAI 兼容服务器与前端语言接入组成。第二层是调度层,核心是 python/sglang/srt/managers/ 下的 Scheduler、SchedulerProfiler 与 scheduler_components/(load_publisher、chunked_prefill、radix_cache 等),实现 continuous batching、chunked prefill、RadixAttention 前缀缓存、PD 分离调度、投机解码调度。第三层是执行层,包括 python/sglang/srt/executor/(GPUModelRunner、overlapping_scheduler)、python/sglang/srt/layers/(attention、moe、quantization、linear、norm、rope 等算子包装)、python/sglang/srt/model_executor/(模型前向、采样、logits 处理)。第四层是 kernel 层,主要是 python/sgl-kernel/ 与 python/sglang/srt/layers/ 调用的 Triton/CuTe/CUTLASS/FlashInfer 自定义算子,以及 3rdparty/amd/ 等厂商特化实现。第五层是工具层,包括 benchmark/、docs/、examples/、docker/、test/、scripts/ci/、.claude/skills/(性能剖析、事故分诊、机械重构验证)等工程支撑。双语言边界清晰:Python 承载调度与模型实现,Rust 承担高性能数据面与路由;两者通过 rust/sglang-server 与 python/sglang/srt/ 的 FFI/HTTP 边界协作,近期提交热点显示 Rust server 正在统一多模态与生成请求的数据路径。

接入层调度层执行层kernel 层工具层其他sgl-router → rust-sglang-server:请求sgl-router → sgl-kv-indexer:前缀查询前缀查询sgl-kv-indexer → sgl-router:PrefixMatcPrefixMatcrust-sglang-server → python-srt-entrypoints:请求python-srt-entrypoints → python-srt-scheduler:请求请求python-srt-scheduler → python-srt-executor:batchbatchpython-srt-executor → python-srt-model-executor:前向python-srt-model-executor → python-srt-layers:TensorTensorpython-srt-layers → python-sgl-kernel:kernelpython-srt-scheduler → python-srt-mem-cache:KVKVpython-srt-scheduler → sgl-router:LoadStatLoadStattools-benchmark → python-sgl-kernel:benchbenchtools-claude-skills → python-srt-scheduler:分析分析sgl-routersgl-routerrust-sglang-serverrust-sglang-serverrust-sglang-mmrust-sglang-mmpython-srt-entrypointspython-srt-entrypointspython-srt-schedulerpython-srt-schedulerpython-srt-executorpython-srt-executorpython-srt-model-executorpython-srt-model-executorpython-srt-modelspython-srt-modelspython-srt-layerspython-srt-layerspython-sgl-kernelpython-sgl-kernelsgl-kv-indexersgl-kv-indexertools-claude-skillstools-claude-skillstools-benchmarktools-benchmarktools-ci-docker-docstools-ci-docker-docspython-srt-mem-cachepython-srt-mem-cache
SGLang 双语言五层架构:Rust 接入层 + Python 调度/执行/kernel 层,sgl-kv-indexer 为独立 KV 索引服务
模块 / 路径职责 · 入口 · 依赖
sgl-router
experimental/sgl-router
约 242 文件(experimental 整体)
Rust 实现的 KV 感知 OpenAI 兼容路由器,负责 worker 发现、路由策略、健康检查、断路器、session 亲和与 KV 前缀索引
入口:src/main.rs::main, src/server/app.rs::build_router, src/policies/mod.rs, src/state/kv_events/mod.rs, src/workers/manager.rs::run_with_config
依赖:sgl-kv-indexer, rust/sglang-server, python/sglang/srt/managers/scheduler_components/load_publisher.py
提交热点外最活跃的 Rust 组件;policies/ 含 cache_aware、session_aware、power_of_two、decode 等策略;policies_reorg/ 为重构中的新策略体系;sgl-kv-indexer 为独立 gRPC 前缀索引服务
sgl-kv-indexer
experimental/sgl-router/sgl-kv-indexer
约 30 文件
独立 KV 前缀索引服务,接收 worker 上报的 KV-cache 事件,维护 radix tree,对外提供 gRPC 前缀匹配查询
入口:src/bin/kv-indexer-server.rs::main, src/service.rs::KvIndexerService, src/client.rs::{PrefixMatch, PrefixIndexError}, src/memory_backend.rs::InMemoryKvIndexerBackend
依赖:tonic (gRPC), tokio
Router 的外部索引后端;InMemoryKvIndexerBackend 为内存实现;支持远程 GrpcPrefixIndex 与本地索引两种模式
rust-sglang-server
rust/sglang-server
需验证(rust/ 下多个 crate)
高性能 Rust 服务器,统一处理 HTTP/gRPC 请求、多模态数据面、生成请求转发,是提交热点第二位
入口:需验证(推测为 src/main.rs 或 lib.rs 中的 serve/run 入口)
依赖:axum/tokio-tonic(需验证), sgl-router(共享路由与策略)
近期提交「Rust server unify datapath for mm and generate requests (#39679)」表明正在统一多模态与生成数据路径
rust-sglang-mm
rust/sglang-mm
需验证
多模态数据面 Rust 组件,处理图像/视频/音频等非文本输入的预处理与传输
入口:需验证
依赖:rust/sglang-server
提交热点第 4 位(5 次提交),与 sgl-router 共同构成 Rust 数据面
python-srt-entrypoints
python/sglang/srt/entrypoints
需验证(python/ 整体约 3863 文件)
Python 侧 OpenAI 兼容服务器入口,提供 v1/chat/completions、v1/completions、tokenize 等 HTTP 接口,以及引擎启动入口
入口:需验证(推测含 openai_server、engine、tokenizer 等模块)
依赖:python/sglang/srt/managers, python/sglang/srt/model_executor
examples/frontend_language/ 与 examples/runtime/ 中的 server 脚本通过该层启动
python-srt-scheduler
python/sglang/srt/managers
需验证
调度层核心,包含 Scheduler、SchedulerProfiler、scheduler_components/(radix_cache、chunked_prefill、load_publisher、disagg、speculative 等)
入口:Scheduler(推测), scheduler_components/radix_cache, scheduler_components/chunked_prefill, scheduler_components/load_publisher.py::LoadStat
依赖:python/sglang/srt/executor, python/sglang/srt/mem_cache
README 强调「zero-overhead CPU scheduler」;radix_cache 实现 RadixAttention 前缀缓存;load_publisher 向 Rust router 发布负载
python-srt-executor
python/sglang/srt/executor
需验证
执行层,封装 GPUModelRunner、overlapping_scheduler,负责模型前向、batch 执行、与 kernel 层交互
入口:GPUModelRunner(推测), overlapping_scheduler(推测)
依赖:python/sglang/srt/layers, python/sglang/srt/model_executor, python/sgl-kernel
与调度层紧密协作,支持 continuous batching 与 overlapping
python-srt-layers
python/sglang/srt/layers
需验证
算子包装层,包括 attention、moe、quantization、linear、norm、rope、sampling 等,调用 Triton/CuTe/FlashInfer
入口:需验证(推测含 fused_moe_triton、quantization、attention_backend 等子模块)
依赖:python/sgl-kernel, 3rdparty/amd, torch
benchmark/kernels/ 下有大量对应 benchmark(fused_moe_triton、attention、all_reduce 等)
python-srt-model-executor
python/sglang/srt/model_executor
需验证
模型执行层,负责模型加载、前向传播、采样、logits 处理、多模态融合
入口:需验证(推测含 model_runner、sampling、logits_processor 等)
依赖:python/sglang/srt/layers, python/sglang/srt/executor, python/sglang/srt/models
python/sglang/srt/models/ 包含各模型实现(Llama、Qwen、DeepSeek、WAN 等)
python-sgl-kernel
python/sgl-kernel
需验证
自定义算子包,提供 Triton/CuTe/CUTLASS/FlashInfer 封装的 fused kernel(fused_moe、rmsnorm、rope、quant、paged_attention 等)
入口:需验证
依赖:torch, triton, flashinfer, cutlass/cute(需验证)
benchmark/kernels/ 下多数 benchmark 直接调用该包;3rdparty/amd/ 提供 ROCm 特化
python-srt-models
python/sglang/srt/models
需验证
模型实现层,覆盖主流 LLM(Llama、Qwen、DeepSeek、Kimi、GLM 等)、embedding/reward 模型与扩散模型(WAN、Qwen-Image)
入口:需验证(推测每个模型一个文件,如 llama.py、qwen.py、deepseek.py)
依赖:python/sglang/srt/layers, python/sglang/srt/model_executor
README 强调「easy extensibility for adding new models」;扩散模型为近一年新增
python-srt-mem-cache
python/sglang/srt/mem_cache
需验证
KV 缓存管理层,实现 paged attention、RadixAttention 树形缓存、hicache 层级缓存、unified_memory
入口:需验证(推测含 radix_cache、paged_cache、hicache 等)
依赖:python/sglang/srt/managers/scheduler_components/radix_cache
benchmark/hicache/、benchmark/unified_memory/ 为对应 benchmark
tools-claude-skills
.claude/skills
约 112 文件(.claude 整体)
AI 辅助工程工具集,含 LLM torch-profiler 分析、机械重构验证、生产事故分诊等 skill
入口:llm-torch-profiler-analysis/scripts/analyze_sglang_torch_profile.py, mechanical-refactor-verify/scripts/mechanical_refactor_reproduction_cli.py, sglang-prod-incident-triage/scripts/incident_artifact_tool.py
依赖:python/sglang(分析目标)
体现仓库工程化成熟度;profiler 分析脚本直接解析 SGLang 的 torch-profiler trace
tools-benchmark
benchmark
约 146 文件
性能基准测试集,覆盖 kernels、scheduler、hicache、disaggregation、lora、diffusion、deepseek_v3 等场景
入口:kernels/fused_moe_triton/benchmark_sglang_fused_moe_triton.py, scheduler/bench_token_storage.py, hicache/bench_*.py, disaggregation/bench_cached_prefix.py
依赖:python/sglang, python/sgl-kernel
benchmark/kernels/ 下有大量可独立运行的 kernel benchmark,适合无 GPU 读者在 CPU/Colab 上跑部分测试
tools-ci-docker-docs
docker, docs, scripts/ci, .github/workflows
docker 约 25 文件,docs 约 553 文件
工程支撑层,含多硬件 Dockerfile(cuda、rocm、npu、xpu、xeon、arm64、musa)、Mintlify 文档站、CI 流程
入口:docker/Dockerfile, docker/rocm.Dockerfile, docs/docs.json, scripts/ci/, .github/workflows/
依赖:python/sglang, rust/sglang-server
pyproject_cpu.toml 为 CPU 安装路径;docker/ 覆盖 NVIDIA/AMD/Intel/TPU/昇腾/ARM 多硬件
目录树(按文件数)
  • python/ 3863 个文件
    MANIFEST.in, pyproject.toml, pyproject_cpu.toml, pyproject_npu.toml, pyproject_other.toml, pyproject_xpu.toml, setup.py, sglang
  • docs/ 553 个文件
    .gitignore, .mintignore, AGENTS.md, CONTRIBUTING.md, LICENSE, README.md, cards, cookbook, custom.css, demo, docs, docs.json, favicon.png, fonts
  • experimental/ 242 个文件
    sgl-router
  • benchmark/ 146 个文件
    agentic-rollout, asr, bench_adaptive_speculative.py, bench_attention_sink, bench_linear_attention, bench_pynccl_allocator, bench_rope, blog_v0_2, boolq, deepseek_v3, disaggregation, dllm, fla, hellaswag
  • .github/ 130 个文件
    CI_PERMISSIONS.json, CODEOWNERS, FOLDER_README.md, ISSUE_TEMPLATE, MAINTAINER.md, actions, audit_permission.py, labeler.yml, linters, pull_request_template.md, scripts, update_ci_permission.py, workflows
  • .claude/ 112 个文件
    rules, skills
  • examples/ 98 个文件
    assets, chat_template, checkpoint_engine, frontend_language, monitoring, profiler, runtime, sagemaker, usage
  • docker/ 25 个文件
    Dockerfile, Dockerfile.cu134, arm64.Dockerfile, compose.yaml, configs, gateway.Dockerfile, k8s-sglang-distributed-sts.yaml, k8s-sglang-service.yaml, musa.Dockerfile, npu.Dockerfile, patches, renderer.Dockerfile, rocm-gfx1151.Dockerfile, rocm.Dockerfile
  • 3rdparty/ 17 个文件
    amd
  • assets/ 4 个文件
    logo.png, logo.svg, logo_square.png, logo_square.svg
  • .devcontainer/ 2 个文件
    Dockerfile, devcontainer.json
  • .codespellrc/ 1 个文件
  • .coveragerc/ 1 个文件
  • .dockerignore/ 1 个文件
  • .git-blame-ignore-revs/ 1 个文件
  • .gitignore/ 1 个文件

一次调用怎么流过这些模块

一次典型推理请求(以 OpenAI /v1/chat/completions 为例)的完整路径:1) 请求进入接入层,由 rust/sglang-server 或 python/sglang/srt/entrypoints/ 的 OpenAI 兼容服务器接收,解析 HTTP body 为内部请求对象;若是 Rust 入口,sgl-router 的 server/routes/chat.rs 会先做请求预处理(preparation)与路由选择。2) 对于启用 KV 感知路由的集群,sgl-router 通过 sgl-kv-indexer 的 gRPC 接口查询请求前缀匹配(PrefixMatch),结合 worker 负载(LoadStat,由 python/sglang/srt/managers/scheduler_components/load_publisher.py 发布)与路由策略(cache_aware、session_aware、power_of_two 等)选定目标 worker。3) 请求进入调度层 python/sglang/srt/managers/Scheduler,由 continuous batching + chunked prefill 逻辑切分为 chunk,RadixAttention 树形缓存(radix_cache)检查前缀命中,命中部分跳过 prefill 计算。4) 调度后的 chunk 进入执行层 python/sglang/srt/executor/GPUModelRunner,组装 batch 并调用 python/sglang/srt/model_executor/ 的前向逻辑;前向中逐层调用 python/sglang/srt/layers/ 的算子包装(attention、moe、linear、norm、rope、quant),这些包装进一步调用 python/sgl-kernel/ 的 Triton/CuTe/CUTLASS/FlashInfer 自定义 kernel。5) 前向完成后,采样(sampling)与 logits 处理在 model_executor 层完成,生成 token;投机解码(DFlash/Spec V2)会在该阶段验证或回退。6) 生成的 token 写回 KV 缓存(paged attention + radix_cache),调度器决定是否继续 decode 或释放请求;最终 token 流通过接入层返回客户端(streaming 或完整响应)。关键数据结构包括:内部请求对象(含 input_ids、sampling_params、radix_cache 指针)、LoadStat(worker 负载)、PrefixMatch(KV 索引结果)、batch 描述符、KV cache page 表。调度点包括:Scheduler 的 chunk 切分与 batch 组装、radix_cache 的前缀查询与插入、sgl-router 的 worker 选择、sgl-kv-indexer 的前缀匹配。

1HTTP 入口rust/sglang-server 或 python/sglang/srt/e · experimental/sgl-router/src/server/app.rs /2KV 路由选择sgl-router + sgl-kv-indexer · experimental/sgl-router/src/policies/mod.rs, experimenta3调度 chunk 切分Scheduler + radix_cache · python/sglang/srt/managers(推测)4模型前向执行GPUModelRunner + model_executor · python/sglang/srt/executor, python/sglang/srt/model_5算子 kernel 调用layers + sgl-kernel · python/sglang/srt/layers, python/sgl-kernel6采样与 token 生成model_executor sampling · python/sglang/srt/model_executor(需验证)7KV 缓存更新mem_cache + radix_cache · python/sglang/srt/mem_cache, python/sglang/srt/managers/sche8响应返回rust/sglang-server 或 entrypoints · experimental/sgl-router/src/server/routes/chat.rs /

关键类型与函数

名称路径用途
Schedulerpython/sglang/srt/managers(推测,需验证)
GPUModelRunnerpython/sglang/srt/executor(推测,需验证)
LoadStatpython/sglang/srt/managers/scheduler_components/load_publisher.py(与 experimental/sgl-router/src/state/load_monitor/engine_reported_load.rs 对应)
PrefixMatchexperimental/sgl-router/sgl-kv-indexer/src/client.rs
KvIndexerServiceexperimental/sgl-router/sgl-kv-indexer/src/service.rs
InMemoryKvIndexerBackendexperimental/sgl-router/sgl-kv-indexer/src/memory_backend.rs
Cli / Configexperimental/sgl-router/src/config/cli.rs
build_routerexperimental/sgl-router/src/server/app.rs
AppContextexperimental/sgl-router/src/server/app_context.rs
WorkerRegistryexperimental/sgl-router/src/workers/registry.rs(推测)
PolicyRegistryexperimental/sgl-router/src/policies/registry.rs(推测)
EngineReportedLoadTableexperimental/sgl-router/src/state/load_monitor/engine_reported_load.rs
NativeCacheRankLoadexperimental/sgl-router/src/state/load_monitor/engine_reported_load.rs
KvEventIndexexperimental/sgl-router/src/state/kv_events/index.rs(推测)
RadixTreePrefixProviderexperimental/sgl-router/src/policies/prefix_provider.rs(推测)

扩展点

最近在动的地方

建议阅读顺序

  1. README.md(项目定位、特性、生态)
  2. experimental/sgl-router/src/main.rs(Rust 服务器入口,理解整体组件装配)
  3. experimental/sgl-router/src/config/cli.rs(CLI 与配置,理解可配置项)
  4. experimental/sgl-router/src/server/app.rs 与 app_context.rs(HTTP 路由与共享状态)
  5. experimental/sgl-router/sgl-kv-indexer/src/client.rs 与 src/bin/kv-indexer-server.rs(KV 索引服务)
  6. experimental/sgl-router/src/state/load_monitor/engine_reported_load.rs(负载统计结构)
  7. python/sglang/srt/managers/scheduler_components/load_publisher.py(Python 侧负载发布,与 Rust 对应)
  8. python/sglang/srt/managers(调度层核心,Scheduler 与组件)
  9. python/sglang/srt/executor(执行层,GPUModelRunner)
  10. python/sglang/srt/layers 与 python/sglang/srt/model_executor(算子与模型执行)

三、本地跑起来(没有 GPU 的 Mac)

安装

  1. # 1. 克隆仓库 git clone https://github.com/sgl-project/sglang.git cd sglang # 2. 创建 Python 虚拟环境(推荐 Python 3.10–3.12) python3 -m venv .venv source .venv/bin/activate # 3. 安装 CPU 专用依赖(依据 pyproject_cpu.toml) pip install -e python[cpu] # 或显式指定:pip install -e python -f python/pyproject_cpu.toml # 4. 安装 Rust 工具链(用于编译 sgl-router) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env # 5. 编译 Rust sgl-router(可选,无 GPU 也可编译) cd experimental/sgl-router cargo build --release cd ../.. # 6. 安装测试依赖 pip install pytest pytest-asyncio # 注意:跳过以下依赖(需要 GPU): # - sgl-kernel(CUDA kernel 包) # - flash-attn、flash-infer(NVIDIA 专用) # - torch 的 CUDA 版本(使用 CPU/MPS 版本)

哪些路径能真跑

['# 可在 CPU / Apple Silicon 上执行的路径:\n\n## 1. Rust sgl-router(完全 CPU 兼容)\n- experimental/sgl-router/:KV 感知路由器,所有逻辑在 CPU 运行\n- 编译:cargo build --release\n- 测试:cargo test(单元测试无需 GPU)\n\n## 2. Python 调度层(部分可运行)\n- python/sglang/srt/managers/scheduler_components/radix_cache.py:RadixAttention 树,纯 Python\n- python/sglang/srt/managers/scheduler.py:调度逻辑可实例化(但推理需模型)\n\n## 3. Benchmark 和测试\n- benchmark/scheduler/:调度器 benchmark(bench_token_storage.py)\n- test/registered/:部分 CPU 测试用例\n- benchmark/agentic-rollout/:纯 Python 模拟\n\n## 4. 文档和工具\n- docs/:Mintlify 文档站(mint dev)\n- .claude/skills/:性能剖析脚本(分析 trace 文件,无需实时 GPU)\n\n## 需要 Colab T4 验证的路径:\n- python/sglang/srt/layers/:所有 CUDA kernel 包装\n- python/sglang/srt/executor/GPUModelRunner:GPU 执行器\n- python/sgl-kernel/:Triton/CuTe 算子\n- 任何实际推理(launch_server、offline_batch_inference)']

最小可运行

  1. # 1. Rust sgl-router 单元测试(CPU,约 30 秒) cd experimental/sgl-router cargo test --lib cd ../.. # 2. RadixCache 冒烟测试(CPU,纯 Python) python3 -c " from sglang.srt.managers.scheduler_components.radix_cache import RadixCache cache = RadixCache(max_num_tokens=1024) print('RadixCache 实例化成功') " # 3. 调度器组件测试(CPU) python3 -m pytest test/registered/test_radix_cache.py -v --timeout=60 # 4. sgl-router 端到端冒烟(需编译后的二进制) ./target/release/sgl-router --model-id Qwen/Qwen3-0.6B --worker-urls http://localhost:30001 --dry-run # 5. 文档站本地预览(验证文档完整性) cd docs npm i -g mint mint dev # 浏览器打开 http://localhost:3000 # 6. 性能剖析脚本(分析已有 trace 文件) python3 .claude/skills/llm-torch-profiler-analysis/scripts/analyze_sglang_torch_profile.py \ --trace-path /path/to/trace.json # 注意:以下命令需要 GPU,只能在 Colab T4 运行: # python3 -m sglang.launch_server --model-path Qwen/Qwen3-0.6B # python3 -m sglang.bench_serving --model Qwen/Qwen3-0.6B --dataset random

测试

{'framework': 'pytest', 'directory': 'test/', 'cpu_subset': ['# 只跑 CPU 测试子集(约 5–10 分钟)\n\n# 1. 调度器相关测试\npython3 -m pytest test/registered/test_radix_cache.py -v --timeout=120\npython3 -m pytest test/registered/test_scheduler.py -v --timeout=120\n\n# 2. Rust 测试(CPU 原生)\ncd experimental/sgl-router && cargo test\n\n# 3. 过滤掉 GPU 标记的测试\npython3 -m pytest test/ -m "not gpu" --ignore=test/registered/test_model_runner.py\n\n# 4. 运行测试套件脚本(需验证 CPU 过滤选项)\npython3 test/run_suite.py --help # 查看是否有 --cpu-only 选项\n\n# 注意:完整测试套件需要 GPU,耗时数小时\n# 主要测试目录:\n# - test/registered/:核心功能测试\n# - test/srt/:SGLang Runtime 测试(需 GPU)\n# - experimental/sgl-router/tests/:Rust 路由器测试'], 'time_estimate': 'CPU 子集约 10–15 分钟(Rust 测试 + Python 调度测试)'}

调试

CI

{'system': 'GitHub Actions', 'workflows': ['.github/workflows/'], 'gpu_tests': ['# CI 主要检查项:\n\n## 1. 必需检查(PR 会被卡住)\n- pre-commit:代码格式(black、isort、flake8)\n- 文档 lint:mint broken-links\n- Python 单元测试(部分 CPU 测试)\n- Rust 编译和测试(cargo test、cargo clippy)\n\n## 2. GPU 测试(需要 NVIDIA GPU runner)\n- test/srt/ 下的模型推理测试\n- benchmark/kernels/ 性能测试\n- 多 GPU 分布式测试\n\n## 3. 硬件特定测试\n- AMD GPU:rocm 相关 workflow\n- Intel XPU:xpu 测试\n- NPU:昇腾测试\n\n## 4. 提交热点显示的高频 CI\n- test/registered/:23 次提交(核心测试)\n- python/sglang/:45 次提交(主代码)\n- rust/sglang-server:29 次提交(Rust 服务)\n\n## 5. 避免 CI 失败的注意点\n- 不要修改 .pre-commit-config.yaml 中的 hook\n- 确保 Rust 代码通过 cargo clippy -- -D warnings\n- 文档修改需通过 mint broken-links'], 'pr_blockers': ['pre-commit 格式检查', 'Rust cargo test 和 clippy', 'Python 单元测试(至少 CPU 子集)', '文档链接检查']}

坑

四、维护者与社区

Release 约每两周一次:v0.5.18(2026-08-22)→ v0.5.19(2026-09-05)→ v0.5.20(2026-09-18),间隔 13–14 天。主干合并极为高频:仅 2026-09-28 一天,UTC 01:09–06:46 的不到 6 小时内就有 12 条合并落地,方向横跨 NPU(#39060、#40814)、Intel XPU(#40664、#41075)、AMD(#41387、#36903、#41137)、diffusion(#38762)、hicache(#30899)、CI(#41378、#41002)与 Rust server(Rust server unify datapath for mm and generate requests #39679);仓库 pushed_at(2026-09-28T06:46:45Z)与最新提交一致,说明主干几乎全天候有合入。规划以季度为周期:#21788 是「Prefill Context Parallelism (2026 Q3)」roadmap。对贡献者的含义:main 移动极快,PR 要尽快 rebase,并盯紧 CI 变化(#17050 专门追踪 CI 失败修复)。

谁角色依据
merrymercy核心维护者,RFC/性能方向把关人(具体头衔需验证,可查 .github/MAINTAINER.md)被指派到 [RFC] #33852「Allow prefill CUDA graph bs below chunked_prefill_size under post-capture KV sizing」;RFC 类 issue 由资深维护者负责,同 issue 还指派了 Oasis-Git
zhyncs维护者,attention 后端 / kernel 方向与 ispobock 共同被指派到 #2272 [Kernel] cuDNN attention backend(labels: enhancement / good first issue / help wanted / high priority)
xiezhq-hermannHiCache / 分布式 KVCache 方向负责人同时被指派到 #28874 HiSparse Roadmap for Long-Context Sparse Serving(labels: roadmap / hisparse)与 #21846 [Roadmap] SGLang Distributed KVCache System For Agentic Workload(labels: high priority / hicache / roadmap / PD Disaggregation)
huangtingwei9988HiCache / 长上下文稀疏服务方向维护者同样出现在 #28874 与 #21846 两个高优先级 roadmap 的 assignee 列表中
hnyls2002稳定性 / 崩溃分诊负责人#26340 CUDA Coredump Tracker 的唯一 assignee,该 issue 已积累 320 条评论,是仓库最活跃的长周期追踪 issue
ShangmingCai调度 / 分布式方向维护者同时被指派到 #21788 [Roadmap] Prefill Context Parallelism(high priority,2026 Q3)与 #21846 Distributed KVCache roadmap 两个跨版本规划
ispobockattention 后端与 KVCache 方向维护者被指派到 #2272 cuDNN attention backend 与 #21846 Distributed KVCache roadmap
HaiShawTriton kernel 方向维护者被指派到 #2271 [Kernel] Optimize triton decoding kernels for long context(labels: good first issue / help wanted / high priority)

流程与 Review 风格

入口:README「Getting Started」列出 Contribution Guide(https://docs.sglang.io/developer_guide/contribution_guide.html),仓库内有 docs/CONTRIBUTING.md、.github/MAINTAINER.md 与 .github/CODEOWNERS(后两者内容需验证)。注意:证据中抓到的 contributing 文本是 docs/ 文档站(Mintlify)的贡献模板——fork → 建分支 → npm i -g mint → mint dev 本地预览 → mint broken-links 检查链接 → 提 PR,并附写作规范。Issue 流程:.github/ISSUE_TEMPLATE 存在,标题带强制前缀([Bug]/[Feature]/[RFC]/[Roadmap]/[Tracking]/[Perf]/[Kernel]);大改动先开 [RFC] issue(#33852、#23206、#41514 均为此惯例),跨版本工作用 [Roadmap] issue 跟踪并指派负责人(#21788、#21846、#28874)。PR 流程:.github/pull_request_template.md 存在(具体勾选项需验证);提交信息带 scope 标签([Bugfix]/[CI]/[AMD]/[Intel GPU]/[XPU]/[NPU]/[diffusion]/[CPU])。质量门禁:.pre-commit-config.yaml、.isort.cfg、.codespellrc、.coveragerc;CI 由 .github/workflows、scripts/ci、test/registered(提交热点第 3 位,23 条提交)与 test/run_suite.py 承担,另有独特的 CI_PERMISSIONS.json + audit_permission.py + update_ci_permission.py 管理 CI 权限。治理:根目录 CODE_OF_CONDUCT.md,项目托管于 LMSYS 非营利组织。CLA/DCO:证据中未见,需验证。特别之处:.claude/ 目录(rules + skills,112 个文件)表明项目深度使用 AI 编码代理;README 明确「Long-term active SGLang contributors are eligible for coding agent sponsorship, such as Cursor, Claude Code, or OpenAI Codex」,长期贡献者可携代表性 commits/PRs 发邮件 sglang@lmsys.org 申请。另有 .devcontainer 支持容器化开发环境。

主要从 issue 侧推断(PR 评论内容证据缺失,需验证):响应速度快——当天新开的 bug(如 #41494,0 评论)已被指派给 mmangkad;大量 issue 在 2026-09-28 当天仍有更新,维护者几乎全天候在线。长周期追踪 issue 活跃且信息密度高:#26340 CUDA Coredump Tracker 320 条评论、#17050 CI Test Failures 14 条、roadmap issue 普遍 20+ 条评论。社区报告的质量标杆很高:#41372 精确指出 schedule_batch.py:1846 的死代码路径、#40877 给出 8x RTX PRO 6000(PCIe 无 NVLink)的生产配置与实测吞吐、#33452 与 vLLM/marlin 做同硬件对比——讨论以数据与复现细节驱动。合并节奏快(单日 12 条),PR 命名规范严格(scope 前缀),CI 门禁重(test/registered 为提交热点第 3 位)。推测 review 风格偏工程化、重测试与基准证据,但具体措辞与平均合并时长需验证。

渠道

这里的规矩

维护者现在最想要的帮助

五、切入方案

建议长期负责:experimental/sgl-router 路由策略与可观察性方向
sgl-router 是提交热点 Rust 组件,完全 CPU 可编译测试;路由策略(cache_aware、load_based、power_of_two、session_aware)与可观察性(metrics、契约测试)是核心且缺贡献者的区域。候选人性能工程背景匹配,且 Rust 代码无需 GPU 即可验证,通向 reviewer/维护者路径清晰。

它现在缺什么(你无 GPU 也能补)

缺口依据为什么是你
sgl-router 路由策略与 Python 调度层之间缺乏可在 CPU 上跑的端到端对照基准experimental/sgl-router/src/policies/ 下有 cache_aware、power_of_two、session_aware、decode 等 Rust 策略;python/sglang/srt/managers/scheduler_components/ 下有 Python 侧重调度逻辑。benchmark/scheduler/ 仅有 bench_token_storage.py 等存储级 benchmark,缺少 router↔scheduler 行为对齐的对照脚本。可在 MacBook 上纯 Rust/Python 跑,无需 GPU;候选人擅长性能工程,能写出可复现的对照基准,直接补社区短板。
sgl-router 策略单元测试覆盖不足,尤其 cache_aware 与 load_based 的边界场景experimental/sgl-router/tests/component/policies/ 有 round_robin、power_of_two 等基础测试,但 cache_aware.rs、load_based.rs 目录未见;policies_reorg.rs 存在说明正在重构中,测试需补齐。纯 CPU Rust 测试,cargo test 即可验证;候选人做性能敏感系统,天然适合写边界与回归用例。
sgl-router 缺少可观察性:策略决策延迟与命中率指标未暴露experimental/sgl-router/src/server/metrics.rs 存在基础 metrics,但路由决策延迟、prefix cache 命中统计、策略切换计数等未见系统暴露;与 python/sglang/srt/managers/ 侧的 SchedulerProfiler 不对齐。纯 Rust 代码工作,无 GPU 依赖;候选人熟悉性能剖析,能设计低开销指标。
sgl-router 配置验证与错误信息不友好,缺集成测试experimental/sgl-router/src/config/cli.rs 用 clap 解析,但错误路径测试分散;tests/e2e/ 下有 smoke test,但配置组合覆盖不足。CPU 可跑,适合 TDD 风格;候选人做端侧部署,对配置鲁棒性有直觉。
Python 调度层 radix_cache 缺独立性能回归测试python/sglang/srt/managers/scheduler_components/radix_cache.py 是核心路径,但 test/registered/ 中无专项性能/正确性回归 benchmark;benchmark/scheduler/ 仅覆盖 token storage。纯 Python,MacBook 可跑;候选人擅长内核性能,能写微基准。
sgl-router 与 Python load_publisher 的 LoadStat 协议缺契约测试experimental/sgl-router/src/state/load_monitor/engine_reported_load.rs 反序列化 Python 侧 python/sglang/srt/managers/scheduler_components/load_publisher.py 发布的 LoadStat;V3/V4 字段演进中(见 native_cache 注释),但无显式契约测试。CPU 可跑 serde 往返测试;候选人做跨语言系统,能补契约。
CI 中 sgl-router 测试矩阵不完整,缺 nightly 或更大规模场景.github/workflows 与 scripts/ci 中 sgl-router 测试以单元为主;benchmark/ 下无 router 级 CI 集成。写 YAML 与脚本,无需 GPU;候选人熟悉 CI,能补。
sgl-router 文档与 examples 缺失,新用户难以上手docs/docs 下无 sgl-router 专项页;examples/ 无 router 示例;README 仅 experimental 提及。纯文档工作,无 GPU;候选人能写清楚工程文档。

第 1–30 天:看懂并露面

第 31–60 天:稳定产出

第 61–90 天:接管一块

第一批 PR

题目范围为什么安全
test(sgl-router): add unit tests for cache_aware and load_based policiesexperimental/sgl-router/tests/component/policies/ 新增 cache_aware.rs、load_based.rs 测试文件纯测试代码,不改动核心逻辑;cargo test 在 MacBook 可跑;覆盖边界场景,无回归风险
test(sgl-router): add LoadStat serialization contract testexperimental/sgl-router/tests/ 新增契约测试,验证 V3/V4 字段往返仅添加测试,不修改 engine_reported_load.rs 逻辑;CPU 可跑
feat(sgl-router): expose routing decision latency and prefix cache hit metricsexperimental/sgl-router/src/server/metrics.rs 新增指标,src/proxy/ 中埋点新增指标不影响现有逻辑;纯 Rust,cargo test 验证;可观察性改进社区欢迎
benchmark: add router policy comparison scriptbenchmark/ 新增 router_policy_compare.py,对比 cache_aware vs round_robin独立脚本,不改动核心代码;可在 MacBook 用 mock worker 跑
docs: add sgl-router getting started pagedocs/docs 新增 sgl-router 页,examples/ 新增示例纯文档与示例,无代码风险;社区明确欢迎文档贡献

怎么知道自己站住了

风险与对策
  • sgl-router 处于快速重构中(policies_reorg 目录存在),PR 可能冲突:PR 前 rebase 到最新 main,关注 policies_reorg 相关 PR,优先提测试与文档而非核心重构
  • Rust 学习曲线,候选人可能不熟:从测试与文档入手,逐步深入;利用 cargo clippy 与编译器提示
  • 社区响应慢,PR 积压:从小 PR 开始,保持耐心;在 Slack 主动 ping 相关维护者
  • 无 GPU 无法验证 router 与真实 worker 集成:用 mock worker 与 e2e smoke test 替代;必要时用 Colab T4 做最终确认
  • sgl-router 方向优先级变化:保持与社区沟通,灵活调整;测试与文档贡献始终有价值

六、怎么介入这个项目

社区入口:slack.sglang.io/

建议顺序

成为长期维护者的路径
  • 首次 PR 尽量小:只加测试、只加校验、或只加指标埋点,不重构核心路径
  • 在 Issue 下先留言说明方案(尤其是 #41482、#41471、#41466 这类有多种修复方向的),得到维护者确认再动手
  • 优先跑 cargo test / pytest 中能在本机通过的 CPU 子集,Colab T4 只用于最终确认
  • 关注 #23206(Rust 迁移)和 #21846(Distributed KVCache)两个 RFC,长期贡献方向可向 sgl-router / HiCache 靠拢

七、任务卡

任务 1可选 · medium · CPU · 2-3 个晚上

补全 sgl-router cache_aware / load_based 策略单元测试与边界用例

无人认领0 条评论更新 2026-09-28

用到的专长:性能敏感系统的边界与回归测试设计,Rust 测试与 cargo 工作流

目标:在 experimental/sgl-router/tests/component/policies/ 下新增 cache_aware.rs 与 load_based.rs 的单元测试,覆盖空 worker 列表、单 worker、多 worker 负载不均、KV 前缀命中/未命中、load 更新时序等边界场景。

为什么值得长期做:sgl-router 是 SGLang Rust 化最活跃的模块,也是 KV 感知路由的核心。策略测试是当前 gaps 中明确指出的短板,补全测试是进入 sgl-router 长期维护角色的最稳妥第一步。

怎么介入:Issue #41514 是 RFC,无 assignee,无 open PR;但本卡不直接实现 RFC 主体,而是借 sgl-router 测试短板切入。先在 Issue 下留言说明只补策略测试,不与 RFC 实现冲突。
第一个 PR 的边界:仅新增测试文件,不修改任何 src/ 逻辑
第一步:在 Mac 上 clone 仓库,进入 experimental/sgl-router/,运行 cargo test 确认现有测试通过;阅读 src/policies/cache_aware.rs、src/policies/load_based.rs 与现有 tests/component/policies/ 下 round_robin / power_of_two 测试作为模板。
本机怎么复现 / 验证:cd experimental/sgl-router && cargo test 在 Mac Apple Silicon 上运行现有测试,确认 harness 风格后新增用例并 cargo test 验证
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to add unit tests for the cache_aware and load_based routing policies in experimental/sgl-router/tests/component/policies/. I'll cover edge cases: empty worker list, single worker, load imbalance, KV prefix hit/miss, and load-update timing. I'll follow the existing round_robin/power_of_two test style. This is scoped to tests only and won't touch the policies_reorg refactor. Plan to open a PR within a few days. Please let me know if you'd prefer I hold off due to the ongoing policies_reorg work.
大致实施方案
  • 阅读 src/policies/cache_aware.rs、load_based.rs 与 src/state/ 下相关状态结构
  • 阅读 tests/component/policies/ 现有测试文件,摸清 mock worker 与测试 harness 风格
  • 为 cache_aware 编写测试:空列表、单 worker、多 worker 同负载、KV 命中/未命中、cache 命中但 load 高时的权衡
  • 为 load_based 编写测试:空列表、单 worker、load 更新前后选择变化、load 相等时的确定性
  • 运行 cargo test -p sgl-router 确认全部通过
  • 提交 PR,标题 test(sgl-router): add unit tests for cache_aware and load_based policies
可能涉及的目录或文件
  • experimental/sgl-router/src/policies/cache_aware.rs
  • experimental/sgl-router/src/policies/load_based.rs
  • experimental/sgl-router/tests/component/policies/(新增测试文件)
  • experimental/sgl-router/src/state/(load_monitor、kv_events 相关)
验收方式
  • cargo test -p sgl-router 在 Mac 上全部通过
  • 新增测试文件覆盖至少 6 个边界场景
  • CI 中 sgl-router 相关 job 绿色
开工前问题与风险

向维护者确认

  • cache_aware / load_based 当前是否已有部分测试散落在其他文件中?
  • 测试 harness 是否偏好 mock worker 还是用真实 MiniRouter?
  • 是否需要与 policies_reorg/ 重构同步,避免冲突?

风险

  • policies_reorg/ 正在重构策略体系,新测试可能与重构冲突,需确认维护者是否希望先补旧体系测试
任务 2优先 · easy · CPU · 1-2 个晚上

补全 SamplingParams 上界校验(top_k / logprobs / n)

无人认领1 条评论更新 2026-09-28

用到的专长:请求验证与安全边界设计,Python 单测与 pytest 工作流

目标:在 python/sglang/srt/sampling/sampling_params.py 的 SamplingParams.verify() 中补全 top_k、top_logprobs_num、logprobs、n 的上界校验,拒绝会导致 scheduler 崩溃的异常值,返回干净的 400 错误。

为什么值得长期做:采样参数校验是请求入口安全的关键层,维护者已在 Issue 中明确表态欢迎修复。该修复纯 Python、无 GPU 依赖,是快速获得维护者信任的高质量首 PR。

怎么介入:Issue #41482 无 assignee,无 open PR。Issue 中维护者已明确表示该 fix 方向合理,适合直接动手。
第一个 PR 的边界:仅修改 sampling_params.py 的 verify() 并添加对应测试
第一步:阅读 python/sglang/srt/sampling/sampling_params.py 中 verify() 方法,确认现有校验逻辑与 vocab_size 参数的使用方式;对照 Issue 中表格确认每个字段的当前缺失校验。
本机怎么复现 / 验证:在 Mac 上 pytest python/sglang/srt/sampling/ 相关测试,构造超大 top_k / logprobs / n 的 SamplingParams 调用 verify() 确认抛出 ValueError
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to fix #41482 by adding upper-bound checks in SamplingParams.verify() for top_k, top_logprobs_num, logprobs, and n. I'll use vocab_size as the natural bound for the sampling fields and pick a reasonable cap for n. I'll add matching unit tests. Before I finalize the thresholds, could you confirm: (1) what upper bound for n is acceptable, and (2) whether you want the OpenAI-compatible endpoints validated too, or just the native /generate path? Plan to open a PR within a couple of days.
大致实施方案
  • 在 verify() 中为 top_k 添加上界检查(top_k <= vocab_size)
  • 为 top_logprobs_num 与 logprobs 添加上界检查
  • 为 n 添加合理上界检查(参考 vLLM 或 OpenAI 限制)
  • 为每个新校验编写单测,可在 Mac 上直接跑 pytest
  • 确认错误信息清晰,包含字段名、允许范围、实际值
  • 提交 PR,标题 fix(sampling): add upper bound checks for top_k, logprobs, n
可能涉及的目录或文件
  • python/sglang/srt/sampling/sampling_params.py
  • python/sglang/srt/sampling/(相关测试目录)
验收方式
  • pytest 中新增测试在 Mac 上通过
  • 用 Issue 中提供的 repro 脚本验证不再 crash(可在 Colab T4 上做最终确认)
  • 现有 sampling 相关测试不受影响
开工前问题与风险

向维护者确认

  • n 的上界应设为多少?是否与 max_running_requests 或 batch size 对齐?
  • vocab_size 在 verify() 调用点是否始终可用?
  • 是否需要在 OpenAI 兼容端点也同步校验,还是仅 native /generate 路径?

风险

  • 上界设得太小可能影响合法的大 batch 用例,需与维护者确认合理阈值
任务 3优先 · medium · CPU · 2-3 个晚上

修复 DisallowedTokensLogitsProcessor 跨请求 batch 语义

无人认领2 条评论更新 2026-09-27

用到的专长:PyTorch 算子与 logits 处理逻辑,batch 语义与性能权衡

目标:修改 python/sglang/srt/sampling/custom_logit_processor.py 中 DisallowedTokensLogitsProcessor 的实现,使其在 batch 内各请求 token_ids 不同时不再 assert 崩溃,而是按请求独立应用各自的 disallowed tokens。

为什么值得长期做:custom logit processor 是 RL 后训练 rollout 后端的关键路径(verl、slime 等集成),修复其 batch 语义错误直接影响 SGLang 作为训练后端的可靠性。

怎么介入:Issue #41471 无 assignee,无 open PR。Issue 描述清晰,修复方向明确(移除 assert + 按请求独立应用),适合直接动手。
第一个 PR 的边界:仅修改 custom_logit_processor.py 中 DisallowedTokensLogitsProcessor 并添加测试
第一步:阅读 python/sglang/srt/sampling/custom_logit_processor.py 中 DisallowedTokensLogitsProcessor 的实现,理解当前 assert 逻辑与 batch 处理方式;查看上层如何把 batch 请求分发到 logit processor。
本机怎么复现 / 验证:在 Mac 上 pytest 构造两个不同 token_ids 的 mock SamplingParams,调用 DisallowedTokensLogitsProcessor 确认当前 assert 触发,修复后确认按请求独立应用
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to fix #41471. The DisallowedTokensLogitsProcessor currently asserts all requests in a batch share the same token_ids, which crashes the server when two users ban different tokens. I'll remove the assert and apply each request's disallowed tokens independently. I'll add unit tests for: different token_ids in a batch, identical token_ids, and single-request cases. Before I implement, could you confirm whether the scheduler guarantees a consistent custom_param structure across the batch, or should I also handle structural mismatches defensively? Plan to open a PR within a few days.
大致实施方案
  • 理解 batch 中 custom_param_list 的结构与调度器如何分组请求
  • 移除 assert,改为逐请求应用各自的 disallowed token_ids
  • 确保性能不退化(避免过大的 per-request 循环)
  • 编写单测覆盖:同 batch 不同 token_ids、同 batch 相同 token_ids、单请求
  • 运行 pytest 确认修复
  • 提交 PR,标题 fix(custom_logit_processor): per-request disallowed tokens in batch
可能涉及的目录或文件
  • python/sglang/srt/sampling/custom_logit_processor.py
  • python/sglang/srt/sampling/(测试目录)
  • python/sglang/srt/managers/schedule_batch.py(请求分组逻辑,需确认)
验收方式
  • pytest 中新增测试在 Mac 上通过
  • 用 Issue 中 repro 脚本在 Colab T4 上最终确认不再 crash
  • 现有 custom_logit_processor 测试不受影响
开工前问题与风险

向维护者确认

  • 调度器是否保证同一 batch 内请求的 custom_param 结构一致?
  • 是否需要在调度器层就把不同 token_ids 的请求分到不同 batch?
  • 修复后性能影响是否可接受(batch size 较大时)?

风险

  • 如果改为 per-request 循环,大 batch 下可能有性能影响,需评估或用向量化方式实现
任务 4可选 · medium · CPU · 2-3 个晚上

为 sgl-router 添加路由决策延迟与 prefix cache 命中指标

无人认领0 条评论更新 2026-09-28

用到的专长:性能剖析与低开销指标设计,Rust 与 Prometheus 指标

目标:在 experimental/sgl-router/src/server/metrics.rs 中新增路由决策延迟直方图与 prefix cache 命中计数器,在路由策略调用点埋点,并通过现有 /metrics 端点暴露。

为什么值得长期做:sgl-router 当前 metrics.rs 只暴露基础指标,缺少路由决策延迟与 prefix cache 命中统计。这是 gaps 中明确指出的可观察性短板,补齐后可直接与 Python 侧 SchedulerProfiler 对齐。

怎么介入:Issue #41514 是 RFC,无 assignee,无 open PR。本卡不实现 RFC 主体,仅借 sgl-router 模块补可观察性。先在 Issue 下留言说明范围。
第一个 PR 的边界:仅修改 metrics.rs 与路由调用点埋点,不改动策略逻辑
第一步:阅读 experimental/sgl-router/src/server/metrics.rs 与 src/proxy/ 路由调用点,理解现有指标注册与暴露方式;确认用 prometheus crate 还是自定义格式。
本机怎么复现 / 验证:cd experimental/sgl-router && cargo test 验证新增指标测试通过;用 mock server 启动后 curl /metrics 确认新指标出现
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to add routing decision latency and prefix cache hit metrics to experimental/sgl-router/src/server/metrics.rs. I'll instrument the policy decision points and expose: routing_decisions_total, routing_decision_duration_seconds (histogram), and prefix_cache_hits_total. This is scoped to observability only and won't touch the HiCache RFC implementation. Before I start, could you confirm: (1) whether prefix cache hit info is already available from policy return values, or if I need to query the kv-indexer, and (2) the preferred metric naming convention? Plan to open a PR within a few days.
大致实施方案
  • 在 metrics.rs 新增 routing_decisions_total、routing_decision_duration_seconds、prefix_cache_hits_total 等指标
  • 在 src/proxy/ 或策略调用点添加计时与计数埋点
  • 确保指标注册到全局 registry
  • 编写单元测试验证指标值在模拟路由后正确递增
  • 运行 cargo test 确认
  • 提交 PR,标题 feat(metrics): expose routing latency and prefix cache hit metrics
可能涉及的目录或文件
  • experimental/sgl-router/src/server/metrics.rs
  • experimental/sgl-router/src/proxy/(路由调用点)
  • experimental/sgl-router/src/policies/(策略返回值,需确认是否携带 cache hit 信息)
验收方式
  • cargo test -p sgl-router 在 Mac 上通过
  • 新增指标在 /metrics 端点可见(可用 mock server 验证)
  • 现有指标不受影响
开工前问题与风险

向维护者确认

  • prefix cache 命中信息当前是否从策略返回值中可用,还是需要额外查询 kv-indexer?
  • 指标命名风格偏好(snake_case、前缀 sgl_router_ 等)?
  • 是否需要与 Python 侧 SchedulerProfiler 指标对齐命名?

风险

  • 埋点位置选择不当可能引入性能开销,需确保计时逻辑轻量
任务 5优先 · medium · CPU · 2-3 个晚上

补全 GenerateReqInput / SessionParams 原生路径类型校验

无人认领0 条评论更新 2026-09-27

用到的专长:请求验证与 API 安全,Python 类型系统与 msgspec/pydantic

目标:在 python/sglang/srt/managers/ 的 GenerateReqInput / SessionParams 入口处添加类型校验(可复用 msgspec 验证或手动检查),使错误类型的字段返回干净 400 而非 crash。

为什么值得长期做:原生 /generate 路径缺少类型校验是 DoS 隐患,与 #41467(session_params crash)和 #41482(sampling 上界)构成同一系列。维护者已明确表态 OpenAI 兼容端点有 pydantic 校验而原生路径缺失,修复方向清晰。

怎么介入:Issue #41466 无 assignee,无 open PR。与 #41467 高度相关,可考虑合并修复或分批。先在 Issue 下留言确认范围。
第一个 PR 的边界:仅添加校验层与对应测试,不改动现有调度逻辑
第一步:阅读 python/sglang/srt/managers/ 中 GenerateReqInput 与 SessionParams 的定义与构造路径;对照 Issue 表格中 7 类 crash 场景,定位每个字段的首次使用点。
本机怎么复现 / 验证:在 Mac 上 pytest 构造错误类型的 GenerateReqInput / SessionParams,验证当前 crash 行为,修复后确认返回 400
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to fix #41466 by adding type validation for GenerateReqInput and SessionParams on the native /generate path. I'll add a validation layer that returns a clean 400 instead of crashing the scheduler. I'll cover all 7 crash categories from the issue table and add matching unit tests. Before I start, could you confirm: (1) whether you prefer the validation in tokenizer_manager or at the scheduler entry, and (2) whether I should fix #41467 (session_params) together or as a separate PR? Plan to open a PR within a few days.
大致实施方案
  • 确认 GenerateReqInput 与 SessionParams 的 msgspec Struct 定义位置
  • 在入口处添加类型校验层(可参考 OpenAI 兼容端点的 pydantic 模型)
  • 为每个 crash 场景编写单测,构造错误类型输入验证返回 400
  • 运行 pytest 确认修复
  • 提交 PR,标题 fix(validate): type-check GenerateReqInput and SessionParams on native path
可能涉及的目录或文件
  • python/sglang/srt/managers/tokenizer_manager.py(SessionParams 构造点)
  • python/sglang/srt/managers/schedule_batch.py(GenerateReqInput 处理)
  • python/sglang/srt/entrypoints/(原生 /generate 入口)
验收方式
  • pytest 中新增测试在 Mac 上通过
  • 用 Issue 中 repro 脚本在 Colab T4 上最终确认不再 crash
  • OpenAI 兼容端点行为不受影响
开工前问题与风险

向维护者确认

  • 校验层应放在 tokenizer_manager 还是 scheduler 入口?
  • 是否复用 msgspec 的 type 注解做验证,还是手动检查?
  • 修复范围是否覆盖所有 7 类 crash,还是分批?

风险

  • 校验层可能引入性能开销,需确保只在 native 路径启用
任务 6可选 · easy · CPU · 1-2 个晚上

补全 sgl-router ↔ Python load_publisher LoadStat 契约测试

无人认领0 条评论更新 2026-09-28

用到的专长:跨语言系统契约测试,serde 序列化与 Rust 测试

目标:在 experimental/sgl-router/tests/ 下新增 LoadStat 序列化/反序列化契约测试,验证 V3/V4 字段往返正确性,防止协议漂移。

为什么值得长期做:LoadStat 是 Rust router 与 Python 调度层之间的跨语言协议,V3/V4 字段演进中但无显式契约测试。补全契约测试是进入 sgl-router 维护角色的基础工作。

怎么介入:Issue #41514 是 RFC,无 assignee,无 open PR。本卡仅补测试,不实现 RFC 主体。先在 Issue 下留言说明范围。
第一个 PR 的边界:仅新增测试文件,不修改 src/ 逻辑
第一步:阅读 experimental/sgl-router/src/state/load_monitor/engine_reported_load.rs 中 LoadStat 的反序列化逻辑;阅读 python/sglang/srt/managers/scheduler_components/load_publisher.py 中 LoadStat 的序列化逻辑。
本机怎么复现 / 验证:cd experimental/sgl-router && cargo test 运行新增契约测试,构造 V3/V4 序列化样本验证往返
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to add a serialization contract test for the LoadStat protocol between experimental/sgl-router and the Python load_publisher. I'll verify V3/V4 field round-trip correctness to prevent protocol drift. This is tests-only and won't touch the HiCache RFC implementation. Before I start, could you confirm the serialization format (JSON/msgpack/custom) and point me to the V3→V4 field changes? Plan to open a PR within a couple of days.
大致实施方案
  • 理解 LoadStat V3/V4 的字段定义与序列化格式
  • 在 tests/ 下新增 load_stat_contract.rs
  • 构造 V3/V4 的序列化输入,验证 Rust 端反序列化正确
  • 构造 Rust 端 LoadStat,验证序列化后与 Python 端预期一致
  • 运行 cargo test 确认
  • 提交 PR,标题 test(sgl-router): add LoadStat serialization contract test
可能涉及的目录或文件
  • experimental/sgl-router/src/state/load_monitor/engine_reported_load.rs
  • experimental/sgl-router/tests/(新增测试文件)
  • python/sglang/srt/managers/scheduler_components/load_publisher.py(参考序列化格式)
验收方式
  • cargo test -p sgl-router 在 Mac 上通过
  • 新增测试覆盖 V3/V4 字段往返
  • 现有 load_monitor 测试不受影响
开工前问题与风险

向维护者确认

  • LoadStat 的序列化格式是 JSON、msgpack 还是自定义二进制?
  • V3→V4 的字段变更具体是哪些?是否有 changelog?
  • 是否需要同时更新 Python 端的测试?

风险

  • 协议仍在演进中,测试可能需随字段变化频繁更新