基于D910B 训练推理 GPT-SoVITS
【摘要】 基于D910B 训练推理 GPT-SoVITS
0.前提条件
0.1 登录机器
机器已开通,密码已获取,能通过ssh登录
0.2 检查NPU设备
NPU设备检查:运行npu-smi info命令,返回如下设备npu设备信息。NPU设备型号(Name列)是910B系列
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)