Audio8_TTS Preview

August 19, 2026 · View on GitHub

Audio8

Audio8_TTS Preview

支持多语言语音生成和零样本音色克隆的 0.6B 参数文本转语音模型。

GitHub Demo Hugging Face ONNX INT4 License

English: README.md

本仓库提供 audio8_tts Preview 版模型、Hugging Face remote code、推理工具和独立的 SFT 训练流程,支持多语言语音生成和零样本音色克隆。

Preview 说明: 当前版本的语言覆盖仍然有限,建议优先在下列 11 种语言中使用。后续版本将 持续补齐多语言和中文方言能力。

支持语言

Preview 模型当前表现较好、推荐使用的语言如下:

Language语言
Cantonese粤语
Chinese中文
Dutch荷兰语
English英语
French法语
German德语
Italian意大利语
Japanese日语
Korean韩语
Polish波兰语
Spanish西班牙语

模型结构

audio8_tts 沿用了 Fish Audio S2 Pro 的 DualAR 架构思路。

组件配置
主模型601,159,424 参数,不包含 codec
Slow AR24 层、896 维、14 个 attention head、2 个 KV head
Fast AR4 层、896 维、14 个 attention head、2 个 KV head
声学 token10 个 codebook,每个 codebook 包含 4,096 个条目
Codec44.1 kHz,每个模型帧 2,048 个采样点,约 21.5 帧/秒
上下文最多 2,048 个打包后的文本/音频位置

Slow AR 每个音频帧生成一个 semantic token;Fast AR 根据 slow hidden state 和当前帧已经生成的 codebook,继续生成该帧的十个 codec codebook。推理时 slow AR 和 fast AR 都使用静态 KV cache。 Checkpoint 内置神经音频 codec,不需要额外下载参考音频编码器或波形解码器。

安装

推荐使用 Python 3.10 或更高版本以及支持 CUDA 的 GPU。

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

请从 Hugging Face 下载模型,并将其放入仓库的 model/ 文件夹中。默认本地模型路径为 model/audio8_tts_0_6B_preview/。所有命令也可以通过 --model 接收 Hugging Face 模型 ID。

推理

为获得更好的合成效果,建议单次输入不超过 150 个字。文本过长可能影响生成质量,请根据 需要拆分为较短的片段。

零样本音色克隆

参考文本应当与参考音频中实际说出的内容一致。

python audio8_tts_infer.py \
  --text "欢迎使用 audio8_tts。" \
  --reference-audio examples/reference.wav \
  --reference-text "参考录音对应的准确文本。" \
  --output outputs/clone.wav

无参考音频生成

python audio8_tts_infer.py \
  --text "这条语音不使用参考音色。" \
  --output outputs/no_reference.wav

批量推理

输入文件每行是一个独立 JSON 对象。相对音频路径相对于 JSONL 文件所在目录解析。

{"id":"sample_001","text":"目标文本","reference_audio":"audio/ref.wav","reference_text":"参考文本"}
{"id":"sample_002","text":"不使用参考音色的文本"}
python audio8_tts_infer.py \
  --input-jsonl data/prompts.jsonl \
  --output-dir outputs/batch \
  --batch-size 2

批量命令会生成 manifest.jsonlfailures.jsonl。除非传入 --overwrite,否则已有 WAV 会 被跳过。采样和 codec codes 保存参数可通过 python audio8_tts_infer.py --help 查看。

CPU ONNX Runtime

onnx_runtime/ 提供独立的 CPU 部署方案:Slow/Fast AR 使用 weight-only INT4,activation 和 KV cache 使用 FP16,codec 使用 FP16。它包含 命令行推理、本地网页与 HTTP 服务、流式 PCM 输出和参考音频音色注册,运行时不依赖 PyTorch 或 Transformers。

在 Apple M2 测试环境中,在线模型 session 约占 1 GiB 内存。注册音色前会先释放 在线 session,再单独加载 codec encoder,从而控制峰值内存。

Audio8-TTS-Preview-0.6B-ONNX-INT4 下载模型,并参阅 ONNX Runtime 中文指南

SGLang Omni 服务部署

sglang_omni/ 中的适配器提供兼容 OpenAI API 的推理服务,包含 SGLang paged attention、动态 batching、Fast AR 固定 KV cache、参考音频编码和 waveform 解码。 它以独立的 audio8_tts 模型插件安装,不会覆盖 SGLang Omni 核心文件。

兼容版本

适配器使用了 SGLang Omni 的内部接口,因此部署时应固定到以下已验证版本,不要直接使用最新 main 分支。

依赖已验证版本
SGLang Omni68a572348837f7b004857b4b07993c20ade4c0170.1.0
SGLang0.5.8
PyTorch2.9.1+cu128
Transformers4.57.1
精度BF16

性能

单流 warm latency 在单张 NVIDIA H20 上测试,使用 BF16、CUDA Graph、greedy decoding, 并生成 128 帧。输出 WAV 时长为 5.85-5.94 秒,不包含冷启动和编译时间。RTF 越低越好。

SGLang Omni 适配器Warm p50 latencyRTF
当前实现0.691 s0.116

配置、实现细节和验证结果请参阅 SGLang Omni 实现与评测报告

安装

在 Audio8 TTS 仓库根目录执行以下命令。示例使用 Python 3.12 和 uv

export SGLANG_OMNI_ROOT=/opt/sglang-omni
export MODEL=/models/Audio8-TTS-Preview-0.6b

git clone https://github.com/sgl-project/sglang-omni.git "${SGLANG_OMNI_ROOT}"
git -C "${SGLANG_OMNI_ROOT}" checkout 68a572348837f7b004857b4b07993c20ade4c017

uv venv .venv-sglang --python 3.12
source .venv-sglang/bin/activate
uv pip install -v -e "${SGLANG_OMNI_ROOT}"

hf download AutoArk-AI/Audio8-TTS-Preview-0.6b --local-dir "${MODEL}"
./sglang_omni/scripts/install_adapter.sh "${SGLANG_OMNI_ROOT}"
python3 ./sglang_omni/scripts/verify_install.py --model-path "${MODEL}"

如果 SGLang Omni 已通过 wheel 或 site-packages 安装,可以定位其包目录后安装适配器:

SGLANG_OMNI_PACKAGE="$(python3 -c 'import importlib.util, pathlib; s=importlib.util.find_spec("sglang_omni"); assert s and s.origin; print(pathlib.Path(s.origin).parent)')"
./sglang_omni/scripts/install_adapter.sh "${SGLANG_OMNI_PACKAGE}"

启动服务

CUDA_VISIBLE_DEVICES=0 \
SGLANG_OMNI_ROOT="${SGLANG_OMNI_ROOT}" \
MODEL="${MODEL}" \
AUDIO8_TTS_ENABLE_TORCH_COMPILE=1 \
HOST=0.0.0.0 \
PORT=8010 \
./sglang_omni/scripts/run_server.sh

默认的 fa3 attention backend 适用于 H20、H100 等 Hopper GPU。RTX 5090 等消费级 Blackwell GPU 的计算能力为 (12, 0),没有对应的 FA3 kernel image,适配器会自动识别 并为 SGLang Slow AR 路径选择 FlashInfer;此时短序列固定 KV cache 的 Fast head 会使用 PyTorch SDPA。无需额外配置。

在任意 GPU 上显式设置该环境变量仍会覆盖自动检测结果:

AUDIO8_TTS_ATTENTION_BACKEND=flashinfer \
CUDA_VISIBLE_DEVICES=0 \
SGLANG_OMNI_ROOT="${SGLANG_OMNI_ROOT}" \
MODEL="${MODEL}" \
./sglang_omni/scripts/run_server.sh

默认配置使用模型名 audio8/tts-0.6b、BF16、单卡、0.2 静态显存比例和最多 32 个并发 请求。主要运行参数包括 MODEL_NAMEAUDIO8_TTS_MEM_FRACTION_STATICAUDIO8_TTS_MAX_RUNNING_REQUESTSAUDIO8_TTS_CHUNKED_PREFILL_SIZEAUDIO8_TTS_DISABLE_CUDA_GRAPH。开启 Torch compile 后,适配器沿用 SGLang 原生的 batch 策略;只有需要明确限制 compile 上限时才设置 AUDIO8_TTS_TORCH_COMPILE_MAX_BSAUDIO8_TTS_ATTENTION_BACKEND 默认为 fa3;在没有 FA3 kernel image 的 GPU(如消费级 Blackwell)上默认为 flashinfer,显式设置可覆盖。如果运行依赖安装在单独的 site-packages 目录中,请设置 SGLANG_OMNI_SITE_PACKAGES

常见问题

  • 如果 sgl_kernel 导入失败,请安装系统中提供 libnuma 的软件包,例如 numactllibnuma1
  • CUDA toolkit 的 bin 目录需要加入 PATH。如果 deep_gemm JIT 编译时找不到 nvcc,还需要将 CUDA_PATH 指向 CUDA toolkit 根目录。
  • Transformers 应保持在支持的 4.x 范围(>=4.57.0,<5)。Transformers 5.x 可能使该 custom-code 模型生成无效的全零 codes。

调用 API

无参考音频生成:

curl -sS --fail-with-body \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "audio8/tts-0.6b",
    "input": "你好,这是 Audio8 TTS 服务测试。",
    "response_format": "wav",
    "max_new_tokens": 256,
    "temperature": 0.8,
    "top_p": 0.95,
    "top_k": 50
  }' \
  http://127.0.0.1:8010/v1/audio/speech \
  -o audio8.wav

使用一个参考音色生成:

curl -sS --fail-with-body \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "audio8/tts-0.6b",
    "input": "这句话使用参考音色生成。",
    "response_format": "wav",
    "temperature": 0.8,
    "top_p": 0.95,
    "top_k": 50,
    "references": [{
      "audio_path": "/data/reference.wav",
      "text": "参考录音对应的准确文本。"
    }]
  }' \
  http://127.0.0.1:8010/v1/audio/speech \
  -o audio8_clone.wav

参考音频路径必须在服务运行环境中可见。当前适配器支持 TP=1 和每个请求一个 reference。 设置 "stream": true 可在生成过程中接收 SSE 音频分块。使用 "response_format": "pcm" 开销最低,每个事件的 audio.data 包含 Base64 编码音频。 流式输出默认每 12 个 codec frames 生成一块,使用 128 帧 decoder context 和 1 帧边界 guard。可通过 AUDIO8_TTS_STREAM_CHUNK_FRAMESAUDIO8_TTS_STREAM_CONTEXT_FRAMESAUDIO8_TTS_STREAM_GUARD_FRAMES 调整。

流式输出是服务端可选项:启动服务时设置 AUDIO8_TTS_STREAM_ENABLED=1 才会启用 SSE 流式;默认关闭,请求会在生成完成后一次性返回完整音频(请求中的 "stream": true 此时会被忽略)。默认非流式以获得更高的吞吐和稳定的显存占用。 response_formatcodes/codec/npy 时始终非流式,直接返回 codec codes。

运行以下 smoke test 可以验证部署:

BASE_URL=http://127.0.0.1:8010 ./sglang_omni/scripts/smoke_test.sh
python3 ./sglang_omni/scripts/stream_smoke_test.py \
  --base-url http://127.0.0.1:8010 \
  --output /tmp/audio8_stream.wav

构建镜像时,请在安装 SGLang Omni 包及其 Python 依赖后追加 sglang_omni/Dockerfile.snippet

SFT 训练

先安装训练依赖:

pip install -r requirements-train.txt

1. 创建原始数据 manifest

目标 audio 必填;reference_audioreference_text 可选,但必须同时出现。

{"id":"utt_001","text":"目标音频文本","audio":"audio/target.wav","reference_audio":"audio/reference.wav","reference_text":"参考音频文本"}
{"id":"utt_002","text":"另一条文本","audio":"audio/another.wav"}

2. 预计算 codec indices

python audio8_tts_prepare.py \
  --input-jsonl data/train.jsonl \
  --output-jsonl prepared_data/train.jsonl \
  --batch-size 4

生成的 manifest 使用相对路径指向经过校验的 [10, T] NumPy 数组。除非传入 --overwrite,否则已有的有效数组会被复用。

3. 开始训练

单卡:

TRAIN_JSONL=prepared_data/train.jsonl \
NPROC_PER_NODE=1 \
bash audio8_tts_sft.sh

单机八卡:

TRAIN_JSONL=prepared_data/train.jsonl \
NPROC_PER_NODE=8 \
BATCH_SIZE=2 \
GRADIENT_ACCUMULATION_STEPS=8 \
bash audio8_tts_sft.sh

多机训练时,在每个节点设置 NNODESNODE_RANKMASTER_ADDRMASTER_PORT。常用超参 和输出路径可通过 audio8_tts_sft.sh 中列出的环境变量覆盖,也可以在命令末尾附加 Transformers 参数。

SFT 同时优化 slow semantic/EOS loss 和 fast codebook teacher-forcing loss。只训练其中一个分支时, 可设置 FREEZE_SLOW_AR=trueFREEZE_FAST_AR=true。导出目录仍可通过标准 AutoModelAutoProcessor 接口配合 trust_remote_code=True 加载。

评测结果

Audio8 TTS Preview 仅有 0.6B 参数,是本次对比中规模最小的模型。尽管参数量仅为其他模型的 一小部分,它在以下基准测试中依然达到业界领先 TTS 模型的第一梯队水平。其中,Audio8 TTS Preview 在 Seed-TTS 上取得了最低的英文 WER 和有竞争力的中文 CER,并在 CV3 多语言评测中 保持了具有竞争力的整体表现。

WER/CER 越低越好,SIM 越高越好。Seed-TTS 的相似度统一显示为百分数。

Seed-TTS

模型参数量EN WER / SIMZH CER / SIMHard ZH CER / SIM
Audio8 TTS Preview0.6B1.506 / 63.20.950 / 73.111.510 / 68.7
Fish S2 Pro4.6B1.607 / 64.61.038 / 73.810.149 / 70.1
Higgs Audio v24.7B1.524 / 66.40.806 / 72.110.622 / 69.3
CosyVoice3-1.5B1.5B2.22 / 72.01.12 / 78.15.83 / 75.8
MOSS-TTS8.5B1.85 / 73.41.20 / 78.8-
VoxCPM22.3B1.84 / 75.30.97 / 79.58.13 / 75.3

Seed-TTS WER 和 CER 对比

CV3 多语言错误率

模型参数量zhenhard-zhhard-enjakodeesfritru
Audio8 TTS Preview0.6B3.2053.12810.5355.9977.2054.2233.4473.6418.7904.790-
Fish S2 Pro4.6B3.6003.49310.5887.3495.1394.1113.6052.9728.6004.2294.702
Higgs Audio v24.7B3.3783.40410.4245.7544.7424.2603.3002.9299.4253.5555.423
CosyVoice3-1.5B1.5B3.914.999.7710.557.575.696.434.4711.810.56.64
VoxCPM22.3B3.655.008.558.485.965.694.773.809.854.255.21

CV3 多语言 WER 和 CER 对比

参数量直接根据已发布的权重张量统计。MOSS-TTS 包含 8,489,841,664 个参数;VoxCPM2 主模型 包含 2,290,004,544 个参数,单独的 AudioVAE 不计入本次参数量对比。

Fish S2 Pro 因官方评测使用自身 normalizer 而重新评测。Higgs Audio v2 因未公布具体数值而自行 评测。其他基线均采用 VoxCPM 官方仓库汇总的各项目官方值。

不同 normalizer 和评测器下的跨项目数值只能作为参考,不能视为严格同口径排名;评测覆盖也不 会将 Preview 的正式支持范围扩展到前述 11 种语言之外。

限制与负责任使用

  • 当前是 Preview 模型,多语言和中文方言覆盖仍然有限。
  • 过长、噪声较大或转写不准确的参考音频可能降低稳定性和音色相似度。
  • 合成语音可能被用于冒充或传播虚假信息。克隆他人声音前应获得许可,并在适当场景明确标注合成内容。
  • 部署前应针对具体业务完成准确性、安全性和合规测试。

许可证与致谢

本仓库代码和模型权重采用 Apache License 2.0,归属说明见 NOTICE

感谢 Fish Audio 团队公开 Fish S2 Pro 使用的 DualAR 架构。

Star 历史

Star History Chart