美文网首页
linux so-vits-svc训练环境安装,训练和保存(au

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

作者: mudssky | 来源:发表于2023-04-03 04:20 被阅读0次

    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

    相关文章

      网友评论

          本文标题:linux so-vits-svc训练环境安装,训练和保存(au

          本文链接:https://www.haomeiwen.com/subject/ufddddtx.html