ajh-code's picture
Add files using upload-large-folder tool
0584718 verified
|
Raw
History Blame Contribute Delete
12.5 kB
---
license: mit
language:
- en
library_name: chatterbox-flash
pipeline_tag: text-to-speech
base_model: ResembleAI/chatterbox-flash
base_model_relation: quantized
inference: false
tags:
- text-to-speech
- zero-shot-tts
- voice-cloning
- chatterbox-flash
- nvfp4
- w4a16
- quantized
- nvidia
- blackwell
- flashinfer
- safetensors
---
# Chatterbox-Flash T3 W4A16 NVFP4
This is an unofficial community NVFP4 derivative of
[ResembleAI/chatterbox-flash](https://huggingface.co/ResembleAI/chatterbox-flash).
It is not affiliated with or endorsed by Resemble AI or NVIDIA.
The package replaces all 120 Chatterbox-Flash T3 transformer projection
operators with source-free NVFP4 weights. Weights use native FP4 (E2M1) with
E4M3 block scales; activations remain BF16, so the precise description is
**T3 all-projection W4A16 NVFP4**. Embeddings, norms, conditioning layers,
speech head, S3Gen, and the voice encoder remain at their upstream precision.
This is not a whole-pipeline 4-bit model.
The canonical artifact does not contain the original BF16 T3 projection
weights. Its custom loader constructs those parameters on the meta device,
prepares the canonical FP4 codes/scales directly for FlashInfer, and never
calls `nvfp4_quantize` at load time. Engine rebuilds reuse the model-attached
projection provider.
## What this release actually improves
The primary benefit is **much lower storage and VRAM with a modest speed gain**,
not a claim that NVFP4 makes the complete TTS pipeline dramatically faster.
S3Gen and several small T3 operations remain high precision, and some
irregular prefix projections are slower in FP4 than BF16.
On the tested RTX 5060 Ti, the recommended D16 quality profile delivered:
- **83.97% smaller T3 checkpoint**: 341 MB instead of 2.13 GB.
- **55.88% less complete model-asset storage/download** after adding the
unchanged S3Gen, voice encoder, and tokenizer: 1.412 GB instead of 3.200 GB.
- **33.2% lower allocated VRAM immediately after full pipeline load**:
1.444 GB instead of 2.162 GB.
- **18.82% lower maximum allocated VRAM in the natural eight-text suite**:
5.215 GB instead of 6.424 GB. Fixed-work peak allocation was 34.09% lower.
- **1.0811x aggregate-RTF speedup** (7.50% lower duration-normalized latency)
and **1.1131x valid-token T3 throughput**. The fixed-work T3 speedup was
1.1260x; fixed whole-pipeline speedup was 1.0631x.
The D24 fast profile reaches 25.13% lower RTF than the D16 BF16 baseline, but
that is a combined block-size-plus-NVFP4 result. Against matched D24 BF16,
NVFP4 alone provides only a 1.0309x RTF speedup. This distinction matters when
deciding whether the model is useful for your deployment.
## How quality was evaluated
A Gemma Audio evaluator listened to eight English test utterances generated
from one zero-shot reference voice. It transcribed each output, scored
intelligibility, pronunciation, voice similarity, naturalness, and artifacts,
and flagged hard failures. BF16 and NVFP4 were also compared blindly in both
A/B orders to expose position bias.
- D16 BF16/NVFP4 means were **94.125/94.625**. Both produced exact transcripts
for 8/8 texts with zero hard failures. After reversing A/B order, the
per-case result resolved to seven ties and one consistent BF16 preference.
- D24 BF16/NVFP4 means were **95.0/93.125**. Both produced exact transcripts
for 8/8 texts with zero hard failures. Order control resolved to six ties,
one BF16 preference, and one NVFP4 preference.
This is encouraging automated evidence, not human MOS, a standard Seed-TTS
benchmark, proof of perceptual identity, or a multi-speaker evaluation. The
audio was intentionally not published because consent for public
redistribution of the reference voice was not established.
## Hardware and software
The accepted release configuration is intentionally narrow:
- Linux x86-64 and Python 3.12
- NVIDIA RTX 50-series SM120/SM121 (tested on RTX 5060 Ti)
- PyTorch 2.7.1+cu128 and CUDA 12.8 wheels
- FlashInfer 0.6.14 with `nvidia-cutlass-dsl` 4.5.2
- BF16 activations, FlashInfer CUDA graphs, user batch size 1
There is no CPU, MLX, Torch-SDPA, older-GPU, or non-NVFP4 fallback because the
BF16 projection sources are deliberately absent. RTX 5080 and SM121 are
allowed by the loader but have not yet been benchmarked. This is custom code,
not a Transformers `AutoModel` checkpoint or a standard Hub quantization
format, so the hosted inference widget is disabled.
`nvidia-cutlass-dsl` is installed under NVIDIA's separate software license.
Review [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) before installation.
## Install
Clone the model repository, then use the included lock. Plain `pip install`
does not honor the upstream Torch override or the official cu128 wheel source.
```bash
git clone https://huggingface.co/ajh-code/chatterbox-flash-t3-w4a16-nvfp4
cd chatterbox-flash-t3-w4a16-nvfp4
uv sync \
--project runtime/chatterbox-flash \
--locked \
--extra flashinfer \
--python 3.12
```
The lock resolves the exact validated critical stack. A dry verification is:
```bash
runtime/chatterbox-flash/.venv/bin/python - <<'PY'
import importlib.metadata as md
import flashinfer
import torch
assert torch.__version__ == "2.7.1+cu128"
assert torch.version.cuda == "12.8"
assert md.version("flashinfer-python") == "0.6.14"
assert md.version("nvidia-cutlass-dsl") == "4.5.2"
assert hasattr(flashinfer, "prepare_bf16_fp4_weights")
assert hasattr(flashinfer, "mm_bf16_fp4")
assert torch.cuda.get_device_capability() in {(12, 0), (12, 1)}
print(torch.cuda.get_device_name(), "is ready")
PY
```
## Zero-shot voice cloning
Use only reference audio that you have permission to clone.
```bash
runtime/chatterbox-flash/.venv/bin/python example.py \
--prompt-wav your-reference.wav \
--text "This is Chatterbox Flash running native NVFP4 projections." \
--output output.wav \
--block-size 16
```
The example downloads only the unchanged S3Gen, voice-encoder, and tokenizer
assets from the immutable base revision
`4385507288b8197e6dab8b4e6b1603328d549d9d`. It verifies their sizes and
SHA-256 fingerprints from `nvfp4_config.json`. It never downloads the original
2.13 GB `t3_flash.safetensors`.
The first decode for a new GPU/exact block shape invokes FlashInfer setup and
tuning. On the RTX 5060 Ti, a fresh process with the selected D16 tactic already
cached took 10.57 seconds for the first 1.28-second utterance versus 0.154
seconds for the same-process warm repeat. A completely missing tactic has taken
roughly 25 seconds in development. Autotune results are GPU-specific, so this
repository does not ship a universal cache.
## Profiles
`D=16` is the quality-default profile. `D=24` is an explicitly optional fast
profile: it is materially faster overall but had a slightly lower automated
mean score and less consistent pairwise preference. `D=32` was tested and
rejected after token-cap failures and an OOM in the natural suite; its cached
prior remains serialized for research provenance, but the release loader
refuses it.
| Profile | Intended use | NVFP4 aggregate RTF | NVFP4 T3 tok/s | Automated mean |
|---|---|---:|---:|---:|
| D16 | Quality default | 0.08725 | 365.4 | 94.625 |
| D24 | Optional fast | 0.07062 | 483.3 | 93.125 |
## RTX 5060 Ti results
The natural test is an eight-text, one-reference suite. Pipeline and T3 times
are sums of per-case medians; aggregate RTF divides summed pipeline time by
summed generated-audio duration. Memory is the maximum per-case median
PyTorch CUDA peak, not total `nvidia-smi` process memory.
| Profile | Comparison | RTF speedup | T3 throughput | Peak allocated reduction |
|---|---|---:|---:|---:|
| D16 | W4A16 vs matched BF16 | 1.0811x | 1.1131x | 18.82% / 1.209 GB |
| D24 | W4A16 vs matched BF16 | 1.0309x | 1.0450x | 21.57% / 1.410 GB |
A fixed capped-work control removes sampled-length attribution. D16 T3 is
`1.1260x` faster and D24 T3 is `1.0656x` faster; each reduces fixed-work peak
allocated memory by about 34%. D16 fixed whole-pipeline speedup is `1.0631x`.
Do not quote the larger raw natural-suite wall-time ratios as pure NVFP4
speedups: the BF16 and W4A16 models sampled different token counts. The
D24-versus-D16 speed difference is primarily the larger block size, not FP4
alone. Complete numeric records and caveats are in
[benchmark_results.json](benchmark_results.json).
Automated quality was close but is not proof of perceptual identity:
- D16 BF16/NVFP4 means were 94.125/94.625; both transcribed 8/8 exactly with
zero hard failures. Order-controlled pairwise scoring resolved to seven ties
and one BF16 win.
- D24 BF16/NVFP4 means were 95.0/93.125; both transcribed 8/8 exactly with zero
hard failures. Order control resolved to six ties, one BF16 win, and one
NVFP4 win.
This was not human MOS, a standard Seed-TTS evaluation, or a multi-speaker
release study.
## Artifact and load behavior
- `t3_nvfp4.safetensors`: 341,439,040 bytes, 447 tensors, SHA-256
`c5ea2d1d1441f657b383d8dad54bbae3778447d675822fb15918cb99b3587f1e`
- 360 canonical NVFP4 tensors cover 30 layers × 4 fused projection kinds ×
FP4 codes/E4M3 scales/FP32 alpha.
- 82 non-projection T3 tensors remain BF16; three fixed priors and two rotary
buffers support source-free construction.
- Original T3 checkpoint: 2,129,657,904 bytes. The derivative T3 file is
83.97% smaller.
- Derivative T3 plus the three unchanged downloaded base assets totals
1,412,035,402 bytes versus 3,200,254,266 bytes upstream: 55.88% less model
asset storage/download, excluding small runtime files and cache.
In the final source-free release smoke, fresh-process pipeline load with base
hash verification and warm JIT state took 2.675 seconds and settled at 1.444 GB
PyTorch allocated / 1.478 GB reserved before the first generation. It prepared
120 projections into 283,116,000 bytes, without materializing BF16 projection
weights or calling the quantizer. The short generation peaked at 2.548 GB
allocated. These are one-machine diagnostics; first-generation setup is
reported separately above.
The canonical D16 loader regression reproduced the accepted stripped runtime
bit-for-bit: token history, waveform tensor SHA-256, and saved WAV SHA-256 all
matched. A longer request also rebuilt the engine successfully while retaining
the same source-free projection provider.
## Limitations and responsible use
- Only RTX 5060 Ti / SM120, batch one, and the documented settings received the
complete technical and small automated-audio gate.
- D16 is the only quality-default profile. D24 is optional; D32 is rejected.
- S3Gen and voice-encoder execution are not quantized by this artifact.
- Prefix projections can remain slower than BF16 at irregular shapes; the
decode block projections provide the measured NVFP4 gain.
- Streaming, multi-request throughput, RTX 5080 tuning, and human multi-voice
listening remain future work.
- Generated length can change after quantization, affecting latency, memory,
pauses, and termination even when transcripts are correct.
- Voice cloning can enable impersonation or deception. Obtain the speaker's
consent, disclose synthetic audio where appropriate, and comply with local
law and platform policies.
No evaluation audio is included because the reference clip's redistribution
and voice-consent status was not established for a public model repository.
## Attribution and citation
Chatterbox-Flash model weights and vendored runtime code are Copyright (c) 2026
Resemble AI and licensed under MIT. This runtime is based on source commit
`74e05baa8ce574bf2cc571702391a21f1b0d48c5`; the derivative modifies the
FlashInfer projection path and adds the canonical NVFP4 loader. See
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
```bibtex
@misc{seo2026chatterboxflashpriorcalibratedblockdiffusion,
title={Chatterbox-Flash: Prior-Calibrated Block Diffusion for Streaming Zero-Shot TTS},
author={Deokjin Seo and Gangin Park and Kihyun Nam},
year={2026},
eprint={2605.30748},
archivePrefix={arXiv},
primaryClass={cs.SD},
url={https://arxiv.org/abs/2605.30748}
}
```
## Repository files
- `t3_nvfp4.safetensors`: canonical source-free checkpoint
- `nvfp4_config.json`: complete schema, fingerprints, revisions, and profiles
- `runtime/chatterbox-flash/`: pinned installable derivative runtime and lock
- `example.py`: tested local-bundle zero-shot generation entry point
- `benchmark_results.json`: machine-readable release measurements
- `SHA256SUMS`: release integrity manifest