linux so-vits-svc训练环境安装,训练和保存(au

2023-04-03  本文已影响0人  mudssky

01.选择实例

可以随便选一个,然后扩容一下磁盘,我选择扩容150g,现在的价格是0.0066 元 gb/天,这样就是每天固定扣一块钱。

因为我已经提前准备好了数据集,包括切片,resample还有生成训练集配置文件,和生成hubert的步骤都在自己的电脑上完成了,然后zip分卷压缩。处理完的数据集有50gb左右。里面有5个角色,每个角色有3个版本。是我拆包了两个游戏得到的,这两个游戏是前后作的关系,算是增加数据集的量。

如果只训练一个角色,都没什么必要租gpu,除非数据量特别大,不然租感觉很浪费。自己的老显卡也能训练了。

这波数据集,处理了我一天多时间,从游戏里面拆包,写脚本分类,然后最花时间的是生成hubert的步骤,在我6800h的电脑了执行了有10个小时左右。然后zip分卷压缩。

一开始是需要搭建环境的,所以一开始直接关机,然后选择无卡开机,无卡开机就是不使用GPU资源开机,只有GPU的情况也可以用来演示,或者配一下环境。不占用GPU资源,现在是1小时0.1元。

我一开始搜了一下发现有别的大佬分享的镜像,不过最近一个还是一个月前的,而且它训练的采样率是48khz,我准备好的数据是44khz的,所以就没用那个。

02.安装环境

我一开始用的是这个项目 https://github.com/34j/so-vits-svc-fork ,因为svc-develop-team原仓库的说明文档上的内容,还有交互方面,还有就是项目依赖安装,对于第一次玩这种深度学习的人来说还是有点复杂的。

这个项目把操作都封装到命令行里了,而且依赖安装也比较容易,因为他可以通过pip命令一键安装了,而且还提供了whl文件。

原仓库的说明对于新手来说是不足的,比如数据预处理,这位34j大佬的仓库里面就说明了使用uvr分离人声,而且切片操作也封装了命令。

还有就是这个项目做了一个比较好用的gui,加了实时变声的功能。

原仓库虽然有webUI,但是说明文档没写,新手不知道,也就不会去用,我也是看了别人的视频在用,才发现是有webUI的

python 版本管理

安装环境的第一步就是安装python,服务器上提供的是python3.8版本,我自己电脑上的是3.9.13,为了保持一致,所以要安装不同版本的python

我首先就想到了用pyenv这个项目,

这里遇到的最大的问题是,autodl的服务器在国内,所以很难访问github,clone一个仓库都操作不了。所以这边安装折腾了我一段时间。

最后我还是放弃了。

第二个方法就是虚拟环境,因为我本地用的是pdm管理虚拟环境,结果发现pdm安装也不好安装。

第三个方案,就是我从本地直接拷贝过去。。。

最后发现最佳实践是用conda管理python环境。

其实我以前就知道这个工具,但是觉得很蠢,安装包大的一匹,所以装了一次以后就没有再装了。后面管理python版本也是用的pdm,我觉得pdm这种和npm比较相似的模式是更合理的。而且pdm有lock文件,是可以锁定软件包版本的。

svc 的仓库里面只有一个requirements.txt,这样容易出现安装不了一样环境的问题

最佳实践

vscode-remote

因为jupyter lab其实也不是很好用,还有那个从网页打开的终端,也挺难用的。

目前我认为vscode远程连接是最方便的,需要先安装Remote-SSH插件

conda管理python版本

直接用conda安装python版本

# 构建一个虚拟环境名为:my-env,Python版本为3.9.13
conda create -n my-env python=3.9.13    

# 更新bashrc中的环境变量
conda init bash && source /root/.bashrc
# 切换到创建的虚拟环境:my-env
conda activate my-env

# 验证
python

退出虚拟环境

conda deactivate your_env

删除虚拟环境

conda remove -n your_env --all
或
conda remove --name your_env --all

安装训练依赖

然后我们就可以在虚拟环境下安装

python -m pip install -U pip setuptools wheel
pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu117
pip install -U so-vits-svc-fork

也可以到release页面下载whl

pip install -r whlname.whl

有一个问题是自带的华为云镜像比较旧很多包没有,这一步我也折腾了挺久

我建议pip和conda换成清华的镜像

我后来才发现autodl有换镜像的操作,在autopanel上就能换,比较方便。

从github clone仓库

如果用官方的仓库,需要从github下载,但是国内服务器不好访问。

最好还是本地下载,打包zip传上去,这样比较方便,直接拖到vscode对应的目录就可以。

还有就是autodl官方提供了镜像加速,但是我没从帮助文档上找到毕业区A的加速地址。。。。

然后直接安装官方依赖。

pip install -r requirements

03.配置文件修改

主要是调一下batch_size和learning_rate

{
  "train": {
    "log_interval": 200,  //检查点保存步数
    "eval_interval": 800,//评估步数,隔多少步评估模型性能
    "seed": 1234,//模型初始化种子,如果训练效果不理想,可以换一个种子重新训练。不过训练过程中不能再修改
    "epochs": 10000,// 学习数据集的次数,10000是一个很高的数字,一般不用训练到10000次
    "learning_rate": 0.0004,//学习率,据说应该和bacth_size成比例调整
    "betas": [0.8, 0.99],
    "eps": 1e-9,
    "batch_size": 24,// 每次训练的数据的量,按照显存配置,8gb显存比如1070ti,可以设为6,24gb显存比如3090设为24,这样才能占满显存
    "fp16_run": false,//是否使用半精度训练,能提升训练速度,可能会影响训练质量
    "lr_decay": 0.999875,//学习率衰减率
    "segment_size": 10240,
    "init_lr_ratio": 1,
    "warmup_epochs": 0,//预热轮数,预热的轮数内学习率不会衰减
    "c_mel": 45,
    "c_kl": 1.0,
    "use_sr": true,
    "max_speclen": 512,
    "port": "8001",
    "keep_ckpts": 10 //保存的模型个数,超过的会在训练出新的模型后移除。因为可能训练途中有参数比较好的模型,如果不缺存储空间可以设为0,那样就不会删除。。。
  },
  "data": {
    "training_files": "filelists/44k/train.txt",
    "validation_files": "filelists/44k/val.txt",
    "max_wav_value": 32768.0,
    "sampling_rate": 44100,
    "filter_length": 2048,
    "hop_length": 512,
    "win_length": 2048,
    "n_mel_channels": 80,
    "mel_fmin": 0.0,
    "mel_fmax": 22050
  },
  "model": {
    "inter_channels": 192,
    "hidden_channels": 192,
    "filter_channels": 768,
    "n_heads": 2,
    "n_layers": 6,
    "kernel_size": 3,
    "p_dropout": 0.1,
    "resblock": "1",
    "resblock_kernel_sizes": [3, 7, 11],
    "resblock_dilation_sizes": [
      [1, 3, 5],
      [1, 3, 5],
      [1, 3, 5]
    ],
    "upsample_rates": [8, 8, 2, 2, 2],
    "upsample_initial_channel": 512,
    "upsample_kernel_sizes": [16, 16, 4, 4, 4],
    "n_layers_q": 3,
    "use_spectral_norm": false,
    "gin_channels": 256,
    "ssl_dim": 256,
    "n_speakers": 200
  },
  "spk": {
        ...
  }
}

04.参数

epoch

表示全部数据集训练的次数

iteration

一个epoch中 数据喂给神经网络的次数

batch_size

一次扔进神经的数据个数

iteration*batch_size等于总的数据个数。。。

batch_size增大,消耗的显存也会变大,

在音频都在切片10s以内的情况下,1070ti(8gb显存)设置为6合适,3090(24gb显存)设置为24合适

bacth_size调到不影响显存的最大值

步数的计算方式

步数 = 总轮数(epoch)*数据集大小/批大小(batch size)

05.linux常用操作

解压数据集

数据集通过网盘上传,下载到实例的数据盘里

unzip  file.zip

分卷压缩的情况,网上说的zip -F 我没执行成功过

可以直接

cat filename.z* > newfile.zip
unzip newfile.zip

powershell安装

linux的命令不是很会,安装powershell(至少自带的命令补全比bash方便),这样就比较习惯了。

# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Delete the the Microsoft repository GPG keys file 
rm packages-microsoft-prod.deb
# Update the list of packages after we added packages.microsoft.com
sudo apt-get update
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh

查看磁盘占用

  1. du -sh <目录路径>:显示指定目录的总大小(以易读格式,如 KB、MB、GB 显示)。
  2. du -h --max-depth=1 <目录路径>:显示指定目录下一级目录或文件的大小(以易读格式显示)。
  3. du -a <目录路径> | sort -n -r | head -n 10:显示指定目录下最大的10个文件的大小(以易读格式显示)。

例如,要查看当前目录下所有文件和子目录占用空间的情况,可以使用以下命令:

du -h --max-depth=1

如果要查看指定目录下最大的10个文件的大小,可以使用以下命令:

du -a <目录路径> | sort -n -r | head -n 10

python递归遍历目录的方法

import os
def recursive_scandir(path):
    for entry in os.scandir(path):
        if entry.is_file():
            print(entry.path)
        elif entry.is_dir():
            recursive_scandir(entry.path)

06.测试模型效果

还是用官方的webui比较方便,我懒得再开一个虚拟环境,

所以把模型下载下来,在本地查看效果了,用cpu推理会很慢,基本上4分钟的歌要推理4分钟的样子,用1070ti的话30秒之内能搞定。。。

据说训练到10000setp,就能有不错的效果

我实际测试也感觉是有点效果了,可能是数据集太多了,后面我训练到26000step(11 epoch)的时候测试了一下,感觉应该跟很多网上发的视频差不多水平了。用au把一些奇怪的音修一下应该就能有不错的成品了

07.遇到的问题

torch.load报错

可能是我之前解压完后,没有删除压缩包,后面训练的数据占满存储空间,导致,保存的时候文件损坏吧。(因为我本地也在用1070ti跑,运行了一个epoch,是正常的)

这里报的是读取*.spec.pt

最后我写了python脚本,遍历所有*.spec.pt,找到受损的文件删掉就okl

上一篇下一篇

猜你喜欢

热点阅读