
MOSS-TTS-Nano 是来自 MOSI.AI 和 OpenMOSS 团队 的开源多语言微型语音生成模型。仅包含 0.1B 参数,专为实时语音生成设计,可直接在 CPU 上运行(无需 GPU),并保持部署栈足够简单,适用于本地演示、网络服务和轻量级产品集成。

MOSS-TTS-Nano 专注于 TTS 部署中最重要的部分:小体积、低延迟、足够好的实时产品质量 和 简单的本地配置。它使用纯自回归 Audio Tokenizer + LLM 管道,并保持推理工作流对终端用户和网络演示用户都友好。
python infer.py、python app.py 和打包 CLI
MOSS-TTS-Nano 架构图
MOSS-TTS-Nano 目前支持 20 种语言:
| 语言 | 代码 | 旗帜 | 语言 | 代码 | 旗帜 | 语言 | 代码 | 旗帜 |
|---|---|---|---|---|---|---|---|---|
| 中文 | zh | 🇨🇳 | 英文 | en | 🇺🇸 | 德语 | de | 🇩🇪 |
| 西班牙语 | es | 🇪🇸 | 法语 | fr | 🇫🇷 | 日语 | ja | 🇯🇵 |
| 意大利语 | it | 🇮🇹 | 匈牙利语 | hu | 🇭🇺 | 韩语 | ko | 🇰🇷 |
| 俄语 | ru | 🇷🇺 | 波斯语 (Farsi) | fa | 🇮🇷 | 阿拉伯语 | ar | 🇸🇦 |
| 波兰语 | pl | 🇵🇱 | 葡萄牙语 | pt | 🇵🇹 | 捷克语 | cs | 🇨🇿 |
| 丹麦语 | da | 🇩🇰 | 瑞典语 | sv | 🇸🇪 | 希腊语 | el | 🇬🇷 |
| 土耳其语 | tr | 🇹🇷 |
我们建议先创建一个干净的 Python 环境,然后以可编辑模式安装项目,使得 moss-tts-nano 命令在本地可用。下面的示例故意保持参数最少,依赖仓库默认设置。默认情况下,代码加载 OpenMOSS-Team/MOSS-TTS-Nano 和 OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano。
conda create -n moss-tts-nano python=3.12 -y
conda activate moss-tts-nano
git clone https://github.com/OpenMOSS/MOSS-TTS-Nano.git
cd MOSS-TTS-Nano
pip install -r requirements.txt
pip install -e .
如果 WeTextProcessing 或 pynini 无法从 requirements.txt 安装,请先在同一环境中安装 pynini,再安装 WeTextProcessing,然后从 requirements.txt 中移除 WeTextProcessing,最后重新执行 pip install -r requirements.txt。
推荐优先使用 Conda:
conda install -c conda-forge pynini=2.1.6.post1 -y
pip install git+https://github.com/WhizZest/WeTextProcessing.git
pip install -r requirements.txt
如果不使用 Conda,请先准备与当前 Python 版本和平台匹配的 pynini wheel,再安装 WeTextProcessing。可参考 Issue #6 中给出的安装示例。
infer.py 进行语音克隆本仓库保留了直接 Python 入口点用于本地推理。下面的示例使用 语音克隆模式,这是 MOSS-TTS-Nano 的主要推荐工作流。
python infer.py \
--prompt-audio-path assets/audio/zh_1.wav \
--text "欢迎关注模思智能、上海创智学院与复旦大学自然语言处理实验室。"
默认情况下,这会将音频写入 generated_audio/infer_output.wav。
app.py 启动本地 Web 演示您可以启动本地 FastAPI 演示进行基于浏览器的测试:
python app.py
然后在浏览器中打开 http://127.0.0.1:18083。
我们现在十分推荐优先尝试 ONNX CPU 版本,尤其适合轻量本地部署和纯 CPU 推理场景。
这一版本在保留 MOSS-TTS-Nano 核心体验的同时,更适合直接部署:
Realtime Streaming Decode。对应的 ONNX 入口包括 infer_onnx.py、app_onnx.py,以及带 --backend onnx 的打包 CLI。
默认情况下,基于 ONNX Runtime CPU 运行,如果要切换到 GPU,需要安装 onnxruntime-gpu,然后可以通过 --execution-provider cuda 显式切到 CUDA。
如果要准备 CUDA ONNX Runtime 环境,请把 CPU 版 ONNX Runtime wheel 替换成 GPU 版:
pip uninstall -y onnxruntime
pip install "onnxruntime-gpu>=1.20.0"
如果不传 --model-dir,程序会默认检查 ./models。当该目录下缺少模型时,会在首次运行时自动从下面两个 Hugging Face 仓库下载:
默认下载后的目录结构为:
models/MOSS-TTS-Nano-100M-ONNXmodels/MOSS-Audio-Tokenizer-Nano-ONNX命令行示例:
python infer_onnx.py \
--prompt-audio-path assets/audio/zh_1.wav \
--text "欢迎使用 ONNX Runtime CPU 版本。"
如果你已经有本地导出的 ONNX 目录,也可以显式传入:
python infer_onnx.py \
--model-dir /path/to/models \
--prompt-audio-path assets/audio/zh_1.wav \
--text "欢迎使用 ONNX Runtime CPU 版本。"
如果要使用 CUDA 推理:
python infer_onnx.py \
--execution-provider cuda \
--prompt-audio-path assets/audio/zh_1.wav \
--text "欢迎使用 ONNX Runtime CUDA 版本。"
CUDA 推理需要安装 onnxruntime-gpu。
本地 Web Demo:
python app_onnx.py
如果要用 CUDA 启动 ONNX Web Demo:
python app_onnx.py \
--execution-provider cuda
然后在浏览器中打开 http://127.0.0.1:18083。
首次启动如果本地没有 ONNX 权重,会先自动下载。
Android ONNX Runtime smoke 示例位于 examples/android_onnx_runtime。
该示例会在 Android 设备端加载导出的 MOSS-TTS-Nano ONNX 图和 MOSS-Audio-Tokenizer-Nano ONNX 解码器,合成短的预分词 demo prompt,并写出 WAV 文件。示例刻意保持最小化,并将模型文件保留在 APK 外部,便于本地测试。
如果重新训练了 MOSS-TTS-Nano,那么需要重导 TTS 侧 ONNX 权重。onnx/ 目录下的导出脚本接收本地 Hugging Face 格式的 MOSS-TTS-Nano checkpoint,并输出一套仅包含 TTS 侧文件的 ONNX 模型目录。
示例:
python onnx/export_hf_to_tts_onnx.py \
--checkpoint-path /path/to/MOSS-TTS-Nano \
--output-dir /path/to/MOSS-TTS-Nano-100M-ONNX
输出目录包含:
moss_tts_prefill.onnxmoss_tts_decode_step.onnxmoss_tts_local_decoder.onnxmoss_tts_local_cached_step.onnxmoss_tts_local_fixed_sampled_frame.onnxmoss_tts_global_shared.datamoss_tts_local_shared.datatts_browser_onnx_meta.jsontokenizer.model这个脚本面向 ONNX 部署链路。只要 MOSS-Audio-Tokenizer-Nano 没变,原先基于它生成的 prompt audio codes 不需要重新生成。
moss-tts-nano generate安装后 pip install -e .,您可以直接调用打包的 CLI:
moss-tts-nano generate \
--prompt-speech assets/audio/zh_1.wav \
--text "欢迎关注模思智能、上海创智学院与复旦大学自然语言处理实验室。"
如果要切到 ONNX CPU 后端,只需加上 --backend onnx:
moss-tts-nano generate \
--backend onnx \
--prompt-speech assets/audio/zh_1.wav \
--text "欢迎关注模思智能、上海创智学院与复旦大学自然语言处理实验室。"
ONNX 后端默认使用 CPU。如果要显式切到 CUDA:
moss-tts-nano generate \
--backend onnx \
--execution-provider cuda \
--prompt-speech assets/audio/zh_1.wav \
--text "欢迎关注模思智能、上海创智学院与复旦大学自然语言处理实验室。"
有用的提示:
moss-tts-nano generate 默认写入 generated_audio/moss_tts_nano_output.wav。--prompt-speech 是用于语音克隆的参考音频路径的友好别名。--text-file 用于长文本合成。onnxruntime-gpu;不传 --execution-provider cuda 时,ONNX 推理仍然默认只使用 CPU。moss-tts-nano serve您也可以通过打包的 CLI 启动网络演示:
moss-tts-nano serve
如果要启动 ONNX Web Demo:
moss-tts-nano serve \
--backend onnx
如果要用 CUDA 启动 ONNX Web Demo:
moss-tts-nano serve \
--backend onnx \
--execution-provider cuda
此命令会转发到对应的 Web App,将模型保持在内存中加载,并为本地浏览器演示和 HTTP 生成端点提供服务。
如需以分页 KV 缓存、流式推理以及 OpenAI 兼容 /v1/audio/speech 接口部署服务,请参考 vLLM-Omni MOSS-TTS-Nano README。
微调教程已经提供。
具体见 ./finetuning/README_zh.md。
MOSS-Audio-Tokenizer 是整个 MOSS-TTS 系列的统一离散音频接口。它基于 Cat(Causal Audio Tokenizer with Transformer)架构构建,这是一个由因果 Transformer 块完全组成的无 CNN 音频分词器。它作为 MOSS-TTS、MOSS-TTS-Nano、MOSS-TTSD、MOSS-VoiceGenerator、MOSS-SoundEffect 和 MOSS-TTS-Realtime 的共享音频 tokenizer,为整个产品系列提供一致的音频表示。
为了进一步提高感知质量同时降低推理成本,我们训练了 MOSS-Audio-Tokenizer-Nano,这是一个轻量级分词器,包含约 20M 参数,专为高保真音频压缩设计。它支持 48 kHz 输入输出以及 立体声音频,有助于减少压缩损失并提高听觉质量。它可以将 48 kHz 立体声音频压缩成 12.5 Hz 的 token 流,使用 16 个码本的 RVQ,在 0.125 kbps 到 2 kbps 的可变码率范围内实现高保真重建。
要了解更多关于设置、高级用法和评估指标的信息,请访问 MOSS-Audio-Tokenizer 仓库。
MOSS-Audio-Tokenizer-Nano 架构
| 模型 | Hugging Face | ModelScope |
|---|---|---|
| MOSS-Audio-Tokenizer-Nano |
下表将 MOSS-Audio-Tokenizer-Nano 与参数量 不超过 120M 的开源音频 tokenizer 进行对比,评估其在语音、音频和音乐数据上的重建质量。可以看到,MOSS-Audio-Tokenizer-Nano 在模型规模接近最小的同时,取得了最好的整体重建质量。
ch=1 表示单声道音频,ch=2 表示立体声音频。Nvq 表示量化器数量。
开源音频 tokenizer 在语音、音频和音乐数据上的重建质量对比。
下图将 MOSS-Audio-Tokenizer-Nano 与参数量 不超过 120M 的开源音频 tokenizer 和 codec 在 LibriSpeech 数据集上进行对比。评测指标包括 SIM、STOI、PESQ-NB 和 PESQ-WB,数值越高表示重建质量越好。 对于同一个模型,我们通过调整推理时使用的 RVQ 码本数量来控制码率。
<img src="https://github.com/OpenMOSS/MOSS-TTS-Nano/raw/main/assets/images/evaluation_fig_moss_audio_tokenizer.png" width="100%">
不同码率下的 LibriSpeech 重建质量对比。
<img src="https://github.com/OpenMOSS/MOSS-TTS-Nano/raw/main/assets/images/moss_tts_family.jpeg" width="85%" /
$ claude mcp add MOSS-TTS-Nano \
-- python -m otcore.mcp_server <graph>