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

SoulX-Podcast-1.7B
昇腾 Ascend NPU 适配版本

基于华为昇腾 NPU 的 SoulX-Podcast 文语转换模型推理部署

Paper Code Ascend #NPU

模型简介

SoulX-Podcast 是由 Soul-AILab 开发的播客式多轮对话语音生成模型,支持中英文及多种方言(四川话、河南话、粤语等)的零样本语音克隆。本仓库提供了在华为昇腾 Ascend 910 NPU 上的完整适配与推理部署方案。

原始模型信息

  • 架构: Qwen3-1.7B + Flow Matching + HiFi-GAN
  • 参数量: 1.7B
  • 采样率: 24000 Hz
  • 语言: 中文、英文
  • 原始仓库: Soul-AILab/SoulX-Podcast

NPU 适配说明

本适配版本将原始 CUDA 代码迁移至昇腾 NPU 平台,主要改动包括:

  1. CUDA → NPU 设备映射: 通过 monkey-patching 将 torch.cuda 调用重定向到 torch_npu
  2. torchaudio 替换: 使用 soundfile + librosa 替代不兼容的 torchaudio
  3. HiFi-GAN CPU 回退: torch.istft 在 NPU 上存在算子兼容性问题,采用 CPU 回退方案
  4. Flow Matching NPU 适配: 使用 torch.npu.amp.autocast 替代 torch.cuda.amp.autocast

适配组件

组件原始设备NPU 适配备注
Qwen3-1.7B LLMCUDA✅ NPU核心生成模型
s3tokenizerCUDA✅ NPU语音分词器
Flow MatchingCUDA✅ NPU梅尔频谱生成
HiFi-GANCUDA⚠️ CPU 回退istft 算子限制
Campplus (说话人编码)CPU (ONNX)✅ CPU保持不变

精度验证

验证方法

在相同随机种子 (seed=42) 下,比较 NPU (bfloat16) 与 CPU (float32) 的模型输出。

验证结果

指标数值阈值状态
Logit 相对 MAE0.9651%< 1%✅ PASS
Logit 余弦相似度0.99990118> 0.99✅ PASS
Embedding 层误差0.0000%< 1%✅ PASS
最终隐藏层误差2.8470%-bf16 vs fp32 累差

结论

NPU 推理精度与 CPU 基线误差 < 1%,满足精度要求。

环境要求

硬件

  • 昇腾 Ascend 910 NPU (推荐 Ascend 910B)
  • NPU 驱动: 25.5.2+
  • torch_npu: 对应 PyTorch 2.9.0

软件依赖

# 核心依赖
torch >= 2.9.0
torch_npu
transformers >= 4.56.0
s3tokenizer >= 0.3.0
librosa
soundfile
onnxruntime
diffusers
accelerate

# 安装命令
pip install modelscope s3tokenizer librosa soundfile onnxruntime diffusers accelerate

快速开始

1. 下载模型

# 使用 ModelScope 下载
pip install modelscope
modelscope download --model Soul-AILab/SoulX-Podcast-1.7B --local_dir models/SoulX-Podcast-1.7B

# 克隆推理代码
git clone https://github.com/Soul-AILab/SoulX-Podcast.git

2. 运行 NPU 推理

python soulxpodcast_npu/inference.py \
    --model_path models/SoulX-Podcast-1.7B \
    --prompt_audio SoulX-Podcast/example/audios/female_mandarin.wav \
    --prompt_text "喜欢攀岩、徒步、滑雪的语言爱好者..." \
    --text "[S1]一个着迷于在岩壁与雪原间捕捉语言灵感的旅人..." \
    --output_path outputs/npu_tts.wav \
    --seed 7

3. 精度验证

python soulxpodcast_npu/eval_accuracy.py

性能数据

指标数值
模型加载时间10.54s
推理时间 (4.56s 音频)10.51s
RTF (Real-Time Factor)2.31
生成音频时长4.56s
设备Ascend 910 × 2

注: RTF 受 HiFi-GAN CPU 回退影响,纯 NPU 推理 RTF 预期 < 1

文件说明

soulxpodcast_npu/
├── inference.py          # NPU 推理入口脚本
├── eval_accuracy.py      # 精度验证脚本
├── outputs/              # 输出目录
│   ├── npu_tts.wav      # NPU 生成音频
│   └── eval_results.json # 精度验证结果
└── README.md             # 本文件

已知问题

  1. HiFi-GAN torch.istft: NPU UnfoldGrad 算子不支持非连续输入,使用 CPU 回退
  2. torchaudio 不兼容: torchcodec 依赖 CUDA libnvrtc,使用 soundfile/librosa 替代
  3. vLLM V1: 当前环境 vLLM 0.18.0 版本使用 V0 引擎

引用

@misc{SoulXPodcast,
  title        = {SoulX-Podcast: Towards Realistic Long-form Podcasts with
                  Dialectal and Paralinguistic Diversity},
  author       = {Hanke Xie and Haopeng Lin and Wenxiao Cao and Dake Guo and
                  Wenjie Tian and Jun Wu and Hanlin Wen and Ruixuan Shang and
                  Hongmei Liu and Zhiqi Jiang and Yuepeng Jiang and Wenxi Chen and
                  Ruiqi Yan and Jiale Qian and Yichao Yan and Shunshun Yin and
                  Ming Tao and Xie Chen and Lei Xie and Xinsheng Wang},
  year         = {2025},
  archivePrefix= {arXiv},
  url          = {https://arxiv.org/abs/2510.23541}
}

许可

本项目沿用原始模型的 Apache 2.0 许可证。