cosyvoice 推理适配昇腾

举报
昇腾适配 发表于 2024/11/21 09:15:52 2024/11/21
【摘要】 cosyvoice语音合成模型在语音合成领域在效果和性能上都是top级别的,本文介绍如何在昇腾上推理该模型

/********************如有任何疑问或者问题,可留言************************************/

0.前提条件

   0.1 登录机器

   机器已开通,密码已获取,能通过ssh登录

   0.2 检查NPU设备

   NPU设备检查:运行npu-smi info命令,返回npu设备信息。

   0.3 docker安装

#检查docker是否安装:docker -v,如如尚未安装,运行以下命令进行docker安装
yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64

#配置IP转发,用于容器内的网络访问:
sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf
sysctl -p | grep net.ipv4.ip_forward

  0.4 获取镜像

docker pull swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.0.rc3-py_3.9-hce_2.0.2406-aarch64-snt9b-20240910112800-2a95df3

  0.5 启动镜像

docker run -it --net=host \ 
--device=/dev/davinci0 \ 
--device=/dev/davinci1 \ 
--device=/dev/davinci2 \ 
--device=/dev/davinci3 \ 
--device=/dev/davinci4 \ 
--device=/dev/davinci5 \ 
--device=/dev/davinci6 \ 
--device=/dev/davinci7 \ 
--device=/dev/davinci_manager \ 
--device=/dev/devmm_svm \ 
--device=/dev/hisi_hdc \ 
--shm-size=32g \ 
-v /usr/local/dcmi:/usr/local/dcmi \ 
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ 
-v /var/log/npu/:/usr/slog \ 
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ 
-v ${work_dir}:${container_work_dir} \ 
--name ${container_name} \ 
${image_id}  \ 
/bin/bash
参数说明:
device=/dev/davinci0,..., --device=/dev/davinci7:挂载NPU设备,示例中挂载了8张卡davinci0~davinci7,可根据需要选择挂载卡数。
${work_dir}:${container_work_dir} 代表需要在容器中挂载宿主机的目录。宿主机和容器使用不同的文件系统,work_dir为宿主机中工作目录,目录下存放着训练所需代码、数据等文件。container_dir为要挂载到的容器中的目录。为方便两个地址可以相同。
shm-size:共享内存大小。
${container_name}:容器名称,进入容器时会用到,此处可以自己定义一个容器名称。
${image_id}:镜像ID,通过docker images查看刚拉取的镜像ID。
 
容器不能挂载到/home/ma-user目录,此目录为ma-user用户家目录。如果容器挂载到/home/ma-user下,拉起容器时会与基础镜像冲突,导致基础镜像不可用。
driver及npu-smi需同时挂载至容器。
不要将多个容器绑到同一个NPU上,会导致后续的容器无法正常使用NPU功能。

1. 推理验证

    1.1  安装推理依赖的三方库

             前提可访问公网

       1)下载CosyVoice代码

git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git
cd CosyVoice

           替换 requirements.txt如下

conformer==0.3.2
deepspeed==0.14.2; sys_platform == 'linux'
diffusers==0.27.2
gdown==5.1.0
gradio==4.32.2
grpcio==1.57.0
grpcio-tools==1.57.0
huggingface-hub==0.23.5
hydra-core==1.3.2
HyperPyYAML==1.2.2
inflect==7.3.1
librosa==0.10.2
lightning==2.2.4
matplotlib==3.7.5
modelscope==1.15.0
networkx==3.1
omegaconf==2.3.0
openai-whisper==20231117
protobuf==4.25
pydantic==2.7.0
rich==13.7.1
soundfile==0.12.1
torchaudio==2.1.0
tensorboard==2.14.0
uvicorn==0.30.0
wget==3.2
fastapi==0.111.0
fastapi-cli==0.0.4
transformers==4.37.1

     执行安装:

pip install –r requirements.txt

     2)安装openfst

wget https://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.8.3.tar.gz
tar –xf openfst-1.8.3.tar.gz
cd openfst-1.8.3
./configure --enable-grm
make -j 32 
sudo mkdir -p /usr/local/include/fst/
sudo make install
sudo chown -R ma-user:ma-group /usr/local/include/fst/
export LD_LIBRARY_PATH="/usr/local/lib/:$LD_LIBRARY_PATH"
cd ../

     3)安装pynini 和 WeTextProcessing,并更新urllib3

pip install pynini
pip install WeTextProcessing --no-deps
pip install importlib_resources
pip install --upgrade 'urllib3==1.26.7'

1.2 推理验证

  1)下载模型文件, 参考https://github.com/FunAudioLLM/CosyVoice 官网下载方式

   

    2)add third_party/Matcha-TTS to PYTHONPATH

export PYTHONPATH=$PYTHONPATH:third_party/Matcha-TTS

   3)修改cosyvoice/cli/model.py class CosyVoiceModel初始化时的device类型

self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') 
修改为:
self.device = 'npu'

    4) 推理代码

from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav
import torch_npu
import torchaudio

def main():
    cosyvoice = CosyVoice("./pretrained_models/CosyVoice-300M", load_onnx=False, fp16=True)
    prompt_speech_16k = load_wav('zero_shot_prompt.wav', 16000)

    for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k, stream=False)):
        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], 22050)

    for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k, stream=False)):
        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], 22050)

if __name__ == "__main__":
    torch_npu.npu.set_compile_mode(jit_compile=False)
    torch_npu.npu.config.allow_internal_format = False
    main()

5)推理结果

   

   同时会生成合成音频zero_shot_0.wav

    【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。