Qwen3-TTS Native v0.3.0
Qwen3-TTS Native v0.3.0
A performance-focused release: the native engine now performs cross-request
lockstep batched decoding, captures the complete decode frame as a CUDA graph,
and offers an opt-in INT8 weight-only decode mode.
Immutable deployment
ghcr.io/luka-loehr/qwen3-tts-native@sha256:276990b3b693136d6bd93b098682f3860751afb3f5baa99eb5aec2b85c086575
- Source commit:
c193e259cac16219d18d312755e4bbeef82f04f0 - Annotated source tag:
v0.3.0 - OCI platform:
linux/arm64 - Model:
Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign - Model revision:
5ecdb67327fd37bb2e042aab12ff7391903235d3
Deploy only the complete digest reference above.
What changed
- Lockstep batched decode (talker ABI v3). When several requests generate
concurrently, one batched native call performs the talker and 15-step
code-predictor decode for every active session, so each shared weight matrix
is read from memory once per codec frame instead of once per session. KV
caches, sampling state, histories, random states, and delivery leases stay
request-local. - CUDA-graph frames. The complete batched predictor+talker frame is
captured once per session tuple and replayed thereafter, eliminating
per-frame launch overhead for the ~1,600-kernel decode sequence. - Opt-in INT8 decode (
QWEN3_TTS_INT8_DECODE=1): decode GEMM weights are
quantized to per-output-channel symmetric INT8 at engine load, directly from
the pinned BF16 artifact; the checkpoint identity and artifact contract are
unchanged, and prefill stays BF16. The default engine remains BF16. - First-frame priority: a session's first frame bypasses the lockstep
rendezvous, so first-audio latency does not pay a batching penalty.
Measured performance (idle DGX Spark, all 24 workload languages natural-EOS)
| Metric | v0.2.0 engine | v0.3.0 BF16 | v0.3.0 INT8 |
|---|---|---|---|
| Single-stream RTF | 0.76 | 0.72 | 0.47 |
| Single-stream TTFA p50 | 81 ms | 75 ms | 60 ms |
| B3 aggregate RTF / per-request | 0.59 / 1.65 | 0.41 / 1.10 | 0.33 / 0.90 |
| B6 aggregate RTF / per-request | 0.59 / 3.22 | 0.36 / 1.91 | 0.31 / 1.69 |
These figures come from short engineering runs with the repository's external
HTTP client on an otherwise idle Spark. They are engine-comparison numbers,
not a replacement for the full schema-v1.2 controlled evidence bundle; the
published controlled benchmark and research paper remain those of the
v0.1.0 release.
INT8 mode changes decode numerics (per-channel quantization error is on the
order of 4e-3 relative); all transport, EOS, and language gates pass in both
modes. Listening review of INT8 output is the deployer's responsibility.
Qualification performed for this release
cargo fmt,clippy -D warnings, and tests for all six crates at the
release commit.- In-build model identity gates (manifest and weight SHA-256, full native
artifact validation) and release-metadata license/SBOM validation. - Container qualification on DGX Spark: hardened run profile (read-only root,
cap-drop ALL, no-new-privileges), readiness within 20 s, all 24 workload
languages with natural EOS in BF16 and INT8 modes, and the B1/B3/B6
benchmark table above. - Not performed for this release: the full 12-run schema-v1.2 controlled
comparison, SoX audio validation, and human listening review.