linux so-vits-svc训练环境安装,训练和保存(au
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
查看磁盘占用
-
du -sh <目录路径>
:显示指定目录的总大小(以易读格式,如 KB、MB、GB 显示)。 -
du -h --max-depth=1 <目录路径>
:显示指定目录下一级目录或文件的大小(以易读格式显示)。 -
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