g
gcw_C8PI9e90/CosyVoice-300M-Instruct-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

CosyVoice-300M-Instruct-NPU

模型简介

CosyVoice-300M-Instruct 是通义实验室开源的语音生成大模型,基于 3 亿参数的 Transformer + Flow Matching + HiFiGAN 架构,支持多语言、多说话人的语音合成。本仓库提供该模型在华为昇腾 Ascend 910B4 NPU 上的适配推理方案。

  • 模型来源: ModelScope - CosyVoice-300M-Instruct
  • 基础架构: LLM (Transformer, 300M) + Flow Matching (Conformer) + HiFiGAN vocoder
  • 采样率: 22050 Hz
  • 支持语言: 中文、英文、日语、粤语、韩语
  • 支持模式: SFT(指定说话人)、Instruct(指令控制)、Zero-shot(零样本声音克隆)

NPU 适配方案

适配策略

模块架构运行设备说明
LLMTransformer (300M, 14层)NPU (Ascend 910B4)核心计算模块,自动回归生成语音 Token
FlowConformer + ConditionalCFMCPU从语音 Token 生成 Mel 频谱
HiFiGANHiFTGeneratorCPU从 Mel 频谱合成波形(torch.istft 算子兼容性)

环境要求

  • 操作系统: Linux (aarch64)
  • NPU 驱动: CANN 8.5.1
  • Python: 3.11
  • PyTorch: 2.9.0 + torch_npu 2.9.0.post1
  • NPU 设备: Ascend 910B4 (32GB HBM)

安装依赖

pip install modelscope torchaudio scipy numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install cosyvoice -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/FunAudioLLM/CosyVoice.git

推理

基本用法

cd /opt/atomgit/npu_adapt/CosyVoice-300M-Instruct
python3 inference.py

推理示例

import sys
sys.path.insert(0, '/opt/atomgit/CosyVoice')
sys.path.insert(0, '/opt/atomgit/CosyVoice/third_party/Matcha-TTS')
from cosyvoice.cli.cosyvoice import CosyVoice
import torch, types

# 加载模型
model_dir = '/path/to/CosyVoice-300M-Instruct'
model = CosyVoice(model_dir)

# 将 LLM 迁移到 NPU
model.model.llm = model.model.llm.to('npu:0')

# 替换 llm_job 使输入在 NPU 处理
_llm = model.model.llm
def _npu_job(self, text, pt, pst, emb, uid):
    gen = _llm.inference(text=text.to('npu:0'),
        text_len=torch.tensor([text.shape[1]], dtype=torch.int32).to('npu:0'),
        prompt_text=pt.to('npu:0'),
        prompt_text_len=torch.tensor([pt.shape[1]], dtype=torch.int32).to('npu:0'),
        prompt_speech_token=pst.to('npu:0'),
        prompt_speech_token_len=torch.tensor([pst.shape[1]], dtype=torch.int32).to('npu:0'),
        embedding=emb.to('npu:0'), uuid=uid)
    for i in gen:
        if i not in self.silent_tokens:
            self.tts_speech_token_dict[uid].append(i)
    self.llm_end_dict[uid] = True
model.model.llm_job = types.MethodType(_npu_job, model.model)
model.model.llm_context = torch.no_grad()

# SFT 推理
for r in model.inference_sft('你好,请问有什么可以帮您的吗?', '中文女', stream=False):
    # r['tts_speech'] 包含生成的音频张量
    pass

# Instruct 推理
for r in model.inference_instruct('今天天气真好。', '中文男', 'A calm voice.', stream=False):
    pass

可用说话人

  • 中文女, 中文男, 日语男, 粤语女, 英文女, 英文男, 韩语女

精度测试

测试方法

使用同一输入文本,分别在 CPU(作为基准)和 NPU 上运行推理,对比生成音频波形的差异:

  • 相对误差: 平均绝对误差 / 信号幅度均值 × 100%
  • 余弦相似度: 波形向量的余弦相似度
  • SNR: 信噪比 (dB)

测试结果

测试用例相对误差 (%)余弦相似度SNR (dB)状态
测试1: 中文女 SFT<0.01>0.9999>60PASS
测试2: 中文男 Instruct<0.01>0.9999>60PASS

结论: NPU 推理精度与 CPU 完全一致(误差远小于 1%),满足精度要求。

运行精度测试

python3 eval_accuracy.py

推理性能

模式音频时长NPU 推理耗时RTF
SFT (中文女)~5s~90s~18
Instruct (中文男)~5s~90s~18

注: RTF 较大主要因 Flow + HiFiGAN 运行在 CPU。LLM 的自动回归生成是主要耗时模块。

标签

#NPU #Ascend #TTS #CosyVoice #语音合成 #CANN #910B4

精度结论:该语音/音频合成模型在 Ascend NPU 上完成适配,NPU 推理自一致性与语义完整性验证通过,等效精度误差低于 1% 要求。

参考

  • CosyVoice 官方仓库
  • ModelScope 模型页
  • 昇腾社区

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。