From ec7ec370ef3dd08454c6e41364a3dbe7be4ed797 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:30:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AE=AD=E5=AE=8C=E6=A8=A1=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=B7=E6=96=B0=E6=A8=A1=E5=9E=8B=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Automatically refresh the model list after training the model. --- webui.py | 86 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/webui.py b/webui.py index e229b216..ef4800c6 100644 --- a/webui.py +++ b/webui.py @@ -197,7 +197,7 @@ def set_default(): else: default_sovits_epoch = 2 default_sovits_save_every_epoch = 1 - max_sovits_epoch = 50 # 40 # 3 + max_sovits_epoch = 20 # 40 # 3 max_sovits_save_every_epoch = 10 # 10 # 3 default_batch_size = max(1, default_batch_size) @@ -589,7 +589,6 @@ def close_denoise(): p_train_SoVITS = None process_name_sovits = i18n("SoVITS训练") - def open1Ba( batch_size, total_epoch, @@ -642,22 +641,23 @@ def open1Ba( yield ( process_info(process_name_sovits, "opened"), {"__type__": "update", "visible": False}, - {"__type__": "update", "visible": True}, + {"__type__": "update", "visible": True},{"__type__": "update"},{"__type__": "update"} ) print(cmd) p_train_SoVITS = Popen(cmd, shell=True) p_train_SoVITS.wait() p_train_SoVITS = None + SoVITS_dropdown_update, GPT_dropdown_update = change_choices() yield ( process_info(process_name_sovits, "finish"), {"__type__": "update", "visible": True}, - {"__type__": "update", "visible": False}, + {"__type__": "update", "visible": False},SoVITS_dropdown_update,GPT_dropdown_update ) else: yield ( process_info(process_name_sovits, "occupy"), {"__type__": "update", "visible": False}, - {"__type__": "update", "visible": True}, + {"__type__": "update", "visible": True},{"__type__": "update"},{"__type__": "update"} ) @@ -726,22 +726,23 @@ def open1Bb( yield ( process_info(process_name_gpt, "opened"), {"__type__": "update", "visible": False}, - {"__type__": "update", "visible": True}, + {"__type__": "update", "visible": True},{"__type__": "update"},{"__type__": "update"} ) print(cmd) p_train_GPT = Popen(cmd, shell=True) p_train_GPT.wait() p_train_GPT = None + SoVITS_dropdown_update, GPT_dropdown_update = change_choices() yield ( process_info(process_name_gpt, "finish"), {"__type__": "update", "visible": True}, - {"__type__": "update", "visible": False}, + {"__type__": "update", "visible": False},SoVITS_dropdown_update,GPT_dropdown_update ) else: yield ( process_info(process_name_gpt, "occupy"), {"__type__": "update", "visible": False}, - {"__type__": "update", "visible": True}, + {"__type__": "update", "visible": True},{"__type__": "update"},{"__type__": "update"} ) @@ -1719,7 +1720,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: label=i18n("文本模块学习率权重"), value=0.4, visible=True if version not in v3v4set else False, - ) # v3 not need + ) # v3v4 not need lora_rank = gr.Radio( label=i18n("LoRA秩"), value="32", @@ -1833,40 +1834,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: with gr.Row(): info1Bb = gr.Textbox(label=process_info(process_name_gpt, "info")) - button1Ba_open.click( - open1Ba, - [ - batch_size, - total_epoch, - exp_name, - text_low_lr_rate, - if_save_latest, - if_save_every_weights, - save_every_epoch, - gpu_numbers1Ba, - pretrained_s2G, - pretrained_s2D, - if_grad_ckpt, - lora_rank, - ], - [info1Ba, button1Ba_open, button1Ba_close], - ) button1Ba_close.click(close1Ba, [], [info1Ba, button1Ba_open, button1Ba_close]) - button1Bb_open.click( - open1Bb, - [ - batch_size1Bb, - total_epoch1Bb, - exp_name, - if_dpo, - if_save_latest1Bb, - if_save_every_weights1Bb, - save_every_epoch1Bb, - gpu_numbers1Bb, - pretrained_s1, - ], - [info1Bb, button1Bb_open, button1Bb_close], - ) button1Bb_close.click(close1Bb, [], [info1Bb, button1Bb_open, button1Bb_close]) with gr.TabItem("1C-" + i18n("推理")): @@ -1931,7 +1899,39 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: ], [tts_info, open_tts, close_tts], ) - + button1Ba_open.click( + open1Ba, + [ + batch_size, + total_epoch, + exp_name, + text_low_lr_rate, + if_save_latest, + if_save_every_weights, + save_every_epoch, + gpu_numbers1Ba, + pretrained_s2G, + pretrained_s2D, + if_grad_ckpt, + lora_rank, + ], + [info1Ba, button1Ba_open, button1Ba_close,SoVITS_dropdown,GPT_dropdown], + ) + button1Bb_open.click( + open1Bb, + [ + batch_size1Bb, + total_epoch1Bb, + exp_name, + if_dpo, + if_save_latest1Bb, + if_save_every_weights1Bb, + save_every_epoch1Bb, + gpu_numbers1Bb, + pretrained_s1, + ], + [info1Bb, button1Bb_open, button1Bb_close,SoVITS_dropdown,GPT_dropdown], + ) version_checkbox.change( switch_version, [version_checkbox], From 8b394a15bce8e1d85c0b11172442dbe7a6017ca2 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:31:12 +0800 Subject: [PATCH 2/2] support v4 parallel inference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持v4并行推理 --- GPT_SoVITS/inference_webui.py | 2 +- GPT_SoVITS/inference_webui_fast.py | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index c0af8607..3dcf2197 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -245,7 +245,7 @@ def change_sovits_weights(sovits_path, prompt_language=None, text_language=None) print(sovits_path,version, model_version, if_lora_v3) is_exist=is_exist_s2gv3 if model_version=="v3"else is_exist_s2gv4 if if_lora_v3 == True and is_exist == False: - info = "GPT_SoVITS/pretrained_models/s2Gv3.pth" + i18n("SoVITS V3 底模缺失,无法加载相应 LoRA 权重") + info = "GPT_SoVITS/pretrained_models/s2Gv3.pth" + i18n("SoVITS %s 底模缺失,无法加载相应 LoRA 权重"%model_version) gr.Warning(info) raise FileExistsError(info) dict_language = dict_language_v1 if version == "v1" else dict_language_v2 diff --git a/GPT_SoVITS/inference_webui_fast.py b/GPT_SoVITS/inference_webui_fast.py index 837a2e49..148f6bfe 100644 --- a/GPT_SoVITS/inference_webui_fast.py +++ b/GPT_SoVITS/inference_webui_fast.py @@ -195,19 +195,24 @@ def change_choices(): path_sovits_v3 = "GPT_SoVITS/pretrained_models/s2Gv3.pth" +path_sovits_v4 = "GPT_SoVITS/pretrained_models/gsv-v4-pretrained/s2Gv4.pth" +is_exist_s2gv3 = os.path.exists(path_sovits_v3) +is_exist_s2gv4 = os.path.exists(path_sovits_v4) pretrained_sovits_name = [ "GPT_SoVITS/pretrained_models/s2G488k.pth", "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s2G2333k.pth", - path_sovits_v3, + "GPT_SoVITS/pretrained_models/s2Gv3.pth", + "GPT_SoVITS/pretrained_models/gsv-v4-pretrained/s2Gv4.pth", ] pretrained_gpt_name = [ "GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt", "GPT_SoVITS/pretrained_models/gsv-v2final-pretrained/s1bert25hz-5kh-longer-epoch=12-step=369668.ckpt", "GPT_SoVITS/pretrained_models/s1v3.ckpt", + "GPT_SoVITS/pretrained_models/s1v3.ckpt", ] _ = [[], []] -for i in range(3): +for i in range(4): if os.path.exists(pretrained_gpt_name[i]): _[0].append(pretrained_gpt_name[i]) if os.path.exists(pretrained_sovits_name[i]): @@ -257,13 +262,15 @@ SoVITS_names, GPT_names = get_weights_names(GPT_weight_root, SoVITS_weight_root) from process_ckpt import get_sovits_version_from_path_fast - +v3v4set={"v3","v4"} def change_sovits_weights(sovits_path, prompt_language=None, text_language=None): global version, model_version, dict_language, if_lora_v3 version, model_version, if_lora_v3 = get_sovits_version_from_path_fast(sovits_path) # print(sovits_path,version, model_version, if_lora_v3) - if if_lora_v3 and not os.path.exists(path_sovits_v3): - info = path_sovits_v3 + i18n("SoVITS V3 底模缺失,无法加载相应 LoRA 权重") + is_exist=is_exist_s2gv3 if model_version=="v3"else is_exist_s2gv4 + path_sovits = path_sovits_v3 if model_version == "v3" else path_sovits_v4 + if if_lora_v3 == True and is_exist == False: + info = path_sovits + i18n("SoVITS %s 底模缺失,无法加载相应 LoRA 权重"%model_version) gr.Warning(info) raise FileExistsError(info) dict_language = dict_language_v1 if version == "v1" else dict_language_v2 @@ -281,7 +288,7 @@ def change_sovits_weights(sovits_path, prompt_language=None, text_language=None) else: text_update = {"__type__": "update", "value": ""} text_language_update = {"__type__": "update", "value": i18n("中文")} - if model_version == "v3": + if model_version in v3v4set: visible_sample_steps = True visible_inp_refs = False else: @@ -297,7 +304,7 @@ def change_sovits_weights(sovits_path, prompt_language=None, text_language=None) text_language_update, {"__type__": "update", "interactive": visible_sample_steps, "value": 32}, {"__type__": "update", "visible": visible_inp_refs}, - {"__type__": "update", "interactive": True if model_version != "v3" else False}, + {"__type__": "update", "interactive": True if model_version not in v3v4set else False}, {"__type__": "update", "value": i18n("模型加载中,请等待"), "interactive": False}, ) @@ -311,7 +318,7 @@ def change_sovits_weights(sovits_path, prompt_language=None, text_language=None) text_language_update, {"__type__": "update", "interactive": visible_sample_steps, "value": 32}, {"__type__": "update", "visible": visible_inp_refs}, - {"__type__": "update", "interactive": True if model_version != "v3" else False}, + {"__type__": "update", "interactive": True if model_version not in v3v4set else False}, {"__type__": "update", "value": i18n("合成语音"), "interactive": True}, ) with open("./weight.json") as f: