vits训练适配昇腾
【摘要】 基于vits训练适配昇腾
/**************************如有任何问题和疑问,请评论区留言*********************************/
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 \
-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.启动训练
以训练LJ Speech为例,前提:下载好训练代码,准备好数据集,将软件升级包挂载到容器中(建议将数据集、代码、软件包放在同一文件夹下挂载到容器)
下载代码:
https://github.com/jaywalnut310/vits
1.1 安装训练依赖的三方库
前提可访问公网
进入代码中requirements.txt所在目录
修改requirements.txt,用如下内容替换全部:
Cython
librosa==0.10.1
matplotlib
numpy
phonemizer
scipy
tensorboard
torchvision==0.16.0
Unidecode
执行pip install -r requirements.txt
1.2 安装 monotonic_align
cd monotonic_align
mkdir monotonic_align
python setup.py build_ext --inplace
1.3 修改脚本train.py
1)在第6行 import torch 下面,增加
import torch_npu
from torch_npu.contrib import transfer_to_npu
2)在第62行,backend='nccl' 修改为 backend='hccl'
3)第155行,y_hat.squeeze(1)修改为 y_hat.float().squeeze(1)
4)在 from torch.cuda.amp import autocast, GradScaler 下一行增加
from torch.nn.utils import clip_grad_norm_
5)将scaler.step(optim_d) 修改为:
grad_norm = clip_grad_norm_(net_d.parameters(), 50)
if torch.isfinite(grad_norm):
scaler.step(optim_d)
6)将 scaler.step(optim_g) 修改为:
grad_norm = clip_grad_norm_(net_g.parameters(), 50)
if torch.isfinite(grad_norm):
scaler.step(optim_g)
1.4 修改脚本mel_processing.py
1)第11行,删除 from librosa.util import normalize, pad_center, tiny
2)第66行,
spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
center=center, pad_mode='reflect', normalized=False, onesided=True)
修改为:
spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=False)
3)第78行
mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)
修改为:
mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)
4)第96行
mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)
修改为:
mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)
1.5 启动训练
python train.py -c configs/ljs_base.json -m ljs_base
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)