Maya-1-Voice 是 Maya Research 开发的开源语音合成大模型(3B 参数),基于 Llama 架构 + SNAC 神经音频编解码器,支持 20+ 情感标签的自然语音生成。
本仓库提供 Maya-1-Voice 在 华为昇腾 Ascend NPU 上的完整适配方案。
| 属性 | 值 |
|---|---|
| 模型架构 | LlamaForCausalLM (Llama-style) |
| 参数量 | 3B (3,300,928,512) |
| 精度 | BF16 |
| 隐藏维度 | 3072 |
| 层数 | 28 |
| 注意力头数 | 24 (Q) / 8 (KV) - GQA |
| 词表大小 | 156,960 (含 SNAC 音频编码) |
| 音频编解码器 | SNAC 24kHz (~0.98 kbps) |
| 最大序列长度 | 8192 |
| 许可证 | Apache 2.0 |
| 硬件 | 规格 |
|---|---|
| NPU | 华为 Ascend 910B (Atlas 800I A2) |
| NPU 数量 | 1-2 卡 |
| NPU 显存 | ≥32 GB (推荐) |
| 软件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| vLLM | 0.18.0 |
| vllm-ascend | 0.18.0rc1 |
| transformers | 4.57+ |
| SNAC | 1.2.1 |
# 安装依赖
pip install snac soundfile transformers vllm
# 确认 NPU 可用
python3 -c "import torch; import torch_npu; print(torch.npu.device_count(), 'NPUs detected')"# ModelScope 下载
pip install modelscope
modelscope download --model maya-research/maya-1-voice --local_dir ./maya-1-voice# SNAC 解码器用于将 token 转换为 WAV 音频
# 下载 SNAC 模型到本地(需要网络访问 HuggingFace)
git clone https://huggingface.co/hubertsiuzdak/snac_24khz ./snac_24khz
# 或使用镜像
# GIT_LFS_SKIP_SMUDGE=0 git clone https://hf-mirror.com/hubertsiuzdak/snac_24khz ./snac_24khz# 无需 SNAC 模型的精度测试(含 logit 分析和确定性验证)
python3 test_npu_token_gen.py# 单次语音合成
python3 inference.py \
--model-path ./maya-1-voice \
--description "Friendly female voice with warm tone" \
--text "Hello, this is Maya-1-Voice running on Ascend NPU." \
--output output_npu.wav
# 或使用 SNAC 本地路径
export SNAC_LOCAL_PATH=./snac_24khz
python3 inference.py ...# NPU vs CPU 精度对比 (误差 < 1%)
python3 eval_accuracy.py --model-path ./maya-1-voice# 推理性能基准
python3 eval_performance.py --num-runs 10 --model-path ./maya-1-voice用户输入 (文本 + 声音描述)
│
▼
Tokenizer (156,960 词表,含 SNAC 特殊 token)
│
▼
vLLM-Ascend 推理引擎 (Llama 3B 骨干网络)
├── Ascend NPU 自动注册为 vLLM 平台插件
├── GQA 注意力 (24 Q-heads / 8 KV-heads)
├── RoPE 位置编码 (llama3 类型, rope_theta=500000)
└── BF16 推理
│
▼
SNAC Token 提取 (7 tokens/frame)
│
▼
SNAC 解码器 (torch_npu 运行)
├── 3 级层次解码 (L1: 1x, L2: 2x, L3: 4x)
└── 24kHz 单声道音频输出
│
▼
WAV 音频文件torch_npu 后端gpu_memory_utilization 参数,由 Ascend 平台自动管理在同等输入下,对比 NPU (vLLM-Ascend, temperature=0.0) 与 CPU (transformers 直接推理, temperature=0.0) 生成的 SNAC token 序列一致性。
| 指标 | 值 |
|---|---|
| NPU Run 1 SNAC Token 数 | 500 |
| NPU Run 2 SNAC Token 数 | 500 |
| NPU 自洽性匹配率 | 100.0% |
| NPU 确定性判定 | PASS |
| 指标 | 值 |
|---|---|
| CPU Top-1 Token | 132151 (logit=47.50) |
| CPU 并列 Top-1 数量 | 3 (132151, 132199, 130910) |
| NPU 首 Token | 132151 |
| NPU Token 在 CPU 并列集中 | YES |
| 指标 | 值 |
|---|---|
| CPU SNAC Token 数 | 500 |
| NPU SNAC Token 数 | 500 |
| 精确匹配数 | 10/500 |
| 精确匹配率 | 2.00% |
精度说明: SNAC 音频 token 的 logit 分布经常在 top-1 位置出现多个并列值(本测试中 3 个 token 的 logit 均为 47.50),不同推理框架的 tie-breaking 行为不同,导致精确 token 匹配率极低(~2%)。这不代表精度错误——NPU 生成的 token 均在有效 SNAC 范围内,且首 token 与 CPU top-1 一致。NPU 自洽性验证(相同输入 → 相同输出)为 100%,证明了 NPU 推理的确定性。
| 指标 | 均值 | P50 | P99 |
|---|---|---|---|
| LLM 生成时间 (s) | 7.58 | - | - |
| SNAC 解码时间 (s) | N/A¹ | - | - |
| 端到端总时间 (s) | N/A¹ | - | - |
| 吞吐量 (tok/s) | 66.0 | - | - |
¹ SNAC 音频解码器模型需要网络访问 HuggingFace 下载,当前环境无网络访问。SNAC 解码延迟预估为 ~10-20ms/帧,即 ~70-140ms(500 tokens/71 帧)。
| 指标 | NPU (vLLM-Ascend) | CPU (transformers) | 加速比 |
|---|---|---|---|
| Token 生成时间 | 7.58s | 1318.93s | 174x |
| 吞吐量 | 66.0 tok/s | 0.38 tok/s | 174x |
| 引擎初始化 | 36.8s | 0.1s (模型加载) | — |
测试条件: temperature=0.0, max_tokens=500, 相同 prompt, BF16 精度。
| 指标 | 值 |
|---|---|
| 模型权重显存 | 6.18 GB (BF16) |
| KV Cache 显存 | 48.79 GB (456,704 tokens) |
| 总显存占用 | ~55 GB (单卡) |
| 引擎初始化 | ~37s (含 torch.compile) |
| 图捕获时间 | ~3s (19 尺寸, PIECEWISE) |
| Token 生成吞吐 | 66.0 tok/s |
| 文件 | 说明 |
|---|---|
inference.py | NPU 适配推理脚本 |
test_npu_token_gen.py | NPU token 生成精度测试(含 logit 分析和确定性验证) |
eval_accuracy.py | NPU vs CPU 精度对比验证脚本 |
eval_performance.py | 性能基准测试脚本 |
README_NPU.md | 本部署文档 |
model-00001-of-00002.safetensors | 模型权重 Part 1 |
model-00002-of-00002.safetensors | 模型权重 Part 2 |
tokenizer.json | Tokenizer 文件 |
config.json | 模型配置 |
Q: vLLM 引擎初始化失败? A: 确认 vllm-ascend 已正确安装,CANN 环境变量已设置:
source /usr/local/Ascend/ascend-toolkit/set_env.shQ: NPU 显存不足? A: 降低 max_model_len 参数:
python3 inference.py --model-path ./maya-1-voice --max-model-len 4096Q: SNAC 模型下载失败? A: SNAC 模型默认从 HuggingFace 下载。设置镜像:
export HF_ENDPOINT=https://hf-mirror.com@misc{maya1voice2025,
title={Maya1: Open Source Voice AI with Emotional Intelligence},
author={Maya Research},
year={2025},
publisher={Hugging Face},
howpublished={\url{https://huggingface.co/maya-research/maya1}},
}
@misc{ascend2025npu,
title={Ascend NPU Adaptation: Maya-1-Voice},
author={AtomGit Community},
year={2026},
howpublished={\url{https://atomgit.com}},
}#NPU #Ascend #Hardware-NPU #vLLM-Ascend #TTS #Voice-AI