mrkeyoor.com_
Sat 17 Oct 13:35 UTC
Self-Hostedevaluationupdated 26 Aug 2026

sglang-omni review

SGLang-Omni is a server for speech, transcription, music, and multimodal models whose work is split across several processing stages. It coordinates those stages and exposes OpenAI-compatible endpoints, so teams can serve model families with different encoders, generators, decoders, and vocoders behind one runtime.

+195stars / 7d
Verdict

Our SGLang-Omni environment occupied 10,224 MB and the suite ended with 83 failures plus 117 errors, despite 1,899 passing tests. That makes v0.1.3 a serious evaluation candidate for a GPU team that needs several speech and omni pipelines, not a safe default to deploy from a generic Python container. Adopt it only after reproducing the relevant model path on your target GPUs, clearing the audited vulnerabilities, and defining a smaller test gate that passes for your chosen families.

We ran it

Lab card: what happened when we ran sglang-omniScreenshot of sglang-omni (sgl-project.github.io/sglang-omni)
Install✓ · 200s293 packages · 10224 MB
Build✓ · 14s
Tests✗ · 306s1899 passed · 83 failed · 51 skipped · 117 errors of 2099 (pytest)
Known vulns9(pip-audit)
Repo1228 files~325,558 lines of source · 32.3 MB · 12 CI workflows · tests dir

Answers from our run

Does sglang-omni build from source?

Dependencies installed in 200 seconds (293 packages), and the build succeeded in 14 seconds. We cloned commit 5b2d885 into a clean Debian container with 3 CPUs and no project-specific setup.

Do sglang-omni's tests pass?

No. The project's own test command finished in 306 seconds and reported 1899 passed, 83 failed, 51 skipped, 117 collection errors (pytest).

Does sglang-omni have known vulnerabilities in its dependencies?

pip-audit flagged 9 known advisories in the dependency tree at the time of our run.

Who should not use sglang-omni?

CPU-only self-hosters: the standard install targets NVIDIA CUDA, while the alternative path requires Intel GPUs and a separately prepared XPU stack.

What are the alternatives to sglang-omni?

vLLM, Text Generation Inference, Coqui TTS. Our SGLang-Omni environment occupied 10,224 MB and the suite ended with 83 failures plus 117 errors, despite 1,899 passing tests.

Setup1/5293 packages used 10,224 MB; GPU and transport stacks are required
Docs5/5Model cookbooks explain CUDA, XPU, routing, and dependency pins
Community4/5951 stars with same-day pushes and heavy issue and pull request work
Maturity2/5v0.1.3 is active, but our broad suite had 200 failed or errored cases

Who it’s for

GPU platform teams serving several TTS, ASR, music, or omni-model families.
Operators who need OpenAI-compatible chat, speech, transcription, batch, or streaming endpoints.
Inference engineers tuning stage placement, tensor transport, scheduling, and worker routing.
Intel XPU teams evaluating the documented Qwen3 subset with its separate dependency path.

Who it’s NOT for

CPU-only self-hosters: the standard install targets NVIDIA CUDA, while the alternative path requires Intel GPUs and a separately prepared XPU stack.
Small machines or casual experiments: our install used 10,224 MB before model weights, and the recommended Docker command allocates 32 GB of shared memory.
Teams requiring a green general test run before evaluation: our commit produced 83 failed tests and 117 collection or setup errors.
Operators who need one stable container tag: the installation guide says only the moving dev tag is published and advises pinning an image digest.
Anyone expecting every model on Intel hardware: the XPU guide limits that path to Qwen3-ASR, Qwen3-TTS, and Qwen3-Omni.

Setup reality

Our sandbox install succeeded in 200 seconds, adding 293 Python packages and using 10,224 MB. The build passed in 14 seconds. Tests failed after 306 seconds: 1,899 passed, 83 failed, 51 skipped, and 117 hit collection or setup errors out of 2,099. Pip-audit found 9 known vulnerabilities.

The normal runtime needs Python 3.10 through 3.12, NVIDIA CUDA, UCX 1.20.x, a matching flash-attn stack, model weights, and substantial GPU memory. The recommended container uses all GPUs, host networking and IPC, privileged mode, and 32 GB of shared memory.

Intel XPU follows a separate pyproject and SGLang source build so CUDA wheels do not replace the XPU stack. Model-specific extras can conflict with pinned Transformers and NumPy versions, and the moving Docker dev tag should be pinned by digest for repeatable deployment.

One runtime coordinates speech, transcription, and omni stages

SGLang-Omni is built for models that do more than one autoregressive pass. A request may cross preprocessing, an encoder, a language-model engine, a talker, a decoder, a vocoder, and an output aggregator. The runtime owns that topology and the movement between stages, while using SGLang for autoregressive scheduling where it fits. OpenAI-compatible routes cover chat, speech generation, batch and streaming speech, uploaded voices, and transcription.

The 1,228-file checkout includes integrations for Qwen3-Omni, several Qwen3 speech families, MOSS, Higgs Audio, Fish Speech, Voxtral, dots.tts, ZONOS2, and other models named in the README. This breadth is useful for a platform team standardizing service operations across audio workloads. It is also the source of much of the dependency and testing burden. Choosing SGLang-Omni means adopting a model integration layer, not merely installing an HTTP wrapper.

NVIDIA is the default, while Intel supports a smaller Qwen3 set

The standard v0.1.3 path targets NVIDIA CUDA. Its manual prerequisites include UCX 1.20.x with CUDA and verbs, flash-attn-4 matched to PyTorch 2.11.0, SGLang 0.5.16, and other pinned CUDA packages. The recommended container requests every GPU, host networking, host IPC, privileged mode, and 32 GB of shared memory. Operators should review each of those privileges rather than copy the command unchanged into a shared host.

Intel has separate instructions because installing the main pyproject would replace a working XPU stack with CUDA packages. The XPU route swaps in another pyproject, uses the PyTorch XPU index, and builds a matching SGLang revision from source. The documented end-to-end set is Qwen3-ASR, Qwen3-TTS, and Qwen3-Omni. Other families named in the main cookbook remain CUDA-only on that path.

What happened when we ran it

Our sandbox installed 293 Python packages in 200 seconds and occupied 10,224 MB before any model weights. The package build then succeeded in 14 seconds. Pip-audit reported 9 known vulnerabilities in the installed environment. The source checkout at commit 5b2d885 was 32.3 MB with about 325,558 lines, 12 CI workflows, a tests directory, and no Dockerfile found by our scan.

The test command failed after 306 seconds. Pytest reported 1,899 passed, 83 failed, 51 skipped, and 117 collection or setup errors out of 2,099. It stopped after 200 failures and errors. The log tail repeatedly says an artifact of type precompile was already registered in the mega-cache artifact factory across scheduling, bootstrap, TTS, ASR, and pipeline test modules.

That repeated message is the observed failure, not a diagnosis. The log does not show whether it comes from the container, collection order, dependency versions, or code at commit 5b2d885. Our measurement setup used an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets. It had no accelerator, so these results do not grade model quality, request latency, or GPU throughput.

A 10,224 MB environment still needs model-specific packages

The base dependency list is unusually broad because it carries servers, model libraries, audio tooling, evaluation packages, and several pinned model integrations together. Qwen3-TTS illustrates the fragility: its own package must be installed without dependencies so its Transformers pin does not replace SGLang-Omni's 5.12.1 stack, and the sox dependency is also constrained to avoid moving NumPy past the documented numba ceiling.

Model weights arrive on top of the 10,224 MB we measured. Reference-audio families need clips and sometimes transcripts, while server access to remote media requires explicit allowed domains. The docs are candid about these differences and give model-specific configs. A deployment image should include only the families it serves, pin every package and container digest, and verify imports before downloading large weights onto production nodes.

The router adds health, admission, and durable update state

A separate router can put multiple workers behind one OpenAI-compatible address. It tracks health and readiness, selects workers by model and capability, rejects overload, and can preserve an interrupted weight-update journal across restarts. Multi-process routing splits control from data-plane processes, though that mode is restricted to x86-64 Linux and has documented differences in admission counting and routing policy support.

This is useful operational machinery, but it creates state that must be mounted persistently and protected with an admin key. The router guide says a damaged journal blocks weight updates with HTTP 409 until an operator verifies worker versions and explicitly resolves the record. Teams need runbooks for draining workers, recovering the control plane, interpreting partial streaming failures, and sizing file descriptors before the router becomes a shared production front door.

v0.1.3 is moving quickly, with a large open queue

GitHub recorded the last push on August 26, 2026, six days after v0.1.3. The repository had 951 stars and 509 open issues and pull requests when fetched. The release included work on Whisper ASR, Qwen3 speech, Ming TTS, streaming, caching, scheduling, stereo output, and Intel documentation. That is active development, and the combined open count should not be mistaken for 509 confirmed bugs.

Rapid model coverage has a cost. The install guide says the only published container tag is dev, which moves with the main branch, and recommends pinning its digest. Our 2,099-case run exposed a wide gap between code paths that pass and modules that do not even collect in the sandbox. A useful adoption trial should pick one model family, one hardware backend, one endpoint, and one known-good image before expanding to the full catalog.

Alternatives

ProjectWhat it isPick it when
vLLM gh↗A widely used serving engine centered on language and multimodal model generation.pick this instead when text generation is the main workload and you do not need SGLang-Omni's speech pipeline stages.
Text Generation InferenceHugging Face's production server for supported text-generation models.pick this instead when you want a narrower text endpoint with an established container workflow.
Coqui TTSA speech toolkit covering pretrained models, training, synthesis, and voice conversion.pick this instead when speech is the whole job and you value a dedicated TTS toolkit over multi-stage serving.

What people are saying

  1. [github-trending] sgl-project/sglang-omni

Sources

  1. SGLang-Omni README
  2. SGLang-Omni v0.1.3 release
  3. CUDA installation guide
  4. Intel XPU installation guide
  5. Omni router guide

More self-hosted reviews

playport · edge-smart-doh · Comma · ProsperoEden · zulu · node_exporter · the whole board →