基于D910B训练vits

举报
昇腾适配 发表于 2024/11/22 14:44:52 2024/11/22
【摘要】 基于D910B训练vits

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

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 \ 
-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

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

全部回复

上滑加载中

设置昵称

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

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

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