一、创建云端实例

前往 AutoDL 官网,注册并登录账号,充值 10 块钱(因为 AutoDL 算力是按量计费的, 所以充更少也行,4090 算力大概 2块4角/小时,如果用总时长 1 分钟的素材进行训练,操作熟练的话其实大概只需要花费 1 块钱),然后前往控制台-容器实例,租用新实例。

选用 RTX 4090 的实例即可。内蒙地区有性价比更高的 A5000,但是资源太少了一般抢不到。

镜像使用社区镜像 RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official,选择最新版本即可,本文所选为 v9。

开机之前,先去注册登录阿里云盘,并下载手机客户端,之后要用到。开机之后就开始计费了,不用在这些操作上浪费钱。

创建后回到控制台,开机。开机后在实例列表的右侧打开 JupyterLab 和 AutoPanel。其中 JupyterLab 是用来跑代码和传文件的,AutoPanel 选择公网网盘,用阿里云盘手机客户端扫码登录好,是用于最后将训练好的模型转存到网盘的。

二、开启 WebUI

在 JupyterLab 命令行窗口执行下面的命令,打开执行输出的第二个公网 Web 网址即可进入 WebUI 界面。

echo {}> ~/GPT-SoVITS/i18n/locale/en_US.json && source activate GPTSoVits && cd ~/GPT-SoVITS/ && python webui.py

三、音频预处理(可选)

对音频进行降噪去回声等优化处理,可以使结果模型效果更好。

将本地的训练音频,在 JupyterLab 页面的左侧文件管理菜单中上传到 /GPT-SoVITS/output/uvr5_opt 目录中(使用 .wav 格式,如果源音频格式不对,可以先去在线转换一下格式),然后在 WebUI 界面勾选开启 UVR5-WebUI 复选框,JupyterLab 控制台中会打印出相应的公网地址,打开进去。

音频文件夹路径输入 /root/GPT-SoVITS/output/uvr5_opt,模型使用 HP2_all_vocals,导出文件格式勾选 .wav,然后点击转换按钮,等待转换完成。

转换完成后 uvr5_opt 目录下会有两个文件,删除 instrument 开头的文件,只保留 vacal 开头的人声文件。

回到 UVR5-WebUI 将模型切换为 onnx_dereverb_By_FoxJoy,再次进行转换。

转换完成后 uvr5_opt 目录下会多出两个文件,共有三个文件。只保留名字中带 main 的文件,将其余两个删除。

再次回到 UVR5-WebUI 将模型切换为 VR-DeEcho,转换,完成后只保留 uvr5_opt 中以 vocal_vocal_ 开头的文件,其余的删除。最终得到的音频就是降噪处理后的音频。

回到 WebUI,取消勾选 UVR5-WebUI 复选框以释放显存。

四、语音切分与标注

在 WebUI 的语音切分工具中填写输入路径为/root/GPT-SoVITS/output/uvr5_opt,也就是存放源音频的地方。然后直接点接开始语音切割。完成后,切分得到的音频会输出到 output/slicer_opt 目录中。

接下来,在中文批量离线 ASR 工具中填写输入文件夹路径为 /root/GPT-SoVITS/output/slicer_opt,也就是刚才切分的输出目录。使用达摩 ASR large zh 模型开始批量离线标注。完成后,标注文件会被输出到 output/asr_opt 目录。

随后对标注进行校准。这一步如果音频素材比较长的话,建议直接将 slicer_opt.list 下载到本地,然后关闭云实例,在本地打开 list 文件进行校准,校准好后开机上传回去。主要检查是否有语音识别错误,以及添加或修改标点以优化停顿处。

五、云端训练

5.1 训练集格式化

来到 WebUI 的 GPT-SoVITS-TTS 选卡,输入本次要训练的自定义模型名称。对于 4090 和 A5000 而言,显存都是 24 GB,训练配置与本文保持一致即可。

文本标注文件输入 /root/GPT-SoVITS/output/asr_opt/slicer_opt.list

训练集音频目录输入/root/GPT-SoVITS/output/slicer_opt

随后点击一键三连按钮,开始训练,等待训练完成。

5.2 微调训练

来到微调训练选卡,SoVIST 训练不需要修改参数,直接开启 SoVIST 训练,等待训练完成。

然后,在 GPT 训练部分,勾选开启 dpo 训练选项,并将 batch_size 降低到 6,其他保持默认。点击开启 GPT 训练,等待训练完成。

至此,语音模型就训练好了。

六、云端推理

来到推理选卡,点击刷新模型路径按钮,然后在 GPT 模型列表 和 SoVITS 模型列表中分别选择刚才训练得到的模型,模型名称后面的数字越大,训练的轮数越多,一般选择最大的即可。

勾选开启 TTS 推理 WebUI。回到 JupyterLab 的控制台,等待打印推理的前端地址,然后打开进入推理页面。

在推理页面中,分别确认好 GPT 模型 和 SoVITS 模型,然后上传一段参考音频并手动填写标注。参考音频会影响结果音频的音色和语气风格,只需确保是同一个人的声音即可,可以直接使用前面切分时得到的任一符合长度要求(3~10s)的音频。

在需要合成的文本框中,填写要生成的音频内容,点击合成语音,等待生成结果即可。

PS:不做任何修改,多次点击合成语音,每次生成的语音的语调都会有差别,所以可以多次生成,将每次生成的结果保存下来,选取最满意的效果来使用。

七、导出模型与本地推理

来到最开始在第一小节时打开的 AutoPanel 页面,扫码登录阿里云盘,进入你想要将模型转存到的目标目录(如果没创建目录,可以在阿里云盘客户端或者网页端新建),然后点击上传按钮。云端训练得到的模型有两个部分,分别位于 /root/GPT-SoVITS/GPT-weights/root/GPT-SoVITS/SoVITS-weights,分别上传你所需要的文件到云盘备份即可。

完成推理测试,效果满意并备份好模型后,如果不需要再在云端进行推理的话,就可以尽快在控制台将云实例关机了,避免持续扣费。实例关机后,一定时间内数据不会被删除,所以规定时间内下再开机所有的数据也都在的。

如果需要在本地推理,只需将对应的模型文件下载到本地,放置到本地的 GTP-SoVITS 项目的相应目录下,然后在本地开启 WebUI,进入推理页面刷新模型列表后使用即可。同理,如果后续创建了新的云实例(或者长时间未开机,原实例数据已经被释放了),也可以将要推理的模型上传到新的云实例的对应模型模型目录下,然后直接推理即可,还是非常方便的。

八、小结

通过 AutoDL + GPT-SoVITS 的方式实现声音克隆,既不像 Google 的 Colab,免费用量非常有限,数据很容易被释放,同时付费价格也很高,就算付费了 Pro 都不一定能用得尽兴,也不需要自己本地有非常强悍而昂贵的显卡去支持训练。如果熟练操作流程,每训练一个效果还不错的语音模型只需要 1 块钱左右,推理由于步骤更加简单且速度更快,成本更是极低,在当下可以说是性价比极高且极其简单便捷的选择了。