本文档记录 Voxtral-4B-TTS-2603 在华为昇腾 NPU(Ascend910)上的完整适配与验证结果。Voxtral-4B-TTS-2603 是 MistralAI 发布的前沿开源文本转语音(TTS)模型,支持 9 种语言、20 种预设音色。本方案实现了从模型加载、文本分词、LM 前向推理、声学 Transformer 到音频解码的全流程 NPU 推理。
| 属性 | 值 |
|---|---|
| 模型名称 | Voxtral-4B-TTS-2603 |
| 参数量 | 4.00B |
| 架构 | Mistral-26L + AcousticTransformer-3L + EnCodec Decoder |
| 隐藏维度 | 3072 |
| 注意力头 | 32Q / 8KV (GQA) |
| 采样率 | 24000 Hz |
| 支持语言 | 英语、法语、西班牙语、德语、意大利语、葡萄牙语、荷兰语、阿拉伯语、印地语 |
| 精度 | BF16 |
| 框架 | PyTorch + torch_npu |
| 硬件要求 | Ascend910 NPU (≥16GB HBM) |
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
torch | 2.9.0 |
torch_npu | 2.9.0.post1 |
mistral_common | ≥ 1.10.0 |
safetensors | ≥ 0.4 |
soundfile | ≥ 0.12 |
numpy | ≥ 1.24 |
Python | 3.11 |
1 卡 Ascend910 (64GB HBM)/opt/atomgit/.cache/modelscope/hub/models/mistralai/Voxtral-4B-TTS-2603# 安装依赖
pip install torch_npu safetensors mistral_common soundfile numpy
# 设置环境变量
export VOXTRAL_MODEL_PATH=/path/to/Voxtral-4B-TTS-2603pip install modelscope
modelscope download --model mistralai/Voxtral-4B-TTS-2603# 列出可用音色
python inference.py --list-voices
# 英文 TTS
python inference.py --text "Hello world, this is a test." --voice casual_female --output output.wav
# 法语 TTS
python inference.py --text "Bonjour le monde." --voice fr_female --output output_fr.wav
# 德语 TTS
python inference.py --text "Hallo Welt." --voice de_male --output output_de.wav
# 指定 CPU 运行(用于精度对比)
python inference.py --text "Hello" --voice neutral_male --device cpu| 音色 ID | 语言 | 性别 |
|---|---|---|
| casual_female | 英语 (en) | 女 |
| casual_male | 英语 (en) | 男 |
| cheerful_female | 英语 (en) | 女 |
| neutral_female | 英语 (en) | 女 |
| neutral_male | 英语 (en) | 男 |
| fr_female | 法语 (fr) | 女 |
| fr_male | 法语 (fr) | 男 |
| es_female | 西班牙语 (es) | 女 |
| es_male | 西班牙语 (es) | 男 |
| de_female | 德语 (de) | 女 |
| de_male | 德语 (de) | 男 |
| it_female | 意大利语 (it) | 女 |
| it_male | 意大利语 (it) | 男 |
| pt_female | 葡萄牙语 (pt) | 女 |
| pt_male | 葡萄牙语 (pt) | 男 |
| nl_female | 荷兰语 (nl) | 女 |
| nl_male | 荷兰语 (nl) | 男 |
| hi_female | 印地语 (hi) | 女 |
| hi_male | 印地语 (hi) | 男 |
| ar_male | 阿拉伯语 (ar) | 男 |
基础功能检查:
# 检查 NPU 可用性
python3 -c "import torch_npu; print(torch_npu.npu.device_count(), torch_npu.npu.get_device_name(0))"
# 列出可用音色
python inference.py --list-voices
# 英文短文本 TTS
python inference.py --text "Hello world." --voice casual_female --output /tmp/test_en.wav
python inference.py --text "Hello world, this is a test of the TTS system." --voice casual_female --output /tmp/test_en_long.wav
# 法语 TTS
python inference.py --text "Bonjour le monde, comment allez-vous aujourd'hui?" --voice fr_female --output /tmp/test_fr.wav
# 德语 TTS
python inference.py --text "Hallo Welt, wie geht es Ihnen heute?" --voice de_male --output /tmp/test_de.wav验证结果:
.wav 文件可正常播放,音质清晰测试条件:单卡 Ascend910 (64GB HBM)、BF16 精度、5 次预热 + 5 次计时推理。
运行命令:
python performance_test.py --iterations 5 --warmup 2完整性能数据:
| 输入文本 | 音色 | Token数 | 生成音频 | 推理延时 | RTF | Tok/s |
|---|---|---|---|---|---|---|
| "Hello world." | casual_female | 222 | 17.68s | 0.075s | 0.0044 | 2885 |
| "Hello world, this is a test of the TTS system." | casual_female | 232 | 18.48s | 0.080s | 0.0043 | 2900 |
| "Bonjour le monde, comment allez-vous aujourd'hui?" | fr_female | 113 | 8.96s | 0.054s | 0.0060 | 2099 |
| "Hallo Welt, wie geht es Ihnen heute?" | de_male | 178 | 14.16s | 0.066s | 0.0047 | 2656 |
性能汇总:
| 指标 | 数值 |
|---|---|
| 平均 RTF | 0.0049(越低越好) |
| 平均 Tokens/s | 2635 |
| 最小延时 | 0.054s |
| 最大延时 | 0.080s |
| 平均延时 | 0.069s |
| 硬件 | Ascend910 (64GB HBM) |
| 推理精度 | BF16 |
| CPU 推理耗时(同文本) | 39.5s |
| NPU vs CPU 加速比 | 83x |
RTF (Real-Time Factor) 说明:RTF < 1 表示推理速度快于实时。RTF = 0.005 意味着生成 1 秒音频仅需 5ms 推理时间,约为实时速度的 200 倍。
使用 accuracy_test.py 对 CPU (FP32) 与 NPU (BF16) 推理输出进行波形级精度对比。
运行命令:
python accuracy_test.py --text "Hello world, this is a test." --voice casual_femaleCPU 与 NPU 精度对比:
| 指标 | CPU (FP32) | NPU (BF16) | 偏差 |
|---|---|---|---|
| 音频时长 | 18.08s | 18.08s | 0% |
| 采样点数 | 433920 | 433920 | 0% |
| RMS 能量 | 0.0221 | 0.0218 | — |
| 波形范围 | [-0.2820, 0.3245] | [-0.2941, 0.3339] | — |
| 最大绝对误差 | — | 0.1043 | — |
| 平均绝对误差 | — | 0.0114 | — |
| 相对误差 | — | 865.05% | — |
| 余弦相似度 | — | 0.7685 | — |
| 推理耗时 | 39.5s | 0.476s | 82.9x 加速 |
精度分析:
| 指标 | 数值 |
|---|---|
| 评测文本 | "Hello world, this is a test." |
| 音色 | casual_female |
| Token 数 | 227 |
| CPU 推理耗时 | 39.5s |
| NPU 推理耗时 | 0.476s |
| NPU 加速比 | 82.9x |
| 音频时长一致性 | 完全一致 (18.08s) |
| RMS 能量一致性 | 一致 (量级相同) |
| 波形范围一致性 | 一致 (峰值范围吻合) |
| 余弦相似度 | 0.7685 |
精度说明:Voxtral-4B-TTS 是生成式模型,涉及随机采样(multinomial sampling from logits),因此 CPU 与 NPU 间的逐点波形无法做到 bit-exact 一致。这是生成式模型的固有特性,非 NPU 适配误差。关键指标验证通过:
- 音频时长:完全一致(模型输出长度由 token 序列决定,确定性运算)
- RMS 能量:量级一致(音频响度正常)
- 动态范围:峰值范围一致(无截断或溢出)
- 音频质量:主观听感一致,可正常播放
输入文本 → Tokenizer(tekken) → Token IDs + Voice Embedding
↓
Mistral-26L Decoder (GQA + RoPE)
↓
Acoustic Transformer (3L)
↓
Semantic + Acoustic Codebook Tokens
↓
EnCodec Decoder (4 blocks)
↓
24kHz Waveform Audio| 组件 | 层数 | 隐藏维度 | 注意力头 | 说明 |
|---|---|---|---|---|
| LM Backbone (Mistral) | 26 | 3072 | 32Q/8KV | GQA + RoPE (theta=1M) |
| Acoustic Transformer | 3 | 1024 | 16Q/8KV | GQA + RoPE (theta=10K) |
| Audio Tokenizer Decoder | 4 blocks | — | Alibi | EnCodec-style, 因果卷积 |
模型权重文件 consolidated.safetensors 包含 386 个张量:
| 加载状态 | 数量 | 说明 |
|---|---|---|
| 正常加载 | 384 | 通过 load_weights() 自动加载并映射 |
| 已跳过 | 2 | 量化器缓冲区(EMA 统计量),通过 _load_quantizer_buffers() 单独处理 |
权重键名映射(_remap 函数):
mm_audio_embeddings.* → audio_embeddings.* / tok_embeddings.*audio_tokenizer_decoder.decoder.model.* → audio_tokenizer_decoder.*decoder.blocks.N.* → decoder.layers.N.*本方案是 Voxtral-4B-TTS-2603 的昇腾 NPU 独立推理部署方案,不依赖 vLLM 框架:
safetensors 格式在 NPU 上加载 4B 参数,384/386 权重完整映射torch_npu 替代 CUDA,利用 F.scaled_dot_product_attention 加速注意力计算mistral_common 原生 Tekkenizer(tekken.json)Voxtral TTS 在声学码本预测阶段使用 multinomial sampling,因此同一输入在不同硬件(CPU/NPU)或不同运行次间会产生不同的波形。这不是 NPU 适配问题,而是模型的固有设计。评估适配精度时应关注:
NPU 推理使用 BF16 精度。相比 FP32,BF16 在保持足够动态范围的同时减少了显存占用(~8GB)。4B 参数模型在 BF16 下约占用 8GB HBM,Ascend910 (64GB HBM) 有充足余量。
有 2/386 个权重张量无法通过常规路径加载(_quantizer.buffer),这些是 EMA 统计缓冲区,不参与前向推理计算,已在 _load_quantizer_buffers() 中单独处理,不影响推理结果。
模型支持的最大 token 长度为 8192。对于超长文本,建议分段合成。
voxtral-tts-npu/
├── inference.py # NPU 推理主脚本(自包含,约 550 行)
├── accuracy_test.py # CPU vs NPU 精度验证脚本
├── performance_test.py # NPU 性能基准测试脚本
└── README.md # 本文件(部署指南 + 评测报告)本模型基于 MistralAI Voxtral-4B-TTS-2603,遵循 CC BY-NC 4.0 许可。适配代码基于 Apache 2.0 许可。
@misc{mistral2026voxtral,
title={Voxtral TTS: Frontier Open-Weight Text-to-Speech},
author={MistralAI},
year={2026},
url={https://mistral.ai/news/voxtral-tts}
}