weixin_62994174/maya-1-voice
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Maya-1-Voice Ascend NPU 适配部署指南

模型简介

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 (推荐)

软件环境

软件版本
CANN8.5.1
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
vLLM0.18.0
vllm-ascend0.18.0rc1
transformers4.57+
SNAC1.2.1

快速开始

1. 环境安装

# 安装依赖
pip install snac soundfile transformers vllm

# 确认 NPU 可用
python3 -c "import torch; import torch_npu; print(torch.npu.device_count(), 'NPUs detected')"

2. 模型下载

# ModelScope 下载
pip install modelscope
modelscope download --model maya-research/maya-1-voice --local_dir ./maya-1-voice

3. 下载 SNAC 音频解码器 (可选)

# 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

4. Token 生成测试 (验证 NPU 适配正确性)

# 无需 SNAC 模型的精度测试(含 logit 分析和确定性验证)
python3 test_npu_token_gen.py

5. 推理测试 (需要 SNAC 模型)

# 单次语音合成
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 ...

6. 精度验证

# NPU vs CPU 精度对比 (误差 < 1%)
python3 eval_accuracy.py --model-path ./maya-1-voice

7. 性能基准测试

# 推理性能基准
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 音频文件

关键适配点

  1. vLLM-Ascend 平台插件:vllm-ascend 自动注册为 vLLM 平台插件,无需手动指定设备
  2. SNAC 解码器迁移:将 SNAC 模型从 CUDA 迁移到 NPU,使用 torch_npu 后端
  3. 设备自适应:自动检测 NPU → CUDA → CPU 优先级选择最优设备
  4. 内存管理:移除 gpu_memory_utilization 参数,由 Ascend 平台自动管理

精度评估

评估方法

在同等输入下,对比 NPU (vLLM-Ascend, temperature=0.0) 与 CPU (transformers 直接推理, temperature=0.0) 生成的 SNAC token 序列一致性。

评估指标

  • SNAC Token 精确匹配率:NPU 与 CPU 生成 token 的完全匹配比例
  • 误差率:1 - 匹配率
  • 判定标准:误差率 < 1% 为通过

精度测试结果

确定性验证

指标值
NPU Run 1 SNAC Token 数500
NPU Run 2 SNAC Token 数500
NPU 自洽性匹配率100.0%
NPU 确定性判定PASS

Logit 分析(首 Token)

指标值
CPU Top-1 Token132151 (logit=47.50)
CPU 并列 Top-1 数量3 (132151, 132199, 130910)
NPU 首 Token132151
NPU Token 在 CPU 并列集中YES

跨平台 Token 对比

指标值
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 推理的确定性。

性能评估

测试方法

  • 输入: 固定 voice description + 固定 text prompt
  • max_tokens: 500
  • temperature: 0.4
  • 预热: 2 轮
  • 测试轮次: 10 轮

延迟与吞吐

指标均值P50P99
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.58s1318.93s174x
吞吐量66.0 tok/s0.38 tok/s174x
引擎初始化36.8s0.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.pyNPU 适配推理脚本
test_npu_token_gen.pyNPU token 生成精度测试(含 logit 分析和确定性验证)
eval_accuracy.pyNPU vs CPU 精度对比验证脚本
eval_performance.py性能基准测试脚本
README_NPU.md本部署文档
model-00001-of-00002.safetensors模型权重 Part 1
model-00002-of-00002.safetensors模型权重 Part 2
tokenizer.jsonTokenizer 文件
config.json模型配置

常见问题

Q: vLLM 引擎初始化失败? A: 确认 vllm-ascend 已正确安装,CANN 环境变量已设置:

source /usr/local/Ascend/ascend-toolkit/set_env.sh

Q: NPU 显存不足? A: 降低 max_model_len 参数:

python3 inference.py --model-path ./maya-1-voice --max-model-len 4096

Q: 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