CosyVoice(TorchAir)-推理指导
概述
CosyVoice是一款基于语音量化编码的语音生成大模型,能够深度融合文本理解和语音生成,实现自然流畅的语音体验。它通过离散化编码和依托大模型技术,能够精准解析并诠释各类文本内容,将其转化为宛如真人般的自然语音
- 版本说明:
url=https://github.com/FunAudioLLM/CosyVoice commit_id=fd45708 model_name=Cosyvoice
推理环境准备
-
该模型需要以下插件与驱动
表 1 版本配套表配套 版本 环境准备指导 固件与驱动 24.0.RC3 Pytorch框架推理环境准备 CANN 8.0.RC3 包含kernels包和toolkit包 Python 3.8 - PyTorch 2.4.0 - Ascend Extension PyTorch 2.4.0.post2 - 说明:Atlas 800I A2 推理卡和Atlas 300I DUO 推理卡请以CANN版本选择实际固件与驱动版本。 \ \
快速上手
获取源码
-
获取本仓源码
git clone https://gitcode.com/ascend/ModelZoo-PyTorch.git cd ModelZoo-PyTorch/ACL_PyTorch/built-in/audio/CosyVoice -
获取
PyTorch源码git clone https://github.com/FunAudioLLM/CosyVoice cd CosyVoice git reset --hard fd45708 git submodule update --init --recursive # 如果使用800I系列推理卡,使用diff_800I.patch, 300I系列对应diff_300I.patch git apply ../diff_{type}.patch -
安装依赖
pip3 install -r ../requirements.txt apt-get install sox # centos版本 yum install sox注:如果遇到无法安装WeTextProcessing的场景,可以参考以下方法手动安装编译
# 下载安装包并解压 wget https://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.8.3.tar.gz # 进入目录后编译安装 ./configure --enable-far --enable-mpdt --enable-pdt make -j$(nproc) make install # 确认动态库文件存在: ls /usr/local/lib/libfstmpdtscript.so.26 # 配置动态库路径 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH sudo ldconfig # 安装WeTextProcessing pip3 install WeTextProcessing==1.0.4.1 -
安装msit工具
参考msit安装工具中的benchmark和surgen组件。(未安装会提示 ais_bench 导入失败报错)
-
获取权重数据
本案例以CosyVoice-300M为例,其他权重请自行适配
获取 https://modelscope.cn/models/iic/CosyVoice-300M 权重文件夹,放在CosyVoice目录下
或者通过git方式获取
# git模型下载,请确保已安装git lfs git clone https://www.modelscope.cn/iic/CosyVoice-300M.git CosyVoice/CosyVoice-300M -
文件结构如下:
📁 CosyVoice/ ├── 📁 CosyVoice/ | |── 📁 CosyVoice的源码文件 # CosyVoice其他的源码文件,此处不一一列举 │ ├── 📁 CosyVoice-300M/ # 权重文件 │ ├── 📄 infer.py # 推理脚本 │ └── 📄 modify_onnx.py # 模型转换脚本 ├── 📄 diff_300I.patch └── 📄 diff_800I.patch
模型推理
1 模型转换
模型权重中提供了 flow.decoder.estimator.fp32.onnx和speech_tokenizer_v1.onnx两个onnx模型,对其进行结构修改后使用ATC工具将.onnx文件转为离线推理模型.om文件。
-
修改onnx模型结构
python3 modify_onnx.py ${CosyVoice-300M}CosyVoice-300M是onnx模型所在权重文件夹,其他权重请自行更改权重文件名。执行该命令后会在CosyVoice-300M目录下生成修改后的onnx文件speech_token_md.onnx
-
使用
ATC工具将ONNX模型转为OM模型配置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh执行ATC命令,将利用npu-smi info命令获取的芯片型号填入${soc_version}中
atc --framework=5 --soc_version=${soc_version} --model ./${CosyVoice-300M}/speech_token_md.onnx --output ./${CosyVoice-300M}/speech --input_shape="feats:1,128,-1;feats_length:1" atc --framework=5 --soc_version=${soc_version} --model ./${CosyVoice-300M}/flow.decoder.estimator.fp32.onnx --output ./${CosyVoice-300M}/flow --input_shape="x:2,80,-1;mask:2,1,-1;mu:2,80,-1;t:2;spks:2,80;cond:2,80,-1"在权重目录CosyVoice-300M下会生成两个om模型, 分别为 speech_{arch}.om和flow_{arch}.om
注:模型{arch}后缀为当前使用的CPU操作系统。
2 开始推理验证
-
首先移动infer.py文件到CosyVoice目录下
-
设置环境变量,执行推理命令
# 1. 指定使用NPU ID,默认为0 export ASCEND_RT_VISIBLE_DEVICES=0 # 2. 设置环境变量 export PYTHONPATH=third_party/Matcha-TTS:$PYTHONPATH # 3. 执行推理脚本 python3 infer.py --model_path=${CosyVoice-300M}- --model_path: 权重路径
- --warm_up_times:warm up次数,默认为2
- --infer_count:循环推理次数,默认为10
在推理开始后,首先会默认执行warm_up,目的是执行首次编译,首次编译时间较长,在warm_up结束后,会执行推理操作,并将推理结果保存在'zero_shot_result.wav'中,并打屏性能数据:实时率(rtf),指的是平均1s时长的音频需要多少时间处理。
3 性能
| 模型 | 芯片 | rtf(实时率) |
|---|---|---|
| cosyvoice | 800I A2 | 0.7s |
| cosyvoice | 300I DUO(单芯) | 2.0s |