GPT-SoVITS 训练推理 适配昇腾

举报
昇腾适配 发表于 2024/11/22 16:46:00 2024/11/22
【摘要】 GPT-SoVITS 训练推理 适配昇腾

/**************************如有任何问题和疑问,请评论区留言*********************************/


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.2409-aarch64-snt9b-20241112192643-c45ac6b

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 \ 
-p 9874:9874 \
-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,可根据需要选择挂载卡数。
-p 9874:9874代表需要在宿主机和容器中绑定的端口。示例中,http server使用了9874端口。GPT-SoVITS 界面操作需要多个端口,可绑定多个端口,
比如-p 9880:9880 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874

${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.代码适配

下载代码:

https://github.com/RVC-Boss/GPT-SoVITS.git

代码修改

1.1 修改GPT_SoVITS/inference_webui.py 
    1)在import torch 下一行增加
          import torch_npu
from torch_npu.contrib import transfer_to_npu

    2)app.queue(concurrency_count=511, max_size=1022).launch 修改为:
          app.queue().launch

1.2 修改GPT_SoVITS/module/mel_processing.py
        1)删除 from librosa.util import normalize, pad_center, tiny
        
1.3 修改 GPT_SoVITS/prepare_datasets/1-get-text.py
           1)在import torch 下一行增加
          import torch_npu
          from torch_npu.contrib import transfer_to_npu

1.4 修改 GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py
           1)在import librosa,torch下一行增加
          import torch_npu
         from torch_npu.contrib import transfer_to_npu

1.5 修改 GPT_SoVITS/prepare_datasets/3-get-semantic.py
           1)在import logging, librosa, utils, torch下一行增加
          import torch_npu
from torch_npu.contrib import transfer_to_npu

1.6 修改 GPT_SoVITS/s1_train.py
                1)在import torch, platform下一行增加
                import torch_npu
                from torch_npu.contrib import transfer_to_npu

               2)process_group_backend="nccl" if platform.system() != "Windows" else "gloo"
               修改为:process_group_backend="hccl"

1.7 修改 GPT_SoVITS/s2_train.py
                1)在import torch下一行增加
                import torch_npu
                from torch_npu.contrib import transfer_to_npu

                2)backend = "gloo" if os.name == "nt" or not torch.cuda.is_available() else "hccl"
                修改为: backend = "hccl"

1.8 修改 config.py
                1)在import torch下一行增加
                import torch_npu
                from torch_npu.contrib import transfer_to_npu

1.11 修改 tools/uvr5/webui.py
                1)在import torch下一行增加
                import torch_npu
                from torch_npu.contrib import transfer_to_npu

                2)app.queue(concurrency_count=511, max_size=1022).launch 
               修改为:app.queue().launch

1.10 修改 webui.py
                1)在import json,yaml,warnings,torch下一行增加
                import torch_npu
                from torch_npu.contrib import transfer_to_npu

                 2)app.queue(concurrency_count=511, max_size=1022).launch 修改为:
                app.queue().launch

1.11 修改cuda.py
         路径:/home/ma-user/anaconda3/envs/PyTorch-2.1.0/lib/python3.9/site-packages/lightning_fabric/accelerators/cuda.py
         如果不是此路径可用find 命令查找,取 lightning_fabric/accelerators/cuda.py
         修改_check_cuda_matmul_precision函数中
               if not torch.cuda.is_available() or not _is_ampere_or_later(device):
         修改为:if not torch.cuda.is_available():
         备注:_is_ampere_or_later使用了torch.cuda.get_device_capability(device),但是npu不支持

2.1 启动服务

       python webui.py

      其他操作同GPU一样,在界面可操作


FAQ:

1.如果只有中文,可将GPT-SoVITS/GPT_SoVITS/text/cleaner.py

1)将 from text import chinese, japanese, cleaned_text_to_sequence, symbols, English

修改为:from text import chinese, cleaned_text_to_sequence, symbols

 

2)将language_module_map = {"zh": chinese, "ja": japanese, "en": english}

修改为:language_module_map = {"zh": chinese}

2. 如果有精度问题,可以尝试使用fp32

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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