← 所有项目

Contribution Tasks

sgl-project/sglang-omni

SGLang-Omni 的 Apple Silicon / MLX 后端、调度逻辑层、配置系统、跨阶段传输、性能剖析基础设施,与候选人的 GPU kernel / 训练性能 / 扩散模型推理加速 / 端侧部署经验高度重合。当前无 GPU 的约束下,最直接的贡献路径是:Apple Silicon 后端覆盖(全程可在 MacBook Air 开发验证)、调度器与 pipeline 纯逻辑层优化(CPU 可跑)、comm 层共享内存路径测试、性能剖析工具链扩展、文档与基准脚本——这些都是维护者明显关心、issue 活跃但人手不足的方向。

当前方向:仓库正从研究原型走向多硬件、多模型族生产化:PyPI v0.1.7 已发布,近一周提交集中在 Qwen3-Omni 内核级优化、CosyVoice3/MOSS-TTS 跨阶段零拷贝、Router 安全加固。Apple Silicon 在 README 中明确标注为 Experimental,且只有 Qwen3-ASR 一条完整路径,是候选人能快速建立 ownership 的切入点。

★ 1323Fork 5573 个候选任务Gemini:LongCat-2.0

更新于 2026-10-08T07:37:23+00:00 · 打开仓库 ↗

一、项目定位

SGLang-Omni 是 sgl-project 下的多阶段(multi-stage)推理服务运行时,专门面向 omni 模型、语音 / TTS 模型以及统一多模态模型。它把一次生成拆成多个异构阶段——预处理、编码器、自回归引擎、talker、解码器、vocoder、聚合器——分别匹配不同的调度器与传输后端,对外暴露 OpenAI 兼容的 /v1/audio/speech、/v1/audio/transcriptions、多模态 chat 等接口。项目明确把自己定位在 SGLang 生态之上:自回归调度与 token 级执行复用 SGLang,而 pipeline 拓扑、阶段生命周期、跨阶段传输、模型族适配层、serving surface 由 SGLang-Omni 自己拥有。 从 README 与提交历史看,项目处于活跃但偏早期的生产化阶段:PyPI 最新 release 为 v0.1.7(2026-09-28),近一周提交热点集中在 Qwen3-Omni 内核级性能优化(MoE kernel compile、predictor 重叠发射、MRoPE 元数据裁剪)、MiniCPM-o HiFT decode compile、CosyVoice3 / MOSS-TTS 的跨阶段零拷贝、以及 XPU / Router 安全修复。README 把 Apple Silicon、Intel XPU 都标为 Experimental,CUDA 为默认完整支持后端。仓库结构上,sglang_omni/(739 文件)是主 Python 包,sglang_omni_router/ 是 Rust+Python 的多 worker 前置路由,sglang_omni_mlx/ 是 Apple Silicon 适配层,OmniTyper 与 Voxt 是 Swift / iOS 侧配套项目,tests/(610 文件)和 benchmarks/(87 文件)提供测试与回归基准。整体是一个正在从研究原型走向多硬件、多模型族产品化的 serving 框架。

解决什么问题、给谁用

解决的核心问题是:现代 omni / TTS / 语音模型不再是单一自回归 decode,而是由多个计算模式完全不同、依赖结构各异、资源需求不等的阶段串/并而成(如文本 thinker → 音频 talker → vocoder,或 ASR encoder → LLM → 说话人日志)。现有 serving 框架要么只覆盖纯文本 LLM(vLLM、TensorRT-LLM),要么只覆盖单阶段扩散/解码,无法原生表达这种多阶段 pipeline 的调度、阶段间 tensor 传输、异构硬件后端切换、以及流式 vocoder 输出。SGLang-Omni 的目标用户是:需要把 Qwen3-Omni、MiniMax Music 3、Higgs Audio v3、MOSS-TTS、Fish Speech S2-Pro、Qwen3-ASR 等模型以生产级延迟与吞吐部署在 NVIDIA CUDA、Intel XPU、Apple Silicon、ROCm、NPU 等多硬件上的推理工程师、MLSys 研究者、以及需要 OpenAI 兼容音频 API 的产品团队。典型场景包括:实时语音对话(全双工)、歌词→立体声歌曲生成、批量 TTS、流式语音、上传参考语音克隆、ASR+说话人分离一站式服务。

1) 推理系统工程师:负责把 omni / TTS 模型部署到 GPU 集群,需要多阶段 pipeline 调度、跨阶段 tensor relay、NCCL/NIXL/Mooncake 传输后端、以及 OpenAI 兼容 API;2) 性能优化工程师:在 Qwen3-Omni、MiniCPM-o 等模型上做 kernel 级调优(MoE compile、HiFT decode、predictor 重叠、MRoPE 裁剪);3) 多硬件支持工程师:为 Intel XPU、Apple Silicon MLX、ROCm、NPU 等非 CUDA 后端添加适配层;4) 研究者 / 评测工程师:使用 benchmarks/ 与 playground/ 跑回归、对比不同模型族;5) 端侧 / iOS 开发者:通过 OmniTyper、Voxt 把能力带到 Apple 平台。

同类项目与差别

核心能力

能力在哪成熟度
多阶段 pipeline 调度(preprocessing / encoder / autoregressive engine / talker / decoder / vocoder / aggregator)sglang_omni/pipeline/, sglang_omni/scheduling/, sglang_omni/serve/成熟
SGLang 自回归调度与模型执行复用sglang_omni/model_runner/, sglang_omni/models/, pyproject.toml 依赖 sglang==0.5.21成熟
跨阶段 tensor relay(shared-memory / NCCL / NIXL / Mooncake)sglang_omni/relay/, pyproject.toml 依赖 nixl-cu13 / mooncake-transfer-engine-cuda13成熟
OpenAI 兼容音频 API(/v1/audio/speech, /v1/audio/transcriptions, 多模态 chat)sglang_omni/http/, examples/, docs/cookbook/成熟
多硬件后端:NVIDIA CUDA(默认)docker/Dockerfile, pyproject.toml, sglang_omni/platforms/成熟
多硬件后端:Intel XPU(Experimental)pyproject_xpu.toml, docker/xpu.Dockerfile, scripts/xpu/, 提交热点含 XPU 修复实验
多硬件后端:Apple Silicon / MLX(Experimental)sglang_omni_mlx/, pyproject_cpu.toml, install.sh, OmniTyper/, Voxt/实验
多硬件后端:ROCm / NPU / MUSA(Experimental)pyproject_rocm.toml, pyproject_npu.toml, pyproject_musa.toml, docker/rocm.Dockerfile, docker/npu.Dockerfile, docker/musa.Dockerfile实验
多 worker 前置路由(health / readiness / lifecycle / capability discovery)sglang_omni_router/ (Rust + Python)成熟
模型族适配层(Qwen3-Omni, MiniCPM-o, MiniMax Music 3, Higgs Audio v3, MOSS-TTS, Fish Speech S2-Pro, Qwen3-TTS, Qwen3-ASR 等)sglang_omni/models/, docs/cookbook/成熟
内核级性能优化(MoE compile、HiFT decode compile、predictor 重叠、MRoPE 元数据裁剪、跨阶段零拷贝)sglang_omni/models/, 提交热点 #2599/#2598/#2597/#2518/#2555/#2525成熟
Apple / iOS 端侧配套(Swift 类型映射、Voxt 应用)OmniTyper/ (Swift Package), Voxt/ (Xcode 项目)实验
评测与回归基准benchmarks/ (87 文件), playground/, tests/ (610 文件)成熟

阶段:活跃开发、早期生产化。PyPI 最新 v0.1.7(2026-09-28),近一周仍有密集性能提交;README 明确标注 Apple Silicon、XPU 为 Experimental;CUDA 为默认完整支持后端。

技术栈:Python 3.10–3.12(主包 sglang_omni);Rust + Python(sglang_omni_router);Swift(OmniTyper、Voxt);PyTorch 2.13.0 + torchvision 0.28.0;SGLang 0.5.21(自回归调度/执行);MLX / mlx-lm(Apple Silicon 后端);flashinfer_python[cu13] 0.6.18 + flash-attn-4 + kernels 0.14.x(CUDA 内核);cache-dit 1.3.0(MiniMax Music 3 DIT);nixl-cu13 / mooncake-transfer-engine-cuda13(跨阶段传输);transformers 5.12.1, accelerate, pyzmq, msgpack, msgspec, pydantic, PyYAML, fastapi, uvicorn;多硬件 pyproject_*.toml(cpu/musa/npu/rocm/xpu);setuptools 构建;GitHub Actions CI(.github/workflows)

规模:主包 sglang_omni 739 文件;tests/ 610 文件;benchmarks/ 87 文件;examples/ 66 文件;docs/ 95 文件;sglang_omni_router/ 72 文件;sglang_omni_mlx/ 8 文件;OmniTyper 42 文件;Voxt 1008 文件。最近提交热点:tests/unit_test 24 次、sglang_omni/models 20 次、sglang_omni/preprocessing 4 次。PyPI release v0.1.7(2026-09-28)、v0.1.6(2026-09-17)、v0.1.5(2026-09-10),约每周一版。README 显示 GitHub stars、open/closed issues 徽章(具体数值需验证)。最近提交日期 2026-10-08,开发活跃。

二、架构与代码地图

SGLang-Omni 在纵向上可以划分为五层。最上层是接入层(Serving Surface),由 sglang_omni/http/、sglang_omni/cli/、sglang_omni/client/ 以及前置的 sglang_omni_router/ 组成,负责把 OpenAI 兼容的 HTTP/WS 请求、CLI 命令、Python SDK 调用转成内部 StagePayload,并落到 admission 控制与 scheduler 队列里。第二层是调度层(Scheduling & Pipeline Orchestration),核心在 sglang_omni/scheduling/、sglang_omni/pipeline/、sglang_omni/admission.py,分别承载 OmniScheduler、EngineFactory、Stage 生命周期、跨阶段 KV/tensor 传输策略与准入控制。第三层是执行层(Model Execution),由 sglang_omni/model_runner/ 与 sglang_omni/models/<model_family>/ 构成:model_runner 把调度请求翻译成 SGLang 的 ForwardBatch/ScheduleBatch,每个模型族则提供 engine_builder.py、sglang_model.py、model_runner.py、stages.py 把自己的多阶段拓扑注册到框架里。第四层是硬件与传输层(Hardware & Transport),sglang_omni/platforms/、sglang_omni/mps/、sglang_omni_mlx/、sglang_omni/comm/ 把 CUDA、Apple Silicon MLX/MPS、XPU、NPU 的差异收敛成统一后端,comm/ 下 data_ref.py、kv_transfer.py、relay.py、stage_io.py 提供共享内存、NCCL、NIXL、Mooncake 四种 tensor 传输路径。第五层是工具与支撑层(Tooling & Profiling),sglang_omni/profiler/、sglang_omni/diagnostics/、sglang_omni/utils/、benchmarks/、tests/ 提供性能剖析、硬件诊断、回归基准与端到端测试。整个架构的关键思想是:SGLang 只负责单阶段 AR 调度与 kernel 执行,多阶段拓扑、阶段间传输、模型族适配、API 表面全部由 SGLang-Omni 自己拥有。

接入层调度层执行层硬件与传输层工具与支撑层sglang_omni_router → http_api:HTTP 请求http_api → omni_scheduler:StagePayloStagePaylocli_client → omni_scheduler:StagePayloStagePayloomni_scheduler → model_runner_core:SchedulerRSchedulerRomni_scheduler → pipeline_runtime:阶段拓扑model_runner_core → platform_transport:ForwardBatForwardBatmodel_runner_core → preprocessing_sampling:采样参数platform_transport → config_system:后端配置profiler_diagnostics → model_runner_core:性能数据性能数据benchmarks_tests → cli_client:回归请求回归请求omni_scheduler → platform_transport:KV 传输KV 传输sglang_omni_routersglang_omni_routerhttp_apihttp_apicli_clientcli_clientomni_scheduleromni_schedulerpipeline_runtimepipeline_runtimemodel_runner_coremodel_runner_corepreprocessing_samplingpreprocessing_samplingplatform_transportplatform_transportconfig_systemconfig_systemprofiler_diagnosticsprofiler_diagnosticsbenchmarks_testsbenchmarks_tests
SGLang-Omni 五层架构:接入层 → 调度层 → 执行层 → 硬件与传输层 → 工具与支撑层,SGLang 内核被 model_runner_core 通过 vendor/sglang 复用
模块 / 路径职责 · 入口 · 依赖
sglang_omni_router
sglang_omni_router/
72 文件
多 worker 前置路由,对外统一 OpenAI 兼容入口,做健康检查、生命周期、能力发现与请求分发
入口:sglang_omni_router/rust/(路由核心)、sglang_omni_router/python/(Python 绑定与管理面)
依赖:sglang_omni/serve, sglang_omni/http
Rust+Python 混合实现;最近提交热点集中在 admin key 强制鉴权(#2581)与 profiler 路由保护(#2583),说明生产化安全加固是当前重点
http_api
sglang_omni/http/
约 5 文件
FastAPI 路由层,把 /v1/audio/speech、/v1/audio/transcriptions、多模态 chat 等协议转成内部 StagePayload
入口:sglang_omni/http/__init__.py, sglang_omni/http/admin_auth.py
依赖:sglang_omni/serve, sglang_omni/admission, sglang_omni/scheduling
admin_auth.py 与最近提交 #2583 对应,profiler 路由已强制 admin key;media policy 校验在 #2584 落到 chat media
cli_client
sglang_omni/cli/, sglang_omni/client/
约 10 文件
CLI 入口与 Python SDK,分别面向运维启动和开发者调用
入口:sglang_omni/cli/__main__.py, sglang_omni/cli/serve.py, sglang_omni/client/client.py, sglang_omni/client/audio.py
依赖:sglang_omni/serve, sglang_omni/config
client/audio.py 暴露流式语音接口;cli/serve.py 是 sglang-omni serve 的主入口
omni_scheduler
sglang_omni/scheduling/
约 15 文件
多阶段调度核心,OmniScheduler 协调预处理、编码器、AR、talker、vocoder 各阶段的排队、批化与生命周期
入口:sglang_omni/scheduling/omni_scheduler.py(需验证具体文件名), engine_factory.py, generation_batch_policy.py, types.py
依赖:sglang_omni/model_runner, sglang_omni/pipeline, sglang_omni/comm
engine_factory.py 中 AsrEngineBuilder / TtsEngineBuilder 是模型族接入的关键抽象;types.py 定义 SchedulerRequest / ARRequestData 等核心数据结构
pipeline_runtime
sglang_omni/pipeline/
约 5 文件
阶段拓扑与状态机,描述一个模型族由哪些 stage 串/并、每个 stage 的输入输出如何连接
入口:sglang_omni/pipeline/(具体 __init__ 与拓扑注册文件需验证)
依赖:sglang_omni/scheduling, sglang_omni/models/<family>/stages.py
README 明确指出 pipeline topology 由 SGLang-Omni 自己拥有,是区别于纯 SLLang 的核心
model_runner_core
sglang_omni/model_runner/
约 15 文件
执行层基座,把 SchedulerRequest 翻译成 SGLang 的 ForwardBatch/ScheduleBatch,驱动 prefill/decode 并回收 logits/token
入口:base.py, model_worker.py, sglang_model_runner.py, sglang_execution.py, thinker_model_runner.py, ming_thinker_model_runner.py, whisper_prefill_cuda_graph_runner.py
依赖:sglang_omni/models, sglang (srt.managers.scheduler, srt.model_executor.forward_batch_info)
thinker_model_runner.py 与 ming_thinker_model_runner.py 说明 thinker/talker 分离是显式抽象;whisper_prefill_cuda_graph_runner.py 对应 ASR encoder CUDA Graph 路径

sglang_omni/models/
约 200+ 文件,20 个模型族目录
每个模型族的适配层,提供 engine_builder / sglang_model / model_runner / stages / request_builders 五件套
入口:dots_tts/engine_builder.py, fun_cosyvoice3/engine_builder.py, fishaudio_s2_pro/engine_builder.py, higgs_tts/engine_builder.py, arkasr/engine_builder.py, fun_asr/engine_builder.py, ming_omni/stages.py, auk/(DiT + flow_matching + vae)
依赖:sglang_omni/model_runner, sglang_omni/scheduling, sglang_omni/config
commit_hotspot 显示 models/ 是提交最活跃目录(20 次/周);每个族通常含 engine_builder、sglang_model、model_runner、stages、request_builders、payload_types
platform_transport
sglang_omni/platforms/, sglang_omni/mps/, sglang_omni_mlx/, sglang_omni/comm/
约 30 文件
硬件后端抽象与跨阶段 tensor 传输,统一 CUDA / MLX / MPS / XPU / NPU 差异
入口:platforms/__init__.py(current_platform), mps/, mlx/, comm/data_ref.py, comm/kv_transfer.py, comm/relay.py, comm/stage_io.py, comm/engine.py, comm/router.py
依赖:sglang_omni/config, torch, mlx(Apple Silicon 条件依赖)
pyproject.toml 明确 Apple Silicon 走 mlx>=0.32.0 + mlx-lm;comm/ 下四种后端(shmem / NCCL / NIXL / Mooncake)是传输层核心;XPU 最近提交 #2542 把共享 accelerator 助手从 torch.cuda 解耦
config_system
sglang_omni/config/
约 12 文件
配置加载、校验、解析,把 CLI / YAML / 环境变量合并成运行时 ServerArgs 与各级 EngineBuilder 参数
入口:schema.py, manager.py, resolver.py, runtime.py, sources.py, topology.py, placement.py, compat.py, patch.py, path.py, provenance.py
依赖:pydantic, PyYAML, sglang.srt.server_args
placement.py / topology.py 对应多阶段资源分配;provenance.py 用于配置溯源;compat.py 处理与上游 SGLang 的配置兼容
preprocessing_sampling
sglang_omni/preprocessing/, sglang_omni/sampling/
约 10 文件
输入预处理(音频 / 图像 / 文本 tokenize)与采样策略(seed、temperature、top-p、repetition penalty 等)
入口:preprocessing/(具体文件需验证), sampling/seed.py
依赖:sglang_omni/models, transformers, sglang.srt.sampling
commit_hotspot 显示 preprocessing/ 最近有 4 次提交,说明输入管线仍在活跃演化;sampling/seed.py 与 Qwen3-Omni 复现性相关
profiler_diagnostics
sglang_omni/profiler/, sglang_omni/diagnostics/
约 5 文件
运行时性能剖析与硬件诊断,为 kernel 调优和部署排障提供数据
入口:profiler/(具体文件需验证), diagnostics/gpu.py
依赖:sglang_omni/platforms, torch
diagnostics/gpu.py 与最近提交 #2583 配合,profiler 路由已强制 admin key
benchmarks_tests
benchmarks/, tests/
benchmarks 87 文件,tests 610 文件
回归基准与端到端测试,覆盖 ASR / TTS / Omni / 视频理解 / 实时 ASR 等场景
入口:benchmarks/eval/benchmark_omni_*.py, benchmarks/tts_serving/, tests/unit_test/, tests/test_model/
依赖:sglang_omni/client, sglang_omni/cli
tests/unit_test 是提交最活跃热点(24 次/周),说明重构期测试在快速补强;benchmarks/ 提供 TTFT / WER / UTMOS / speaker similarity 等指标
目录树(按文件数)
  • Voxt/ 1008 个文件
    .github, .gitignore, .impeccable.md, AGENTS.md, CHANGELOG.md, CONTRIBUTING.md, Config, LICENSE, PROVENANCE.md, README.md, Voxt, Voxt.xcodeproj, VoxtTests, backend
  • sglang_omni/ 739 个文件
    __init__.py, admission.py, cli, client, comm, config, diagnostics, http, model_runner, models, mps, pipeline, platforms, preprocessing
  • tests/ 610 个文件
    README.md, __init__.py, data, test_ci, test_model, unit_test, utils
  • docs/ 95 个文件
    .gitignore, Makefile, README.md, _static, basic_usage, benchmarks, conf.py, cookbook, deploy.py, design, developer_reference, get_started, index.rst, requirements.txt
  • benchmarks/ 87 个文件
    .gitignore, README.md, benchmarker, configs, dataset, eval, metrics, realtime_asr, runtime_metrics.py, tasks, tts_serving
  • sglang_omni_router/ 72 个文件
    python, rust
  • examples/ 66 个文件
    README.md, _omni_launcher.py, configs, full_duplex, launchers, mps_dp, run_ming_omni_server.py, run_ming_omni_speech.py, run_ming_omni_speech_server.py, run_ming_omni_text_first.py, run_nemotron_voicechat.py, run_nemotron_voicechat_duplex.py, run_omni.py, run_personaplex.py
  • .github/ 50 个文件
    CI_PERMISSIONS.json, CODEOWNERS, ISSUE_TEMPLATE, actions, pull_request_template.md, scripts, update_ci_permission.py, workflows
  • playground/ 48 个文件
    README.md, __init__.py, gradio, higgs, http_utils.py, qwen-omni, realtime, s2pro
  • OmniTyper/ 42 个文件
    .gitignore, Package.swift, README.md, Resources, Sources, Tests, backend, scripts
  • .claude/ 10 个文件
    skills
  • scripts/ 8 个文件
    check_if_else.py, check_leading_underscore.py, ci, cpu, npu, xpu
  • sglang_omni_mlx/ 8 个文件
    __init__.py, qwen3_asr
  • docker/ 6 个文件
    Dockerfile, cpu.Dockerfile, musa.Dockerfile, npu.Dockerfile, rocm.Dockerfile, xpu.Dockerfile
  • .dockerignore/ 1 个文件
  • .editorconfig/ 1 个文件

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

一次典型 /v1/audio/speech 请求的生命周期如下。第一步,HTTP 层 sglang_omni/http/ 把 multipart / JSON 请求反序列化,经过 sglang_omni/http/admin_auth.py 与媒体策略校验后,在 sglang_omni/admission.py 做准入控制,生成 StagePayload 并送入 sglang_omni_router(若部署了多 worker)或直连 sglang_omni/serve。第二步,sglang_omni/scheduling/omni_scheduler.py 的 OmniScheduler 收到请求,根据模型族对应的 stages.py 把请求分解成多个 SchedulerRequest,每个 SchedulerRequest 携带 ARRequestData 或对应的 payload_types.py 中的强类型数据(如 CosyVoice3SGLangRequestData、DotsTTSSGLangRequestData),进入对应阶段的队列。第三步,调度器通过 engine_factory.py 中对应的 TtsEngineBuilder(如 FunCosyVoice3EngineBuilder、HiggsTtsEngineBuilder、DotsTTSEngineBuilder)构造出 ModelWorker 与 ModelRunner;这些 EngineBuilder 在构造期调用 customize_server_args、generation_defaults 把自己的阶段需求(关闭 CUDA Graph、调整 mem_fraction_static、设定 max_running_requests)注入 SGLang 的 ServerArgs。第四步,进入执行循环:sglang_omni/model_runner/base.py 的 ModelRunner 把 SchedulerRequest 翻译成 SGLang 的 ScheduleBatch 与 ForwardBatch,由 sglang_model_runner.py / sglang_execution.py 调用上游 SGLang 的 GenerationBatchResult 完成 prefill 与 decode;每个阶段特有的逻辑(如 dots.tts 的 latent recurrence、Fun-CosyVoice3 的 token-hop streaming、FishAudio S2-Pro 的 codebook 输出收集)由对应模型族的 model_runner.py 在 before_prefill、post_prefill、post_decode、custom_prefill_forward 钩子中实现。第五步,阶段间 tensor 传输由 sglang_omni/comm/ 处理:data_ref.py 做零拷贝引用计数,kv_transfer.py 在 AR 阶段之间搬运 KV cache,relay.py 与 stage_io.py 根据部署选择共享内存、NCCL、NIXL 或 Mooncake 后端,把 talker 的 semantic token、vocoder 的 audio chunk 以 OutgoingMessage 形式推到下一阶段。第六步,最终阶段(vocoder / aggregator)把音频帧通过 streaming_vocoder.py 或 streaming.py 以流式方式经 HTTP WS 或 client/audio.py 推回客户端。关键调度点包括:admission 的并发上限、OmniScheduler 的阶段批化策略、SGLang 内部的 radix cache 与 chunked prefill 开关、以及 generation_batch_policy.py 中 CudaGraphBackend 的 batch size 选择。关键数据结构包括:StagePayload、SchedulerRequest、ARRequestData、RequestOutput、SchedulerOutput、ForwardBatch、ScheduleBatch、GenerationBatchResult,以及各模型族自定义的 payload_types.py。

1HTTP 入口FastAPI Router · sglang_omni/http/__init__.py2准入控制admission.py · sglang_omni/admission.py3多阶段调度OmniScheduler · sglang_omni/scheduling/omni_scheduler.py(需验证)4Engine 构建TtsEngineBuilder · sglang_omni/models/fun_cosyvoice3/engine_builder.py5ModelRunner 执行FunCosyVoice3ModelRunner · sglang_omni/models/fun_cosyvoice3/model_runner.py6SGLang Forwardsglang_execution.py · sglang_omni/model_runner/sglang_execution.py7跨阶段传输relay.py / kv_transfer.py · sglang_omni/comm/relay.py8流式输出streaming_vocoder.py · sglang_omni/models/fun_cosyvoice3/streaming_vocoder.py9SDK 回包client/audio.py · sglang_omni/client/audio.py

关键类型与函数

名称路径用途
OmniSchedulersglang_omni/scheduling/omni_scheduler.py(需验证具体文件名)
AsrEngineBuilder / TtsEngineBuildersglang_omni/scheduling/engine_factory.py
ModelRunnersglang_omni/model_runner/base.py
SchedulerRequest / ARRequestDatasglang_omni/scheduling/types.py
StagePayloadsglang_omni/proto/request.py
ForwardBatch / ScheduleBatch / GenerationBatchResultsglang_omni/vendor/sglang/core.py(re-export 自 sglang.srt)
current_platformsglang_omni/platforms/__init__.py
DataRef / KVTransfersglang_omni/comm/data_ref.py, sglang_omni/comm/kv_transfer.py
CosyVoice3SGLangRequestData / DotsTTSSGLangRequestDatasglang_omni/models/fun_cosyvoice3/request_builders.py, sglang_omni/models/dots_tts/request_builders.py
FunCosyVoice3ModelRunner / DotsTTSModelRunner / FishS2ProModelRunnersglang_omni/models/fun_cosyvoice3/model_runner.py, sglang_omni/models/dots_tts/model_runner.py, sglang_omni/models/fishaudio_s2_pro/model_runner.py
CudaGraphBackendsglang_omni/scheduling/generation_batch_policy.py
OutgoingMessagesglang_omni/scheduling/message.py
ServerArgssglang_omni/vendor/sglang/server_args.py(re-export 自 sglang.srt.server_args)
resolve_checkpointsglang_omni/utils/checkpoint.py(需验证)

扩展点

最近在动的地方

建议阅读顺序

  1. README.md(项目定位、硬件支持矩阵、Quick Start)
  2. sglang_omni/scheduling/engine_factory.py(EngineBuilder 抽象,理解模型族接入契约)
  3. sglang_omni/scheduling/types.py(SchedulerRequest / ARRequestData / OutgoingMessage 等核心数据结构)
  4. sglang_omni/model_runner/base.py(ModelRunner 基类,理解 prefill/decode 生命周期钩子)
  5. sglang_omni/models/dots_tts/ 或 sglang_omni/models/fun_cosyvoice3/(选一个模型族完整读 engine_builder → sglang_model → model_runner → stages → request_builders 五件套)
  6. sglang_omni/models/arkasr/ 或 sglang_omni/models/fun_asr/(ASR 族,理解 encoder_service 与 CUDA Graph 路径)
  7. sglang_omni/comm/(data_ref.py、kv_transfer.py、relay.py、stage_io.py,理解跨阶段传输)
  8. sglang_omni/platforms/ 与 sglang_omni_mlx/(硬件后端抽象,Apple Silicon 适配)
  9. sglang_omni/http/ 与 sglang_omni_router/python/(接入层,理解请求入口与鉴权)
  10. tests/unit_test/ 与 benchmarks/eval/(通过测试用例反推模块契约与性能基准)

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

安装

  1. # 1. 前置:Homebrew + Python 3.10–3.12(Apple Silicon 要求)
  2. brew install uv
  3. # 2. 克隆仓库
  4. git clone https://github.com/sgl-project/sglang-omni.git && cd sglang-omni
  5. # 3. 一键安装脚本(README Quick Start 明确指向)
  6. # 内部会检测 arm64 + darwin,走 pyproject.toml 的 mlx/mlx-lm 分支,跳过 flashinfer_python[cu13]/flash-attn-4/nixl-cu13/mooncake-transfer-engine-cuda13/kernels 等 CUDA-only 依赖
  7. ./install.sh
  8. # 4. 失败回退:手动用 uv 创建 venv 并安装 Apple Silicon 子集
  9. # pyproject.toml 中 Apple Silicon 专属依赖:mlx>=0.32.0, mlx-lm;CUDA 依赖通过 sys_platform != 'darwin' or platform_machine != 'arm64' 自动排除
  10. uv venv --python 3.11 .venv && source .venv/bin/activate
  11. uv pip install -e . --prerelease=allow
  12. # 5. 验证安装(应看到 torch=2.13.0, transformers=5.12.1, sglang 从源码编译的 all_mps 变体, mlx 已安装)
  13. python -c "import sglang_omni, torch, mlx; print('torch', torch.__version__); print('mlx ok')"
  14. # 6. 跳过/不会装上的依赖(pyproject.toml 中 sys_platform 条件排除):
  15. # flashinfer_python[cu13]==0.6.18, flash-attn-4>=4.0.0b18, kernels>=0.14.1,<0.15,
  16. # nixl-cu13>=1.1.0, mooncake-transfer-engine-cuda13>=0.3.10
  17. # 这些是 CUDA relay/attention 后端,Apple Silicon 上 import 会直接报错,不要尝试安装

哪些路径能真跑

['# 能在 Apple Silicon / MPS / MLX 上真正执行的代码路径:', '# - sglang_omni_mlx/ 整个包:Qwen3-ASR 的 MLX 推理路径(README 明确 Apple Silicon 支持 Qwen3-ASR via MLX)', '# - sglang_omni/models/*/mlx/ 子模块:arkasr/mlx/, fun_cosyvoice3/mlx/, fun_asr/torch_mps_runner.py —— 这些是 Apple Silicon 专用 runner', '# - sglang_omni/model_runner/audio_mlx.py, audio_torch_mps.py —— MLX/MPS 音频执行器', '# - sglang_omni/mps/ —— Metal Performance Shaders 后端适配', "# - sglang_omni/models/fun_cosyvoice3/engine_builder.py 中 uses_torch_mps() 分支(device.type == 'mps' 时走 Torch MPS 而非 MLX)", '# - sglang_omni/models/fun_asr/torch_mps_runner.py —— Fun-ASR 的 MPS 实现', '# - sglang_omni_router/ —— Rust+Python 路由层,无 GPU 依赖,纯 CPU 可编译运行', '# - tests/unit_test/ —— 纯 Python 单元测试(调度逻辑、配置解析、payload 序列化)', '# - sglang_omni/config/ —— 配置系统,CPU 可跑', '# - sglang_omni/scheduling/ —— 调度逻辑(除 CUDA graph 相关)', '# - sglang_omni/pipeline/ —— pipeline 拓扑定义', '# - sglang_omni/profiler/, diagnostics/ —— 诊断工具(部分 GPU 相关功能会降级)', '#', '# 只能读代码或必须 Colab T4 验证的路径:', '# - 所有 *cuda_graph*.py:encoder_cuda_graph.py, step_cuda_graph.py, vocoder_cuda_graph.py, prefix_cuda_graph.py, whisper_prefill_cuda_graph_runner.py', '# - sglang_omni/comm/kv_transfer.py 中 NCCL 路径、relay.py 中 NIXL/Mooncake 后端', '# - sglang_omni/models/qwen3_omni/ 的 thinker/talker 内核(MoE compile、MRoPE 优化均为 CUDA 专属)', '# - sglang_omni/models/dots_tts/ 的 torch_compile 路径(configure_optimized_kernels)', '# - sglang_omni/models/fishaudio_s2_pro/ 的 Fast-AR attention(强制要求 SM89/90/100/120 + flashinfer)', '# - sglang_omni/models/higgs_tts/ 的 CUDA graph 路径', '# - sglang_omni/platforms/ 中 CUDA 后端的具体 kernel 调用', '# - benchmarks/ 下所有 eval 脚本(均需真实 GPU 推理)']

最小可运行

  1. # 冒烟测试 1:验证 Apple Silicon 上 Qwen3-ASR MLX 路径可 import 并加载模型(README 明确这是 Apple Silicon 主打功能)
  2. python -c "from sglang_omni_mlx import qwen3_asr; print('Qwen3-ASR MLX module loaded')"
  3. # 冒烟测试 2:验证 Torch MPS 音频 runner 可实例化(不跑推理,只验 import 和设备检测)
  4. python -c "from sglang_omni.model_runner.audio_torch_mps import *; print('Torch MPS audio runner import ok')"
  5. # 冒烟测试 3:验证 Fun-ASR Torch MPS runner 路径(sglang_omni/models/fun_asr/torch_mps_runner.py 存在)
  6. python -c "from sglang_omni.models.fun_asr.torch_mps_runner import FunASRTorchMpsModelRunner; print('FunASR MPS runner import ok')"
  7. # 冒烟测试 4:验证 CosyVoice3 MLX 子模块可 import(fun_cosyvoice3/mlx/ 目录存在)
  8. python -c "from sglang_omni.models.fun_cosyvoice3.mlx import model as cv3_mlx_model; print('CosyVoice3 MLX import ok')"
  9. # 冒烟测试 5:验证配置系统 CPU 可跑(无 GPU 依赖)
  10. python -c "from sglang_omni.config.manager import ConfigManager; cm = ConfigManager(); print('ConfigManager init ok')"
  11. # 冒烟测试 6:验证 sglang_omni_router Python 层可 import(Rust 部分需单独编译)
  12. python -c "from sglang_omni_router.python import *; print('Router Python layer import ok')" # 需验证具体导出

测试

['# 测试框架:pytest(tests/ 目录 610 文件,含 test_ci/, test_model/, unit_test/, utils/)', '# 目录结构:', '# tests/unit_test/ —— 纯 CPU 单元测试(调度、配置、payload、序列化)', '# tests/test_ci/ —— CI 专用测试', '# tests/test_model/ —— 模型级测试(多数需 GPU)', '# tests/utils/ —— 测试工具', '# tests/data/ —— 测试数据', '#', '# 只跑 CPU 子集(Apple Silicon 推荐):', "pytest tests/unit_test/ -x -v --timeout=120 -k 'not gpu and not cuda and not trt'", '# 预估耗时:unit_test 子集在 16GB MacBook Air 上约 5–15 分钟(取决于是否触发模型下载)', '#', '# 跳过 GPU 测试的标记(需验证具体 marker 名称):', '# 查看 pytest.ini 或 conftest.py 中是否有 @pytest.mark.gpu / @pytest.mark.cuda', '# 若无显式 marker,用 -k 排除关键词过滤', '#', '# 注意:tests/test_model/ 下多数测试会尝试 import flashinfer 或 CUDA 相关模块,', '# 在 Apple Silicon 上会 collect error,建议只跑 unit_test/']

调试

CI

['# CI 系统:GitHub Actions(.github/workflows/ 下多个 workflow,.github/scripts/ 含辅助脚本)', '# 关键 CI 脚本:', '# .github/scripts/pr_ci_gate.py —— PR 门禁逻辑', '# .github/scripts/verify_omni_installed_pins.py —— 验证依赖 pin 一致性', '# .github/scripts/omni_missing_dependencies.py —— 缺失依赖检测', '# .github/update_ci_permission.py —— CI 权限管理', '#', '# 多后端 CI 矩阵(docker/ 目录对应):', '# Dockerfile(CUDA 默认)、cpu.Dockerfile、musa.Dockerfile、npu.Dockerfile、rocm.Dockerfile、xpu.Dockerfile', '# CI 会分别在这些镜像中跑测试', '#', '# PR 会被卡住的检查(推测,需看 workflows 文件名确认):', '# 1. pre-commit:isort、check_if_else.py、check_leading_underscore.py 等代码风格检查', '# 2. unit_test 子集必须在 CPU 上通过', '# 3. 依赖 pin 一致性检查(verify_omni_installed_pins.py)', '# 4. 多后端构建验证(CUDA/XPU/NPU/ROCm 各自有 CI job)', '# 5. 可能有的 docs 构建检查(docs/ 含 Makefile 和 serve.sh)', '#', '# Apple Silicon 相关 CI:需确认是否有 macOS arm64 runner(README 标 Experimental,可能无专属 CI)']

坑

四、维护者与社区

高频迭代。最近三个 PyPI release 集中在 2026-09:v0.1.5(09-10)、v0.1.6(09-17)、v0.1.7(09-28),间隔约 7–10 天,呈周级发版节奏。提交活动集中在 2026-10-08 当天,单日至少 12 个 PR 合入,热点全部是 Qwen3-Omni 内核性能优化(#2597 MRoPE 元数据裁剪、#2598 predictor 重叠发射、#2599 MoE kernel compile)、MiniCPM-o HiFT decode compile(#2518)、CosyVoice3 / MOSS-TTS 跨阶段零拷贝(#2555、#2525)、Router 安全修复(#2581、#2583)。仓库整体处于活跃的产品化冲刺阶段。

谁角色依据
AkazaAkane核心维护者 / 路线图负责人Issue #1081「SGLang-Omni Roadmap」、#1967「Apple Silicon support roadmap」、#2362「Qwen3-Omni Serving Reform and Default Configuration Roadmap」的 assignee;多条路线图类 Issue 均由其负责。
db-olRuntime Profiling 负责人Issue #1882「Runtime Profiling: Dots-TTS」、#1883「Runtime Profiling: Fun-CosyVoice3」的 assignee,主导多个模型族的性能剖析与优化闭环。
luojiaxuanQwen3-TTS 优化负责人Issue #1754「Qwen3-TTS Optimization Follow-Up Roadmap」assignee,该 Issue 有 27 条评论,是当前 TTS 性能优化的核心跟踪帖。
SunskyXH代码工程 / 风格治理Issue #2195「Roadmap: Coding Style」assignee,负责仓库编码风格与工程规范。
yeahdongcnMUSA(摩尔线程)后端负责人Issue #1598「RFC: Moore Threads MUSA Support Roadmap」assignee,主导 MUSA 后端支持。
lijrjyanFull Duplex 方向负责人Issue #1909「Roadmap: Full Duplex」assignee,负责全双工会话架构。
ping1jing2NPU(华为 Ascend)方向负责人Issue #2076「NPU: Qwen3-ASR on Ascend roadmap」assignee。
zhaochenyang20对外合作 / 生态联络README 末尾明确列出「Organizations interested in supporting SGLang-Omni... can contact Chenyang Zhao at zhaochenyang@lmsys.org」,是项目对外联络窗口。

流程与 Review 风格

仓库没有独立的 CONTRIBUTING.md(根目录、docs/ 下均未见,contributing 字段为空)。从现有证据推断的贡献流程:1)鼓励先开 Issue 讨论——仓库大量使用 [Roadmap]、[RFC]、[Tracking]、[Runtime Profiling]、[Feature]、[Bug] 前缀的 Issue 模板(见 .github/ISSUE_TEMPLATE 目录),几乎所有工作都先落到一个 Issue 再开 PR;2)PR 标题沿用 [Perf]、[Fix]、[Feature]、[XPU]、[Apple]、[MiniCPM-o]、[Router] 等前缀,与 Issue 标签体系对齐;3)pre-commit 已配置(仓库根有 .pre-commit-config.yaml,docs/README.md 明确要求「Run pre-commit run --all-files before opening a PR」);4)CI 权限与代码归属由 .github/CODEOWNERS、CI_PERMISSIONS.json、update_ci_permission.py 管理;5)未发现 CLA / DCO 文件(需验证:仓库根目录仅有 LICENSE,未提及 CLA 或 DCO 签署流程)。

从近期 PR 与提交推断:响应速度快(10-08 当天密集合入多个 perf PR),review 聚焦具体技术点——如 #2597–#2599 三个 Qwen3-Omni perf commit 是同一工作被拆成三个细粒度 PR 分别合入,说明维护者偏好小而精、可独立验证的 PR;安全类修复(#2581 Router admin key、#2583 profiler routes)同样快速合入。路线图类 Issue(#1754、#1883、#2459)评论数高达 10–27 条,说明设计阶段讨论充分,但一旦进入实现则 PR 拆分很细。整体风格偏「先 Issue 对齐 → 小 PR 快速迭代 → 性能可量化验证」。

渠道

这里的规矩

维护者现在最想要的帮助

五、切入方案

建议长期负责:Apple Silicon / MLX 后端负责人(sglang_omni_mlx/ + models/*/mlx/ + Apple Silicon 测试与基准)
这个方向天然匹配候选人的端侧部署与扩散模型推理加速经验;当前仓库只有 Qwen3-ASR 一条 Apple Silicon 路径,缺口大且无人长期负责;工作全程可在 MacBook Air 上完成,最多用 Colab T4 做最终 CUDA parity 验证;从补测试/文档开始,逐步扩展到 TTS 模型移植,可通向维护者身份。

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

缺口依据为什么是你
Apple Silicon / MLX 后端覆盖严重不足,只有 Qwen3-ASR 一条完整路径README 表格明确标注 Apple Silicon 为 Experimental,仅列出 Qwen3-ASR;sglang_omni_mlx/ 只有 8 个文件且仅含 qwen3_asr;models/ 下虽有 fun_asr/torch_mps_runner.py、fun_cosyvoice3/mlx/ 等零星 MLX 适配,但 README 未宣称任何 TTS/Omni 模型在 Apple Silicon 上端到端可用。你擅长扩散模型推理加速与端侧部署(TensorRT/量化),把 TTS 模型(如 Fun-CosyVoice3、dots.tts、FishAudio S2-Pro)移植到 MLX/MPS 正是把端侧经验迁移到 Apple Silicon 的工作,且全程可在 MacBook Air 上开发与验证,无需 GPU。
Apple Silicon 上缺乏系统性的性能基准与回归测试benchmarks/ 有 87 个文件,但目录结构与文件名中没有任何 mlx/mps 相关基准;benchmarks/tasks/ 含 tts.py、asr.py 等通用任务,但没有 Apple Silicon 专属的 runtime_metrics 或 parity 测试;tests/ 下 610 个文件中未见 MPS/MLX 后端的单元测试或数值 parity 测试。你擅长算子融合与性能剖析,可以在 Apple Silicon 上建立 MLX vs MPS vs CPU 的 baseline,形成可重复的回归基准,这是无 GPU 条件下直接产出价值的工作。
模型族适配层缺乏 Apple Silicon 代码路径的文档与示例docs/cookbook/ 下有 qwen3_asr.md 的 Apple Silicon 章节,但 Fun-ASR、dots.tts、FishAudio S2-Pro、Higgs TTS 等模型族文档中未见任何 Apple Silicon 说明;sglang_omni_mlx/ 无 README;pyproject.toml 中 Apple Silicon 依赖仅通过 sys_platform 条件静默排除 CUDA 依赖,没有显式的 serving 示例。你可以通过移植+文档的方式同时产出代码和教程,这类贡献门槛低、价值高,且完全在 CPU/Apple Silicon 上完成。
跨阶段传输层在 Apple Silicon 上缺少零拷贝/共享内存路径的验证sglang_omni/comm/ 含 data_ref.py、kv_transfer.py、relay.py、stage_io.py,支持 NCCL、NIXL、Mooncake 四种后端,但 Apple Silicon 上 NCCL/NIXL/Mooncake 均不可用(pyproject.toml 中通过 sys_platform 排除 nixl-cu13 和 mooncake-transfer-engine-cuda13);Apple Silicon 上实际可用的共享内存路径缺乏测试覆盖。你可以补全 Apple Silicon 上 comm 层的单元测试与共享内存传输路径验证,这是无 GPU 条件下能做的基础设施工作。
Router 与多 worker 架构缺乏 Apple Silicon 端到端 smoke testsglang_omni_router/ 含 Rust + Python 共 72 个文件,是多 worker 前置路由;tests/ 下未见 router 在 Apple Silicon 上的 smoke test 或健康检查脚本;README 中 Router guide 未提 Apple Silicon。你可以在 MacBook Air 上跑多 worker router smoke test,补全 Apple Silicon 上的生命周期与健康检查验证。
编码风格与工程规范仍在推进中,相关 Issue 公开招募贡献者Issue #2195「Roadmap: Coding Style」由 SunskyXH 负责,说明仓库仍在推进代码规范;scripts/ 下有 check_if_else.py、check_leading_underscore.py 等 lint 脚本;AGENTS.md 与 CLAUDE.md 都指向 .claude/skills/code-review/coding-style.md。这类工作完全不需要 GPU,可以在早期通过小规模合规 PR 建立信任和代码库熟悉度。
XPU/MUSA/NPU 等非 CUDA 后端与 Apple Silicon 类似,都缺测试与文档pyproject_xpu.toml、pyproject_musa.toml、pyproject_npu.toml 存在,docker/ 下有对应 Dockerfile;Issue #1598(MUSA)由 yeahdongcn 负责,Issue #2542 提交『Take the shared accelerator helpers off torch.cuda』显示 XPU 仍在去 CUDA 化。你擅长多后端(CUDA/TensorRT)优化,可以把 CUDA 端的优化经验抽象成后端无关的实现,为非 CUDA 后端补测试和基准。
TTS 架构 refactor 后新 pipeline 状态与 vocoder scheduling 缺乏 Apple Silicon 验证README 提到 2026/08 完成 TTS architecture refactor(shared pipeline state, engine construction, reference encoding, capability metadata, vocoder scheduling);models/higgs_tts/vocoder_scheduler.py、models/dots_tts/vocoder_slot_pool.py 等新增模块;但 Apple Silicon 上未跑通这些新路径。你可以在 Apple Silicon 上验证新 TTS pipeline 的正确性,发现 CUDA-only 假设并修复。
profiler 与 diagnostics 模块在 Apple Silicon 上覆盖不足sglang_omni/profiler/、sglang_omni/diagnostics/ 存在,diagnostics/gpu.py 明显是 GPU 专属;Issue #1882(Dots-TTS Runtime Profiling)、#1883(Fun-CosyVoice3 Runtime Profiling)由 db-ol 负责,但 profiling 数据只在 CUDA 上采集。你可以扩展 profiler 支持 Apple Silicon 的 MPS/MLX 计数器,这是无 GPU 条件下直接可做的性能工程工作。

第 1–30 天:看懂并露面

第 31–60 天:稳定产出

第 61–90 天:接管一块

第一批 PR

题目范围为什么安全
[Doc] Add sglang_omni_mlx README with Apple Silicon support matrixsglang_omni_mlx/README.md + 对应 docs/cookbook/ 索引更新纯文档,不触及运行时代码,风险极低;且当前 sglang_omni_mlx/ 无 README 是明确的缺口
[Test] Add unit tests for fun_asr TorchMPS runner request builderstests/unit_test/ 下新增 test_fun_asr_mps_runner.py只补测试,不改生产代码;可在 CPU 上跑;绑定 fun_asr/torch_mps_runner.py 现有功能
[Test] Add shared-memory comm backend test for Apple Silicontests/unit_test/ 下新增 test_comm_shm_apple_silicon.py只测 comm/ 层共享内存路径,不涉及 GPU;可验证 data_ref.py、stage_io.py 在 Apple Silicon 上的行为
[Style] Fix leading underscore violations in models/dots_tts/models/dots_tts/ 下符合 scripts/check_leading_underscore.py 的修复绑定 Issue #2195 编码风格 roadmap;机械性修复,不影响逻辑
[Benchmark] Add Apple Silicon runtime_metrics script for Qwen3-ASR MLXbenchmarks/ 下新增 apple_silicon_asr_mlx.py只新增基准脚本,不改框架代码;可在 MacBook Air 上直接运行

怎么知道自己站住了

风险与对策
  • Apple Silicon 上某些 CUDA-only kernel(如 flashinfer、fa3、nixl)无法运行,导致 TTS 模型移植卡住:优先选择已有 MLX/MPS 后端的模型族(如 fun_cosyvoice3、fun_asr)作为第一个移植目标;对 CUDA-only 路径写 platform guard 并开 Issue 跟踪
  • 仓库迭代快(周级发版),你的 PR 可能因冲突需要频繁 rebase:保持 PR 小而专注;在 Slack 与 maintainer 同步开发意图;优先做文档/测试类 PR 减少冲突面
  • Apple Silicon Experimental 状态可能意味着 maintainer 暂时无意投入资源:先用文档+测试+基准证明价值;在 Issue #1967(Apple Silicon support roadmap)下持续交付可见产出
  • 无 GPU 导致无法验证 CUDA 路径的正确性:用 Colab 免费 T4 做最终 parity 验证;在 PR 中明确标注 Apple Silicon 已验证、CUDA 需 reviewer 协助
  • 编码风格规范仍在演进中,早期 PR 可能因风格问题被反复要求修改:严格遵循 .claude/skills/code-review/coding-style.md;跑 pre-commit 后再提交;参考最近合并的 PR 风格
  • sglang_omni_mlx/ 只有 8 个文件,可能不足以形成长期 ownership:把 ownership 范围扩大到 models/*/mlx/、Apple Silicon 测试与基准,形成更大的责任面
  • Apple Silicon 16GB 内存可能无法跑大模型(如 Qwen3-Omni、FishAudio S2-Pro):先用小模型(Qwen3-ASR、Fun-ASR)建立流程;对大模型只跑 request_builders 和 model_runner 的 CPU 单元测试
  • 社区沟通以英文为主,时区差异可能延迟反馈:在 Slack 写清晰的异步更新;把技术决策和阻塞点写成 Issue 评论供 maintainer 离线 review

六、怎么介入这个项目

社区入口:slack.sglang.io

建议顺序

成为长期维护者的路径
  • 仓库维护者活跃(10 月 8 日仍有提交),PR 合并节奏快,Roadmap / Tracking Issue 公开招募贡献者。
  • 首次贡献建议从 Apple Silicon 测试、文档、基准脚本入手,快速建立信任;认领时直接在 Issue 下留言,不需要提前开 RFC。
  • 涉及调度器、comm、profiler 等核心模块的改动,建议先在 Issue 里贴设计草稿(2-3 句话),得到维护者确认后再动手。
  • CI 要求:单元测试 + Ruff 格式检查;Apple Silicon 相关 PR 应附上 MacBook Air 上的实测命令与输出。

七、任务卡

任务 1优先 · low · Mac · 2 个晚上

[Apple Silicon] 为 Fun-ASR TorchMPS runner 补 request builder 单元测试

已指派 AkazaAkane已有 PR #197723 条评论更新 2026-10-06

用到的专长:端侧部署经验(TensorRT/量化)直接迁移到 Apple Silicon 后端适配;单元测试是低风险高信任的入门贡献。

目标:为 fun_asr/torch_mps_runner.py 的 request builder 逻辑新增单元测试,覆盖:音频输入预处理、prompt 构造、MPS device 分支、repetition_penalty 传递。测试在 MacBook Air 上可跑,不依赖 GPU。

为什么值得长期做:Apple Silicon 是 README 明确标注的 Experimental 后端,Qwen3-ASR 已有 MLX 路径,但 Fun-ASR 的 TorchMPS runner(sglang_omni/models/fun_asr/torch_mps_runner.py)缺乏测试覆盖。补全测试是成为 Apple Silicon 后端负责人的第一步。

怎么介入:Issue #1967 已有 assignee AkazaAkane 和多个 open PR,但测试覆盖仍是明确缺口。此卡不与现有 PR 冲突,属于补测试而非改生产代码。
第一个 PR 的边界:第一个 PR 只新增 tests/unit_test/test_fun_asr_mps_runner.py,不修改任何生产代码。
第一步:克隆仓库,在 Mac 上执行 ./install.sh 安装 Apple Silicon 依赖,然后运行 pytest tests/unit_test/ -k fun_asr 确认现有测试状态。
本机怎么复现 / 验证:git clone && ./install.sh && pip install -e '.[test]' && pytest tests/unit_test/ -k fun_asr -v # 确认基线;然后编写新测试并运行 pytest tests/unit_test/test_fun_asr_mps_runner.py -v
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to add unit tests for the Fun-ASR TorchMPS runner request builders under the Apple Silicon roadmap (#1967). Plan: create tests/unit_test/test_fun_asr_mps_runner.py covering audio preprocessing, prompt construction, the MPS device branch, and repetition_penalty passthrough. All tests will run on Apple Silicon without GPU. I'll keep the first PR scoped to tests only. Could you confirm if the request builder lives in torch_mps_runner.py or a separate module? Target: PR within 2 evenings.
大致实施方案
  • 定位 fun_asr/torch_mps_runner.py 中的 request builder 函数(如 build_request / prepare_input)。
  • 在 tests/unit_test/ 下新增 test_fun_asr_mps_runner.py(新增文件)。
  • 构造 mock 音频输入(小段随机 tensor),验证 builder 输出字段完整性。
  • 验证 device.type == 'mps' 分支确实走到 Torch MPS 路径而非 MLX。
  • 验证 repetition_penalty 参数从请求传递到 sampling 配置。
  • 在 Mac 上跑 pytest tests/unit_test/test_fun_asr_mps_runner.py -v 确认通过。
可能涉及的目录或文件
  • sglang_omni/models/fun_asr/torch_mps_runner.py
  • sglang_omni/models/fun_asr/request_builders.py(需确认是否存在)
  • tests/unit_test/test_fun_asr_mps_runner.py(新增)
验收方式
  • pytest tests/unit_test/test_fun_asr_mps_runner.py -v 在 MacBook Air 上全部通过
  • ruff check tests/unit_test/test_fun_asr_mps_runner.py 无警告
  • 测试覆盖 device=mps 和 device=cpu 两个分支
开工前问题与风险

向维护者确认

  • Fun-ASR TorchMPS runner 的 request builder 具体在哪个文件?是 torch_mps_runner.py 内联还是独立模块?
  • 是否需要覆盖 batch 场景,还是单请求即可?

风险

  • 若 torch_mps_runner.py 依赖 MLX 或 CUDA 特定符号,Mac 上 import 可能失败;需确认纯 MPS 路径可独立导入。
任务 2优先 · medium · Mac · 2-3 个晚上

[Apple Silicon] 新增 Apple Silicon runtime_metrics 基准脚本(Qwen3-ASR MLX)

已指派 AkazaAkane已有 PR #197723 条评论更新 2026-10-06

用到的专长:性能剖析与 roofline 分析经验直接适用于 Apple Silicon 基准建立。

目标:在 benchmarks/ 下新增 apple_silicon_asr_mlx.py,测量 Qwen3-ASR 在 Apple Silicon 上的 RTF、首 token 延迟、内存占用,输出结构化 JSON 报告。

为什么值得长期做:Apple Silicon 上缺乏系统性能基准是 README 明确标注 Experimental 的原因之一。建立可重复的 MLX vs MPS vs CPU baseline 是后端成熟度的关键证据。

怎么介入:Issue #1967 的 open PR 集中在模型移植,基准脚本是独立且不冲突的贡献。
第一个 PR 的边界:第一个 PR 只新增 benchmarks/apple_silicon_asr_mlx.py 及少量说明文档,不改框架代码。
第一步:阅读 benchmarks/eval/benchmark_asr_seedtts.py 了解现有基准结构,然后基于 sglang_omni_mlx/qwen3_asr 实现 Apple Silicon 专用脚本。
本机怎么复现 / 验证:git clone && ./install.sh && python benchmarks/apple_silicon_asr_mlx.py --device mlx --num-samples 5 # 在 MacBook Air 上直接运行并检查 JSON 输出
认领留言(英文,可直接贴到 Issue)
Hi, under the Apple Silicon roadmap (#1967), I'd like to add a runtime_metrics benchmark script for Qwen3-ASR on Apple Silicon. Plan: create benchmarks/apple_silicon_asr_mlx.py measuring RTF, first-token latency, and peak memory across MLX/MPS/CPU backends. Will use a small local audio set (5-10 samples) to avoid large downloads. Output structured JSON for regression tracking. First PR scoped to the script only. Target: 2 evenings.
大致实施方案
  • 克隆仓库,确认 sglang_omni_mlx/qwen3_asr 的 MLX 推理入口。
  • 在 benchmarks/ 下新增 apple_silicon_asr_mlx.py(新增文件)。
  • 实现本地音频加载(避免下载大数据集,用 5-10 条内置样本)。
  • 测量:端到端延迟、RTF、峰值内存(psutil)、MLX vs MPS vs CPU 三档对比。
  • 输出 JSON 报告到 stdout 或本地文件。
  • 在 MacBook Air 上运行并记录输出作为 PR 附件。
可能涉及的目录或文件
  • sglang_omni_mlx/qwen3_asr/
  • benchmarks/apple_silicon_asr_mlx.py(新增)
  • sglang_omni/models/qwen3_asr/(参考现有实现)
验收方式
  • python benchmarks/apple_silicon_asr_mlx.py 在 MacBook Air 上成功运行并输出 JSON
  • 报告包含 RTF、p50/p95 延迟、内存占用三项核心指标
  • 脚本支持 --device mlx/mps/cpu 参数切换
开工前问题与风险

向维护者确认

  • 基准数据集:是否可以用本地 5-10 条音频替代完整 SeedTTS 数据集?
  • MLX 和 MPS 的对比是否需要同一模型权重?

风险

  • MLX 在 Apple Silicon 上的内存占用可能较高,需设置合理的输入长度上限。
任务 3可选 · medium · CPU · 3-4 个晚上

[RFC] Full-Duplex Recoverable Unit Failures 中「Unit 生命周期状态机」子项

无人认领0 条评论更新 2026-10-06

用到的专长:分布式训练中的容错与状态机设计经验直接适用于 Unit 生命周期管理。

目标:基于 RFC #2561 的设计,实现 Unit 生命周期状态机(pending → running → committed / failed → retrying),确保单 session 内 Unit 严格有序 commit,跨 session 故障隔离。

为什么值得长期做:Full-Duplex 是 SGLang-Omni 的核心会话模型,RFC #2561 提出 Unit 必须按序 commit、失败可恢复的契约。实现 Unit 生命周期状态机是 Full-Duplex 生产化的基础。

怎么介入:Issue #2561 无 assignee、无 open PR,仍在 RFC 阶段。此卡应先开 Issue 提案(或在 #2561 下留言),得到维护者对状态机设计的确认后再动手实现。
第一个 PR 的边界:第一个 PR 只新增 Unit 状态机骨架(UnitState 枚举 + commit cursor + 基础转换逻辑)和单元测试,不修改调度器主循环。
第一步:阅读 RFC #2561 全文,理解 recovery ladder(fast retry / rollback / reset / session fatal),然后定位现有 session 状态管理代码。
本机怎么复现 / 验证:git clone && pip install -e '.[test]' && pytest tests/unit_test/ -k session -v # 确认现有 session 测试基线;然后编写状态机测试并运行
认领留言(英文,可直接贴到 Issue)
Hi, I'd like to implement the Unit lifecycle state machine proposed in #2561 as a step toward recoverable full-duplex sessions. Plan: first post a design sketch here for feedback (UnitState enum, commit cursor per stage, fast-retry vs rollback-retry ladder), then implement with unit tests once aligned. I'll keep the first PR scoped to the state machine skeleton + tests, without changing the scheduler thread. Could you confirm if this RFC is ready for implementation? Target: design comment within 1 evening, PR within 4 evenings after alignment.
大致实施方案
  • 定位现有 session 状态管理:sglang_omni/serve/realtime/session.py 或 scheduling/ 相关文件。
  • 设计 Unit 状态机:定义 UnitState 枚举(PENDING, RUNNING, COMMITTED, FAILED, RETRYING)。
  • 实现 commit 顺序保证:每个 stage 维护一个 commit cursor,后续 Unit 不得越过未解决的更早 Unit。
  • 实现 fast retry:若 Unit 失败且未修改持久状态,直接重试。
  • 实现 rollback + retry:若 Unit 可能修改状态,先 checkpoint 再重试。
  • 添加单元测试:模拟 Unit 失败场景,验证状态机行为符合 RFC 契约。
  • 在 Mac 上跑测试确认逻辑正确。
可能涉及的目录或文件
  • sglang_omni/serve/realtime/session.py
  • sglang_omni/scheduling/omni_scheduler.py(需确认文件名)
  • sglang_omni/pipeline/(stage commit 逻辑)
验收方式
  • 单元测试覆盖:fast retry、rollback retry、session fatal 三种恢复路径
  • 测试验证跨 session 故障隔离(A session 失败不影响 B session)
  • 测试验证 commit 顺序不变量
开工前问题与风险

向维护者确认

  • RFC #2561 是否已有维护者认领实现?还是仍在设计讨论阶段?
  • 现有 session 状态管理代码在哪个模块?是 realtime/session.py 还是 scheduling/ 层?
  • 是否需要先实现状态机骨架,再逐步添加 recovery 策略?

风险

  • R
  • F
  • C
  • 仍
  • 在
  • 讨
  • 论
  • 中
  • ,
  • 实
  • 现
  • 前
  • 需
  • 得
  • 到
  • 维
  • 护
  • 者
  • 对
  • 设
  • 计
  • 方
  • 向
  • 的
  • 确
  • 认
  • 。