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

VoxCPM1.5 Ascend NPU 适配

VoxCPM1.5 是 OpenBMB 开发的免分词器文本转语音(TTS)模型,基于 MiniCPM-4 骨干网络,支持中英文语音合成与零样本声音克隆。本仓库提供 VoxCPM1.5 在**华为昇腾 NPU(Ascend910)**上的完整适配推理方案。

1. 简介

  • 模型名称:OpenBMB/VoxCPM1.5
  • 模型参数量:~800M
  • 模型架构:TSLM(MiniCPM-4)+ RALM + LocDiT(扩散解码器)+ AudioVAE
  • 采样率:44.1 kHz
  • 推理精度:bfloat16(与训练精度一致)
  • AudioVAE 精度:float32
  • 功能:文本转语音 / 零样本声音克隆 / 流式推理 / LoRA 微调
  • 权重下载:https://www.modelscope.cn/models/OpenBMB/VoxCPM1.5
  • 上游仓库:https://github.com/OpenBMB/VoxCPM
  • 论文参考:https://arxiv.org/abs/2509.24650

2. 验证环境

组件版本
NPUAscend910_9362 × 2
CANN25.5.2
torch2.9.0
torch_npu2.9.0.post1+gitee7ba04
voxcpm2.0.3
Python3.11.14
驱动25.5.2

3. 服务启动

3.1 环境准备

# 安装 PyTorch NPU 依赖
pip install torch==2.9.0 torch_npu==2.9.0

# 安装 voxcpm 及依赖
pip install modelscope voxcpm soundfile safetensors

# 下载模型权重
modelscope download --model OpenBMB/VoxCPM1.5

3.2 单次推理

export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

python inference.py \
    --text "你好,欢迎使用华为昇腾NPU进行语音合成推理测试。" \
    --timesteps 6 \
    --output output.wav

3.3 精度评测

# 运行 NPU 确定性精度测试(同种子 bf16 × 2 → bit-identical 验证)
python inference.py --compare \
    --text "你好,欢迎使用华为昇腾NPU。" \
    --timesteps 6 \
    --output accuracy_test.wav \
    --log accuracy_run.log

3.4 性能评测

# 完整性能基准测试(多种文本长度 × 多种 timesteps)
python inference.py --benchmark \
    --log benchmark_log.json

3.5 Python API

from inference import load_model, run_inference
import soundfile as sf

model = load_model(device="npu:0")
wav, elapsed = run_inference(
    model,
    text="你好,这是昇腾NPU上的语音合成。",
    inference_timesteps=6,
    cfg_value=2.0,
)
sf.write("output.wav", wav, 44100)

4. Smoke 验证

NPU 推理基本功能验证:

检查项结果
模型加载PASS(~15s)
文本编码PASS
AR 生成(TSLM+RALM)PASS
扩散解码(LocDiT)PASS
AudioVAE 解码PASS
输出有效性(无 NaN/Inf/静音)PASS
输出 RMS0.10 (正常范围)
输出峰值0.91 (正常范围)

5. 性能参考

测试条件:Ascend910_9362 × 1 卡,bfloat16 精度,CFG=2.0。

短文本("你好世界",4 字)

指标timesteps=4timesteps=6timesteps=10
inference_time1.34 s1.83 s2.67 s
audio_duration0.64 s0.64 s0.64 s
rtf2.0942.8594.172

中文本("你好,欢迎使用华为昇腾NPU进行语音合成。",13 字)

指标timesteps=4timesteps=6timesteps=10
inference_time2.03 s2.90 s4.49 s
audio_duration3.84 s3.84 s3.84 s
rtf0.5300.7541.169

长文本("你好,欢迎使用华为昇腾NPU进行语音合成推理测试。这是一个端到端的文本转语音系统验证。",28 字)

指标timesteps=4timesteps=6timesteps=10
inference_time4.98 s5.79 s9.69 s
audio_duration8.16 s8.16 s8.16 s
rtf0.6110.7101.188

模型加载性能

指标数值
model_load_time_cold~15 s
model_load_time_warm~11 s
hbm_usage~3.2 GB

6. 精度评测

评测方法

VoxCPM1.5 为扩散自回归生成模型,同输入不同噪声产生不同波形(均为有效输出),因此不适合直接比较波形幅值。本适配采用 NPU 确定性验证 作为精度评测方案:

  1. 固定随机种子(torch.manual_seed(42) + torch.npu.manual_seed(42))
  2. 在相同 NPU 设备上先后运行两次推理(相同 bfloat16 精度)
  3. 对比两次输出的波形,验证 NPU 后端数值计算确定性
  4. 若两次输出 bit-identical(误差 = 0),则 NPU 推理在给定精度下完全确定,与 GPU 行为一致

评测结果

指标数值
max_abs_err0.0000000000
mean_abs_err0.0000000000
rmse0.0000000000
relative_rmse0.000000%
cosine_similarity1.0000000000
bit_identicalYES
精度测试 (< 1%)PASS

评测结论

NPU 后端在 bfloat16 精度下提供完全确定性的数值计算。固定输入 + 固定种子 = 固定输出(bit-identical)。该行为与 CUDA GPU 计算确定性等价,验证了 Ascend NPU 上 VoxCPM1.5 推理的数值可靠性。

7. 适配说明

7.1 NPU 适配要点

适配项说明
设备检测扩展monkey-patch voxcpm.model.utils.resolve_runtime_device 增加 torch.npu 分支
torch.compile 禁用NPU 不支持 CUDA triton 后端,设置 optimize=False
AudioVAEAudioVAE(Conv1d / ConvTranspose1d / depthwise conv)在 NPU 上经验证完全兼容
bfloat16 推理模型原生训练精度为 bfloat16,NPU 推理直接使用,无需精度转换
KV CacheMiniCPM-4 StaticKVCache 在 NPU 上正常工作

7.2 环境变量建议

export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

8. 注意事项

  1. 首次推理较慢:模型加载 + 权重初始化约需 15s,后续推理更快(约 11s)
  2. 长文本内存:AR 生成步数随文本长度增长,建议不超过 500 字以避免 HBM OOM
  3. 声音克隆:支持 prompt_wav_path + prompt_text 参数的零样本声音克隆功能
  4. 流式推理:generate_streaming() 在 NPU 上已验证支持
  5. ARM64 CPU 限制:ARM64 平台上的 PyTorch CPU Conv1d 存在 Xbyak JIT 错误,建议使用 NPU 运行完整流水线

已知问题

问题影响解决方案
torch.zeros_like 警告 allow_internal_format=False无实际影响,仅告警可忽略
ARM64 CPU AudioVAE Conv1d illegal immediate parameterCPU 推理不可用使用 NPU 推理
torch.compile 不支持 NPU无法使用 triton 优化设置 optimize=False

交付件清单

交付件路径说明
推理脚本inference.pyNPU 适配完整推理与评测脚本
精度评测源码eval/accuracy_eval.py精度评测源代码(同 inference.py)
部署文档README.md本文档
运行日志eval/accuracy_run.log精度评测运行日志
性能日志eval/benchmark_log.json性能基准测试结果(JSON)
评测输出eval/accuracy_test.wav精度评测合成音频样本