so-vits-svc for openi
这个仓库将介绍如何使用openi的so-vits-svc镜像进行训练与推理
使用前必读:
如何使用:
在创建云脑时填写以下镜像链接
192.168.242.22:443/default-workspace/fccb038c23234b9e80105d4ccd152117/image:so-vits-svc-4.1_ZS
关于集群的介绍
- 智算集群的调试任务是T4 15G,V100S 32G与A100 40G(均单次最长运行4小时)
- 如使用调试任务时间到了需要重新开机继续训练
- 智算集群的训练任务是V100S 32G与A100 40G
关于调试任务与训练任务的差别
- 调试任务有jupyterlab,有交互式界面,训练任务是封闭式的
- 训练任务只能开始提交一次指令,需要自行配置训练代码,或者配置jupyterlab
- 调试任务限时4小时,训练任务不限时
关于镜像的介绍
- 两个集群的镜像均已配置好环境与程序,程序存放在
/root/so-vits-svc
- 输入下列命令便于操作(su后可以tab补全) (JupyterLab左侧的文件区对应的是/code目录)
su
mv /root/so-vits-svc /tmp/code
如何使用这个镜像训练so-vits-svc模型
Step.1 切片上传数据集
dataset_raw
├───speaker0
│ ├───xxx1-xxx1.wav
│ ├───...
│ └───Lxx-0xx8.wav
└───speaker1
├───xx2-0xxx2.wav
├───...
└───xxx7-xxx007.wav
- 推荐:将数据集打包上传到openi并挂载,数据集将被挂载在
/dataset
,可以使用以下命令进行移动并解压
- 建议:小于1G打包成
zip
文件,大于1G打包成tar.gz
文件
cp /tmp/dataset/* /tmp/code/so-vits-svc/dataset_raw/
cd /tmp/code/so-vits-svc/dataset_raw/
unzip ./*.zip
tar -xvf ./*.tar.gz
rm ./*.zip
rm ./*.tar.gz
cd ..
Step.2 预处理
Step.2.1 重采样音频至44.1k
python3 resample.py
以上这行代码包含响度匹配,有可能损失音质,如果已经进行过响度匹配,可以执行下面这行跳过响度匹配
python3 resample.py --skip_loudnorm
Step.2.2 自动划分训练集、验证集,以及生成配置文件
python3 preprocess_flist_config.py --speech_encoder vec768l12
响度嵌入可以使输出音频的响度匹配推理输入音频的响度 响度嵌入对素材质量要求较高,若使用响度嵌入,需要使用下面这行指令:
python3 preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug
此时可以在生成的 config.json
与 diffusion.yaml
修改部分参数
config.json
-
keep_ckpts
:训练时保留最后几个模型,0
为保留所有,默认只保留最后3
个,根据本人实测,本平台可以开到25不报错,不建议更大
-
batch_size
:单次处理的数据量。较大的 batch size 可以利用硬件资源并行计算,加快训练速度。因为 GPU 等硬件设备在处理大规模矩阵运算时效率更高。但是,更大的 batchsize 会导致显存占用增加,超出硬件所能承受的范围便会出现 Cuda out of memory
关于设置Batch size的建议,使用T4 15G时不建议超过15,使用V100S 32G时不建议超过35,使用A100 40G时不建议超过46
-
learning_rate
: 默认0.0001,可适当调大,加快模型收敛速度,bs15可设置成0.00015,bs35时可设置成0.000235,bs46可设置成0.00028
-
fp16_run
:是否启用半精度计算,默认False,打开可加快模型训练速度 (fp16大概能快30-55%,bf16大概能快3-8%)。
-
half_type
:默认fp16,如果是A100可使用BF16,V100S和T4不支持BF16 (不建议使用BF16!)
BF16 相比 FP16 没那么容易 NaN,但是损失精度比FP16更严重 (经实测,本平台提供的A100跑BF16的速度和FP32不相上下,不建议使用,起不到加速作用)
FP16 相比 FP32/BF16 更容易 NaN,但是精度比 BF16 高,对比 FP32 也损失不多
diffusion.yaml
Step.2.3 生成 hubert 与 f0
python3 preprocess_hubert_f0.py --f0_predictor rmvpe --use_diff --num_processes 3
f0_predictor 建议在以下几个中选择
crepe
rmvpe
fcpe
rmvpe音质等多方面综合最好;fcpe最快,同时音质不输crepe;crepe对于嘈杂音频处理稍好,个人推荐rmvpe
num_processes是处理线程数,2比1略快
ps.1.A100算力使用双线程RMVPE处理3小时音频大约需要20分钟,可以估算一下
ps.2.如果卡在100%超过2分钟,例如以下所示,可以Ctrl+C
强行结束
Preprocessing ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 100% 0:00:01 *Elapsed 0:59:57
Step.3 训练
Step.3.1 主模型训练
python3 train.py -c configs/config.json -m 44k
推理使用的模型将输出在/logs/44k
Step.3.2 浅扩散模型的训练 (可选)
这个模型主要用于消除电音,如果主模型训练的已经足够满意了,可以不训练
python3 train_diff.py -c configs/diffusion.yaml
浅扩散模型将输出在/logs/44k/diffusion
Step.3.2.b 训练1000步完整扩散模型 (可选)
- 镜像中包含了sovits主模型的底模和100步浅扩散的底模
如需训练1000步完整扩散模型,需要挂载本项目的模型仓库中的完整扩散底模并先执行以下代码
rm /tmp/code/so-vits-svc/logs/44k/diffusion/model_0.pt
cp /pretrainmodel/model_0.pt /tmp/code/so-vits-svc/logs/44k/diffusion
Step.3.3 使用tensorboard查看模型loss曲线 (可选)
tensorboard --logdir /tmp/code/so-vits-svc/logs/44k --host 0.0.0.0
以上步骤用于启动tensorboard,如果要使用外网访问需要改动./frp/frpc.ini
,并新开个终端执行以下代码启动内网穿透服务
su
cd /tmp/code/so-vits-svc/frp
chmod 777 ./frpc
./frpc -c ./frpc.ini
Step.3.4 聚类模型训练 (可选)
这个模型主要用于减小音色泄露,使得模型训练出来更像目标的音色,但会使咬字稍差
python3 cluster/train_cluster.py --gpu
聚类模型将输出为/logs/44k/kmeans_10000.pt
Step.3.5 压缩模型 (可选)
这一步是将模型文件中继续训练所需的部分移除,可以将大小缩小至约1/3
例:
python3 compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="logs/44k/release.pth"
如何使用这个镜像推理出音频
a.使用inference_main.py
指令推理
例:
python3 inference_main.py -m "logs/44k/G_74000.pth" -c "configs/config.json" -n "input.wav" -t 0 -f0p rmvpe -s "nahida" -cr 0.3 -shd -dm "logs/44k/diffusion/model_26000.pt" -dc "configs/diffusion.yaml" -ks 50
必填部分:
-m
| --model_path
:模型路径
-c
| --config_path
:配置文件路径
-n
| --clean_names
:wav 文件名列表,放在 raw 文件夹下
-t
| --trans
:音高调整,支持正负(半音)
-s
| --spk_list
:合成目标说话人名称
可选部分:
-cl
| --clip
:音频强制切片,默认 0 为自动切片,单位为秒/s
-f0p
| --f0_predictor
:选择 F0 预测器,建议可选 crepe
,rmvpe
,fcpe
, 默认为pm
-a
| --auto_predict_f0
:语音转换自动预测音高,转换歌声时不要打开这个会严重跑调,转换说话内容打开效果有可能更好
-cm
| --cluster_model_path
:聚类模型或特征检索索引路径,留空则自动设为各方案模型的默认路径,如果没有训练聚类或特征检索则随便填
-cr
| --cluster_infer_ratio
:聚类方案或特征检索占比,范围 0-1,若没有训练聚类模型或特征检索则默认 0 即可,经实测0.2-0.5效果相对比较好
-shd
| --shallow_diffusion
:是否使用浅层扩散,使用后可解决一部分电音问题,默认关闭
浅扩散设置:
-dm
| --diffusion_model_path
:扩散模型路径
-dc
| --diffusion_config_path
:扩散模型配置文件路径
-ks
| --k_step
:扩散步数,越大越接近扩散模型的结果,默认 100
b.使用webUI.py
网页端推理
python3 webUI.py
以上步骤用于启动webUI,如果要使用外网访问需要改动./frp/frpc.ini
,并新开个终端执行以下代码启动内网穿透服务
cd /tmp/code/so-vits-svc/frp
chmod 777 ./frpc
./frpc -c ./frpc.ini