OmniVoice 是一款业界领先的大规模多语言零样本文本转语音(TTS)模型,支持超过 600 种语言。基于创新的扩散语言模型架构,能够以卓越的推理速度生成高质量语音,同时支持语音克隆与语音设计。
本仓库:提供 OmniVoice 在华为昇腾 NPU 上的适配版本,已通过功能验证与精度评测,确保 NPU 推理结果与 CPU 基线高度一致。
OmniVoice 基于 Qwen3-0.6B 骨干网络构建,模型参数量约 0.8B,采用非自回归扩散式解码,支持以下核心能力:
本仓库适配内容:
transformers 版本依赖冲突| 组件 | 版本/型号 |
|---|---|
| NPU | 华为昇腾 910 |
| CANN | 8.5.1 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| transformers | 5.8.1 |
| Python | >=3.10 |
| OS | Linux aarch64 |
注:NPU 推理使用
torch.float16,CPU 基线使用torch.float32。
本次适配共修改 5 个文件,核心修改点如下:
| 文件 | 修改内容 |
|---|---|
omnivoice/utils/common.py | 新增统一设备检测函数 get_best_device(),优先级:NPU > CUDA > MPS > CPU |
omnivoice/cli/infer.py | 移除本地 get_best_device(),改为从 common.py 导入 |
omnivoice/cli/demo.py | 同上,复用统一的设备检测逻辑 |
omnivoice/cli/infer_batch.py | 新增 get_best_device_and_count() 支持多 NPU 卡;process_init() 增加 npu:{device_id} 的 worker 设备分配 |
omnivoice/models/omnivoice.py | ASR 模型 dtype 判断由仅支持 cuda 扩展为支持 cuda 和 npu,使 NPU 也能使用 float16 加载 Whisper ASR |
pyproject.toml | 修复 transformers>=5.3.0 为 transformers>=4.45.0,<5.0,避免依赖无法解析 |
cd OmniVoice
pip install -e .如
transformers版本低于 5.3.0,需手动升级:pip install --upgrade transformers
HiggsAudioV2TokenizerModel需要 transformers >= 5.3.0。
# 方式一:从 HuggingFace 镜像下载
export HF_ENDPOINT="https://hf-mirror.com"
python -c "from transformers import AutoModel; AutoModel.from_pretrained('k2-fsa/OmniVoice', cache_dir='/opt/atomgit/weights')"
# 方式二:从 ModelScope 下载
python -c "from modelscope import snapshot_download; snapshot_download('k2-fsa/OmniVoice', cache_dir='/opt/atomgit/weights')"模型包含主模型(~0.8B,FP16 约 1.6GB)与 audio_tokenizer(HiggsAudioV2TokenizerModel)。
# 自动音色
omnivoice-infer \
--model /opt/atomgit/weights/OmniVoice \
--text "Hello, this is a test on Ascend NPU." \
--output test_auto.wav
# 语音设计
omnivoice-infer \
--model /opt/atomgit/weights/OmniVoice \
--text "Hello, this is voice design test." \
--instruct "female, low pitch" \
--output test_design.wav
# 语音克隆
omnivoice-infer \
--model /opt/atomgit/weights/OmniVoice \
--text "Hello, this is voice clone test." \
--ref_audio ref.wav \
--ref_text "This is a reference audio for testing." \
--output test_clone.wavomnivoice-infer-batch \
--model /opt/atomgit/weights/OmniVoice \
--test_list test.jsonl \
--res_dir results/test.jsonl 每行一个 JSON 对象:
{"id": "sample_001", "text": "Hello world", "ref_audio": "/path/to/ref.wav", "ref_text": "Reference transcript", "instruct": "female, british accent"}omnivoice-demo --ip 0.0.0.0 --port 8001以下是在昇腾 NPU 上执行三种推理模式的实测日志:
$ python test_npu_quick.py
NPU available: True
NPU count: 2
Loading model on NPU with torch.float16 ...
Model loaded in 45.23s on npu:0
--- Test 1: Auto Voice ---
Generated audio shape: torch.Size([1, 192000]), RTF: 0.0234--- Test 2: Voice Design ---
Generated audio shape: torch.Size([1, 172800]), RTF: 0.0241--- Test 3: Voice Clone ---
Generated audio shape: torch.Size([1, 196800]), RTF: 0.0250所有测试均成功生成有效 WAV 文件,推理稳定无报错。
由于 OmniVoice 采用扩散式非自回归解码,最终音频波形对采样阶段的离散选择极为敏感,微小的 logits 差异可能在采样后被放大。因此,直接对比解码后波形的数值差异不能反映真实精度。
正确的精度评测应基于 Forward Logits:在相同输入、相同随机种子下,分别计算 CPU(float32)与 NPU(float16)前向传播输出的 logits 差异。该指标直接反映模型在数值计算层面的等价性,不受采样随机性影响。
| 指标 | CPU (float32) | NPU (float16) | 差异 |
|---|---|---|---|
| Forward Logits Rel Error | — | — | 0.0239% |
| Forward Logits MSE | — | — | 4.97e-04 |
| Forward Logits Max Diff | — | — | 2.56e-02 |
结论:NPU 前向传播 logits 与 CPU 基线的相对误差为 0.0239%,远低于 1% 的精度要求,表明昇腾 NPU 的数值计算结果与 CPU 基线高度一致。
注:若使用贪婪解码(greedy decoding)且输入完全一致,CPU 与 NPU 生成的 audio tokens 可做到逐位相同;引入温度采样后,由于 logits 的微小差异可能导致不同采样路径,属预期行为。
OmniVoice 官方提供的基准数据如下(基于 NVIDIA GPU):
| 评测集 | 指标 | 官方结果 |
|---|---|---|
| Seed-TTS 中文 | WER | 0.84% |
| Seed-TTS 英文 | WER | 1.60% |
| FLEURS-102 | 平均 CER | 4.00% |
暂无公开 GPU vs NPU 的直接精度对比数据。本仓库的 NPU 精度验证采用 CPU(float32)作为数值基线,通过 Forward Logits 对比证明 NPU(float16)的相对误差 < 0.03%,满足生产级一致性要求。如后续有 GPU-NPU 同条件对比需求,可在相同 dtype(如均为 float16)下复用 verify_precision.py 进行评测。
在昇腾 910 NPU 上的推理性能实测数据(batch_size=1):
| 模式 | 采样率 | 音频长度 | 推理耗时 | RTF |
|---|---|---|---|---|
| Auto Voice | 24 kHz | 8.0 s | 0.187 s | 0.0234 |
| Voice Design | 24 kHz | 7.2 s | 0.174 s | 0.0241 |
| Voice Clone | 24 kHz | 8.2 s | 0.205 s | 0.0250 |
RTF(Real-Time Factor)= 推理耗时 / 音频长度,值越小表示推理越快。RTF < 0.025 意味着推理速度约为实时速度的 40 倍。
HiggsAudioV2TokenizerModel 需要 transformers >= 5.3.0。若安装后出现 HiggsAudioV2TokenizerModel 未找到错误,请执行 pip install --upgrade transformers。torch.npu.is_available() 自动检测 NPU。若环境中存在 NPU 但未检测到,请检查 torch_npu 是否正确安装及 CANN 环境变量是否配置(如 source /usr/local/Ascend/ascend-toolkit/set_env.sh)。torch.float16。若对特定音频质量有更高要求,可尝试 torch.bfloat16 或 torch.float32(float32 会显著增加显存占用)。omnivoice-infer-batch 支持多 NPU 卡并行。请确保 test.jsonl 中同批次样本模式一致(克隆/设计/自动不能混批),否则会导致 create_voice_clone_prompt() 报错。@article{zhu2026omnivoice,
title={OmniVoice: Towards Omnilingual Zero-Shot Text-to-Speech with Diffusion Language Models},
author={Zhu, Han and Ye, Lingxuan and Kang, Wei and Yao, Zengwei and Guo, Liyong and Kuang, Fangjun and Han, Zhifeng and Zhuang, Weijiang and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2604.00688},
year={2026}
}用户严禁将本模型用于未经授权的语音克隆、语音模仿、欺诈、诈骗或任何其他非法或不道德活动。所有用户应确保完全遵守适用的当地法律法规和道德标准。开发者对模型的任何滥用不承担责任,并倡导负责任的 AI 开发和使用。