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

VibeVoice-1.5B Ascend NPU 适配

模型介绍

VibeVoice-1.5B 是微软研究院开发的前沿开源文本转语音 (TTS) 模型,专为生成长篇、多说话人的对话音频(如播客)而设计。该模型基于 Qwen2.5-1.5B 大语言模型,结合连续语音分词器和扩散解码头,能够在昇腾 NPU 上高效运行。

本仓库提供了 VibeVoice-1.5B 模型在华为昇腾 Ascend 910 NPU 上的完整适配方案,包括推理脚本、精度评测和性能测试。

核心创新

  • 超低帧率连续语音分词器:以 7.5 Hz 帧率运行,在保持音频保真度的同时显著提升计算效率
  • Next-Token Diffusion 框架:使用 LLM 理解文本上下文和对话流,通过扩散头生成高保真声学细节
  • 长文本生成:可生成长达 90 分钟 的多说话人音频(最多 4 个说话人)
  • 中英文支持:支持英语和中文播客脚本

模型架构

组件规格
语言模型 (LLM)Qwen2.5-1.5B (28 layers, 1536 hidden, 12 heads, 2 KV heads)
声学分词器 (Acoustic Tokenizer)σ-VAE 变体, 7-stage mirrored encoder-decoder, 3200x 压缩
语义分词器 (Semantic Tokenizer)与声学分词器相同编码器架构, ASR 代理任务训练
扩散头 (Diffusion Head)4 layers, ~123M params, DDPM + DPM-Solver
总参数量~5.4B (含 tokenizer encoder/decoder)
上下文长度最大 65,536 tokens
输出采样率24,000 Hz
推理精度bfloat16 (NPU)

环境要求

  • 硬件: 华为 Ascend 910 NPU (Atlas 300T / Atlas 800 A2 或同等设备)
  • 驱动: Ascend NPU Driver 25.x+
  • 框架: PyTorch 2.9.0 + torch_npu
  • CANN: Ascend-cann-toolkit 8.x+

依赖安装

# 基础依赖
pip install torch==2.9.0 torch_npu transformers>=4.51.0

# VibeVoice 模型包
pip install vibevoice

# 音频处理
pip install torchaudio soundfile scipy

# 模型下载
pip install modelscope
modelscope download --model microsoft/VibeVoice-1.5B

快速开始

推理示例

import torch
import torch_npu
from vibevoice.processor import VibeVoiceProcessor
from vibevoice.modular.modeling_vibevoice_inference import VibeVoiceForConditionalGenerationInference

# 加载模型
model_path = "/path/to/VibeVoice-1___5B"
qwen_tokenizer_path = "/path/to/Qwen2___5-1___5B"  # Qwen2.5-1.5B tokenizer
processor = VibeVoiceProcessor.from_pretrained(
    model_path, language_model_pretrained_name=qwen_tokenizer_path
)
model = VibeVoiceForConditionalGenerationInference.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16,
)

# 移到 NPU
device = torch.device("npu:0")
model = model.to(device)
model.eval()

# 生成播客音频
script = (
    "Speaker 1: Welcome to our podcast. Today we explore the latest in AI technology.\n"
    "Speaker 2: It's exciting to see how speech synthesis has advanced in recent years."
)
inputs = processor(text=script, return_tensors="pt", padding=True)
device_inputs = {k: v.to(device) if isinstance(v, torch.Tensor) else v
                 for k, v in inputs.items()}

with torch.no_grad():
    output = model.generate(**device_inputs, max_new_tokens=512,
                           do_sample=True, return_speech=True)

# 保存音频
import torchaudio
audio = output.speech_outputs[0].cpu()
torchaudio.save("output.wav", audio, 24000)

命令行推理

# 基础推理 (默认演示脚本)
python inference.py

# 指定文本推理
python inference.py --text "Speaker 1: Hello from Ascend NPU.\nSpeaker 2: The model is running well."

# 运行所有评测 (精度 + 性能)
python inference.py --all

# 仅精度评测
python eval_accuracy.py

# 仅性能测试
python eval_performance.py

推理脚本说明

文件说明
inference.py主推理脚本,支持播客脚本转语音及批量测试
eval_accuracy.py精度评测脚本,NPU vs CPU 误差分析
eval_performance.py性能评测脚本,吞吐/延迟/显存基准测试

推理参数

参数类型默认值说明
--textstr-播客脚本文本 (Speaker N: 格式)
--max-tokensint1024最大生成 token 数
--temperaturefloat0.9采样温度
--top-pfloat0.95Top-P 采样
--compileflagFalse启用 torch.compile 加速
--benchmarkflagFalse运行性能基准
--accuracyflagFalse运行精度评测
--allflagFalse运行全部评测
--no-sampleflagFalse禁用采样 (确定性推理)
--outputstroutput.wav输出音频路径

播客脚本格式

VibeVoice 使用多说话人播客格式输入:

Speaker 1: <说话人1的文本>
Speaker 2: <说话人2的文本>
Speaker 1: <后续对话>

说话人 ID 从 0 或 1 开始,模型最多支持 4 个不同说话人。

精度评测结果

评测方法:对相同输入在 NPU (bfloat16) 和 CPU (float32) 上执行前向推理,比较输出 logits 的数值差异。

测试用例相关系数MAE最大误差相对误差结果
Short English (2 speakers)0.9998320.0110080.3063950.130450PASS
Medium English (2 speakers)0.9998800.0099380.1732900.141079PASS
Chinese (2 speakers)0.9998720.0101770.2053850.427394PASS

通过标准:相关系数 > 0.99

结论:NPU (bfloat16) 与 CPU (float32) 的 logits 相关系数 > 0.999,远超 0.99 通过标准,数值精度满足要求。

注:相对误差较高是因为大量 logit 值接近零,分母极小导致比值不稳定。相关系数 (>0.999) 和 MAE (<0.02) 是更可靠的精度指标。

运行 python eval_accuracy.py 获取详细评测数据。

性能基准测试

测试环境:Ascend 910 NPU,bfloat16 精度

配置Token 数耗时 (s)Token/sRTF显存 (GB)
short_256t25610.6210.91.3285.12
short_512t51218.1610.01.3505.13
medium_512t51225.178.61.3465.13
medium_1024t102437.128.71.3495.13
long_1024t102462.258.51.3375.14
  • 模型加载时间:约 27s | 加载显存:5.05 GB | 峰值显存:5.14 GB
  • RTF (Real-Time Factor):~1.3x-1.4x,适合离线/准实时场景

注:性能数据请运行 python eval_performance.py 获取实时结果。

Ascend NPU 适配说明

关键修改点

  1. 设备迁移:将模型所有参数从 CPU/CUDA 迁移到 NPU (model.to("npu:0"))
  2. 精度选择:使用 torch.bfloat16 混合精度,Ascend 910 原生支持 bf16 计算
  3. 分词器迁移:声学分词器 (Acoustic Tokenizer) 和语义分词器 (Semantic Tokenizer) 均迁移到 NPU
  4. 内存优化:配置 PYTORCH_NPU_ALLOC_CONF=expandable_segments:True 启用可扩展内存段

适配难点

  • 多组件模型:VibeVoice 包含 LLM、双分词器、扩散头、连接器等多个子模块,需逐个确认 NPU 兼容性
  • 扩散推理:扩散头使用 DDPM + DPM-Solver 推理,涉及迭代采样过程,对设备间数据传输敏感
  • 自回归生成:LLM 的自回归生成包含 Flash Attention 算子,可通过 torch_npu 加速
  • VAE 编码/解码:声学分词器的 σ-VAE 结构基于 PyTorch 原生算子,天然支持 NPU

NPU 配置

import os
import torch_npu

# 内存分配器优化
os.environ["PYTORCH_NPU_ALLOC_CONF"] = "expandable_segments:True"

# 设备初始化
device = torch.device("npu:0")
torch.npu.set_device(device)

# 同步操作 (确保执行完成)
torch.npu.synchronize()

文件结构

VibeVoice-1.5B/
├── inference.py              # 主推理脚本
├── eval_accuracy.py          # 精度评测脚本
├── eval_performance.py       # 性能基准测试
├── README.md                 # 本文档
├── output/                   # 输出目录
│   ├── results.json          # 运行结果
│   ├── accuracy_*.json       # 精度评测结果
│   ├── performance_*.json    # 性能测试结果
│   └── demo_*.wav            # 演示音频输出
└── model/                    # 模型文件 (需下载)

已知限制

  • 仅支持中英文:其他语言可能产生不可理解的音频输出
  • 不含背景音效:仅生成语音,不支持背景噪音、音乐等
  • 无重叠对话:当前版本不支持说话人重叠的语音生成
  • 最长 90 分钟:受训练上下文长度限制
  • 最多 4 个说话人:单次播客最多支持 4 个不同说话人

引用

本模型基于微软研究院的 VibeVoice 模型:

@misc{microsoft2025vibevoice,
  title={VibeVoice: A Frontier Open-Source Text-to-Speech Model},
  author={Microsoft Research},
  year={2025},
  howpublished={\url{https://huggingface.co/microsoft/VibeVoice-1.5B}},
}

论文: VibeVoice Technical Report

代码: microsoft/VibeVoice

许可证

本仓库代码基于 MIT 许可证。VibeVoice-1.5B 模型权重遵循微软原始许可协议。