WIP:improve model selector (so-vits-svc40)
This commit is contained in:
parent
270ffb6459
commit
0bb660ab2f
@ -32,22 +32,36 @@
|
||||
],
|
||||
"modelSetting": [
|
||||
{
|
||||
"name": "modelUploader",
|
||||
"name": "modelUploaderv2",
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"showConfig": true,
|
||||
"showOnnx": false,
|
||||
"showPyTorch": true,
|
||||
"showCorrespondence": false,
|
||||
"showPyTorchCluster": true,
|
||||
"showPyTorchEnableCheckBox": true,
|
||||
"defaultEnablePyTorch": true
|
||||
"title": "Config(.json)",
|
||||
"acceptExtentions": ["json"],
|
||||
"fileKind": "soVitsSvc40Config"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "framework",
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"showFramework": true
|
||||
"title": "Model(.pth, .pt)",
|
||||
"acceptExtentions": ["pth", "pt"],
|
||||
"fileKind": "soVitsSvc40Model"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"title": "Cluster(.pth, .pt)",
|
||||
"acceptExtentions": ["pth", "pt"],
|
||||
"fileKind": "soVitsSvc40Cluster"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "modelUploadButtonRow2",
|
||||
"options": {}
|
||||
}
|
||||
],
|
||||
"lab": [],
|
||||
|
4
client/demo/dist/index.js
vendored
4
client/demo/dist/index.js
vendored
File diff suppressed because one or more lines are too long
@ -32,22 +32,36 @@
|
||||
],
|
||||
"modelSetting": [
|
||||
{
|
||||
"name": "modelUploader",
|
||||
"name": "modelUploaderv2",
|
||||
"options": {}
|
||||
},
|
||||
{
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"showConfig": true,
|
||||
"showOnnx": false,
|
||||
"showPyTorch": true,
|
||||
"showCorrespondence": false,
|
||||
"showPyTorchCluster": true,
|
||||
"showPyTorchEnableCheckBox": true,
|
||||
"defaultEnablePyTorch": true
|
||||
"title": "Config(.json)",
|
||||
"acceptExtentions": ["json"],
|
||||
"fileKind": "soVitsSvc40Config"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "framework",
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"showFramework": true
|
||||
"title": "Model(.pth, .pt)",
|
||||
"acceptExtentions": ["pth", "pt"],
|
||||
"fileKind": "soVitsSvc40Model"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "commonFileSelect",
|
||||
"options": {
|
||||
"title": "Cluster(.pth, .pt)",
|
||||
"acceptExtentions": ["pth", "pt"],
|
||||
"fileKind": "soVitsSvc40Cluster"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "modelUploadButtonRow2",
|
||||
"options": {}
|
||||
}
|
||||
],
|
||||
"lab": [],
|
||||
|
@ -42,7 +42,7 @@ export const PerformanceRow = (_props: PerformanceRowProps) => {
|
||||
}
|
||||
let execNext = true
|
||||
const updatePerformance = async () => {
|
||||
await appState.updatePerformance()
|
||||
await appState.updatePerformance!()
|
||||
if (execNext) {
|
||||
setTimeout(updatePerformance, 1000 * 2)
|
||||
}
|
||||
|
@ -14,6 +14,11 @@ export const Filekinds = {
|
||||
"mmvcv13Model": "mmvcv13Model",
|
||||
"mmvcv15Config": "mmvcv15Config",
|
||||
"mmvcv15Model": "mmvcv15Model",
|
||||
|
||||
"soVitsSvc40Config": "soVitsSvc40Config",
|
||||
"soVitsSvc40Model": "soVitsSvc40Model",
|
||||
"soVitsSvc40Cluster": "soVitsSvc40Cluster",
|
||||
|
||||
"ddspSvcModel": "ddspSvcModel",
|
||||
"ddspSvcModelConfig": "ddspSvcModelConfig",
|
||||
"ddspSvcDiffusion": "ddspSvcDiffusion",
|
||||
|
@ -29,6 +29,9 @@ export type FileUploadSetting = {
|
||||
mmvcv13Model: ModelData | null
|
||||
mmvcv15Config: ModelData | null
|
||||
mmvcv15Model: ModelData | null
|
||||
soVitsSvc40Config: ModelData | null
|
||||
soVitsSvc40Model: ModelData | null
|
||||
soVitsSvc40Cluster: ModelData | null
|
||||
|
||||
ddspSvcModel: ModelData | null
|
||||
ddspSvcModelConfig: ModelData | null
|
||||
@ -56,6 +59,9 @@ const InitialFileUploadSetting: FileUploadSetting = {
|
||||
mmvcv13Model: null,
|
||||
mmvcv15Config: null,
|
||||
mmvcv15Model: null,
|
||||
soVitsSvc40Config: null,
|
||||
soVitsSvc40Model: null,
|
||||
soVitsSvc40Cluster: null,
|
||||
|
||||
ddspSvcModel: null,
|
||||
ddspSvcModelConfig: null,
|
||||
@ -242,6 +248,15 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
alert("モデルファイルを指定する必要があります。")
|
||||
return
|
||||
}
|
||||
} else if (props.clientType == "so-vits-svc-40") {
|
||||
if (!fileUploadSettings[slot].soVitsSvc40Config) {
|
||||
alert("Configファイルを指定する必要があります。")
|
||||
return
|
||||
}
|
||||
if (!fileUploadSettings[slot].soVitsSvc40Model) {
|
||||
alert("モデルファイルを指定する必要があります。")
|
||||
return
|
||||
}
|
||||
} else if (props.clientType == "DDSP-SVC") {
|
||||
if (!fileUploadSettings[slot].ddspSvcModel) {
|
||||
alert("DDSPモデルを指定する必要があります。")
|
||||
@ -338,7 +353,10 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
fileUploadSetting.mmvcv13Config,
|
||||
fileUploadSetting.mmvcv13Model,
|
||||
fileUploadSetting.mmvcv15Config,
|
||||
fileUploadSetting.mmvcv15Model
|
||||
fileUploadSetting.mmvcv15Model,
|
||||
fileUploadSetting.soVitsSvc40Config,
|
||||
fileUploadSetting.soVitsSvc40Model,
|
||||
fileUploadSetting.soVitsSvc40Cluster
|
||||
].filter(x => { return x != null }) as ModelData[]
|
||||
for (let i = 0; i < normalModels.length; i++) {
|
||||
if (!normalModels[i].data) {
|
||||
@ -376,9 +394,12 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
trans: fileUploadSetting.defaultTune || 0,
|
||||
files: {
|
||||
mmvcv13Config: fileUploadSetting.mmvcv13Config?.filename || "",
|
||||
mmvcv13Models: fileUploadSetting.mmvcv13Model?.filename || "",
|
||||
mmvcv13Model: fileUploadSetting.mmvcv13Model?.filename || "",
|
||||
mmvcv15Config: fileUploadSetting.mmvcv15Config?.filename || "",
|
||||
mmvcv15Models: fileUploadSetting.mmvcv15Model?.filename || "",
|
||||
mmvcv15Model: fileUploadSetting.mmvcv15Model?.filename || "",
|
||||
soVitsSvc40Config: fileUploadSetting.soVitsSvc40Config?.filename || "",
|
||||
soVitsSvc40Model: fileUploadSetting.soVitsSvc40Model?.filename || "",
|
||||
soVitsSvc40Cluster: fileUploadSetting.soVitsSvc40Cluster?.filename || "",
|
||||
|
||||
ddspSvcModel: fileUploadSetting.ddspSvcModel?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModel?.filename : "",
|
||||
ddspSvcModelConfig: fileUploadSetting.ddspSvcModelConfig?.filename ? "ddsp_mod/" + fileUploadSetting.ddspSvcModelConfig?.filename : "",
|
||||
@ -456,6 +477,9 @@ export const useServerSetting = (props: UseServerSettingProps): ServerSettingSta
|
||||
mmvcv13Model: fileUploadSetting.mmvcv13Model ? { data: fileUploadSetting.mmvcv13Model.data, filename: fileUploadSetting.mmvcv13Model.filename } : null,
|
||||
mmvcv15Config: fileUploadSetting.mmvcv15Config ? { data: fileUploadSetting.mmvcv15Config.data, filename: fileUploadSetting.mmvcv15Config.filename } : null,
|
||||
mmvcv15Model: fileUploadSetting.mmvcv15Model ? { data: fileUploadSetting.mmvcv15Model.data, filename: fileUploadSetting.mmvcv15Model.filename } : null,
|
||||
soVitsSvc40Config: fileUploadSetting.soVitsSvc40Config ? { data: fileUploadSetting.soVitsSvc40Config.data, filename: fileUploadSetting.soVitsSvc40Config.filename } : null,
|
||||
soVitsSvc40Model: fileUploadSetting.soVitsSvc40Model ? { data: fileUploadSetting.soVitsSvc40Model.data, filename: fileUploadSetting.soVitsSvc40Model.filename } : null,
|
||||
soVitsSvc40Cluster: fileUploadSetting.soVitsSvc40Cluster ? { data: fileUploadSetting.soVitsSvc40Cluster.data, filename: fileUploadSetting.soVitsSvc40Cluster.filename } : null,
|
||||
|
||||
ddspSvcModel: fileUploadSetting.ddspSvcModel ? { data: fileUploadSetting.ddspSvcModel.data, filename: fileUploadSetting.ddspSvcModel.filename } : null,
|
||||
ddspSvcModelConfig: fileUploadSetting.ddspSvcModelConfig ? { data: fileUploadSetting.ddspSvcModelConfig.data, filename: fileUploadSetting.ddspSvcModelConfig.filename } : null,
|
||||
|
@ -67,7 +67,7 @@ class MMVCv13:
|
||||
self.settings.configFile = params["files"]["mmvcv13Config"]
|
||||
self.hps = get_hparams_from_file(self.settings.configFile)
|
||||
|
||||
modelFile = params["files"]["mmvcv13Models"]
|
||||
modelFile = params["files"]["mmvcv13Model"]
|
||||
if modelFile.endswith(".onnx"):
|
||||
self.settings.pyTorchModelFile = None
|
||||
self.settings.onnxModelFile = modelFile
|
||||
|
@ -75,7 +75,7 @@ class MMVCv15:
|
||||
self.settings.configFile = params["files"]["mmvcv15Config"]
|
||||
self.hps = get_hparams_from_file(self.settings.configFile)
|
||||
|
||||
modelFile = params["files"]["mmvcv15Models"]
|
||||
modelFile = params["files"]["mmvcv15Model"]
|
||||
if modelFile.endswith(".onnx"):
|
||||
self.settings.pyTorchModelFile = None
|
||||
self.settings.onnxModelFile = modelFile
|
||||
|
@ -56,8 +56,8 @@ class SoVitsSvc40Settings:
|
||||
clusterInferRatio: float = 0.1
|
||||
|
||||
framework: str = "PyTorch" # PyTorch or ONNX
|
||||
pyTorchModelFile: str = ""
|
||||
onnxModelFile: str = ""
|
||||
pyTorchModelFile: str | None = ""
|
||||
onnxModelFile: str | None = ""
|
||||
configFile: str = ""
|
||||
|
||||
speakers: dict[str, int] = field(default_factory=lambda: {})
|
||||
@ -84,13 +84,20 @@ class SoVitsSvc40:
|
||||
|
||||
# def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None):
|
||||
def loadModel(self, props: LoadModelParams):
|
||||
self.settings.configFile = props.files.configFilename
|
||||
params = props.params
|
||||
self.settings.configFile = params["files"]["soVitsSvc40Config"]
|
||||
self.hps = utils.get_hparams_from_file(self.settings.configFile)
|
||||
self.settings.speakers = self.hps.spk
|
||||
|
||||
self.settings.pyTorchModelFile = props.files.pyTorchModelFilename
|
||||
self.settings.onnxModelFile = props.files.onnxModelFilename
|
||||
clusterTorchModel = props.files.clusterTorchModelFilename
|
||||
modelFile = params["files"]["soVitsSvc40Model"]
|
||||
if modelFile.endswith(".onnx"):
|
||||
self.settings.pyTorchModelFile = None
|
||||
self.settings.onnxModelFile = modelFile
|
||||
else:
|
||||
self.settings.pyTorchModelFile = modelFile
|
||||
self.settings.onnxModelFile = None
|
||||
|
||||
clusterTorchModel = params["files"]["soVitsSvc40Cluster"]
|
||||
|
||||
content_vec_path = self.params.content_vec_500
|
||||
content_vec_onnx_path = self.params.content_vec_500_onnx
|
||||
@ -103,10 +110,11 @@ class SoVitsSvc40:
|
||||
content_vec_path = hubert_base_path
|
||||
|
||||
if content_vec_onnx_on is True:
|
||||
ort_options = onnxruntime.SessionOptions()
|
||||
ort_options.intra_op_num_threads = 8
|
||||
providers, options = self.getOnnxExecutionProvider()
|
||||
self.content_vec_onnx = onnxruntime.InferenceSession(
|
||||
content_vec_onnx_path, providers=providers
|
||||
content_vec_onnx_path,
|
||||
providers=providers,
|
||||
provider_options=options,
|
||||
)
|
||||
else:
|
||||
models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task(
|
||||
@ -141,56 +149,52 @@ class SoVitsSvc40:
|
||||
|
||||
# ONNXモデル生成
|
||||
if self.settings.onnxModelFile is not None:
|
||||
ort_options = onnxruntime.SessionOptions()
|
||||
ort_options.intra_op_num_threads = 8
|
||||
providers, options = self.getOnnxExecutionProvider()
|
||||
self.onnx_session = onnxruntime.InferenceSession(
|
||||
self.settings.onnxModelFile, providers=providers
|
||||
self.settings.onnxModelFile,
|
||||
providers=providers,
|
||||
provider_options=options,
|
||||
)
|
||||
# input_info = self.onnx_session.get_inputs()
|
||||
# for i in input_info:
|
||||
# print("input", i)
|
||||
# output_info = self.onnx_session.get_outputs()
|
||||
# for i in output_info:
|
||||
# print("output", i)
|
||||
return self.get_info()
|
||||
|
||||
def update_settings(self, key: str, val: int | float | str):
|
||||
if key == "onnxExecutionProvider" and self.onnx_session is not None:
|
||||
if val == "CUDAExecutionProvider":
|
||||
if self.settings.gpu < 0 or self.settings.gpu >= self.gpu_num:
|
||||
self.settings.gpu = 0
|
||||
provider_options = [{"device_id": self.settings.gpu}]
|
||||
self.onnx_session.set_providers(
|
||||
providers=[val], provider_options=provider_options
|
||||
)
|
||||
if hasattr(self, "content_vec_onnx"):
|
||||
self.content_vec_onnx.set_providers(
|
||||
providers=[val], provider_options=provider_options
|
||||
)
|
||||
else:
|
||||
self.onnx_session.set_providers(providers=[val])
|
||||
if hasattr(self, "content_vec_onnx"):
|
||||
self.content_vec_onnx.set_providers(providers=[val])
|
||||
elif key == "onnxExecutionProvider" and self.onnx_session is None:
|
||||
print("Onnx is not enabled. Please load model.")
|
||||
def getOnnxExecutionProvider(self):
|
||||
if self.settings.gpu >= 0:
|
||||
return ["CUDAExecutionProvider"], [{"device_id": self.settings.gpu}]
|
||||
elif "DmlExecutionProvider" in onnxruntime.get_available_providers():
|
||||
return ["DmlExecutionProvider"], []
|
||||
else:
|
||||
return ["CPUExecutionProvider"], [
|
||||
{
|
||||
"intra_op_num_threads": 8,
|
||||
"execution_mode": onnxruntime.ExecutionMode.ORT_PARALLEL,
|
||||
"inter_op_num_threads": 8,
|
||||
}
|
||||
]
|
||||
|
||||
def isOnnx(self):
|
||||
if self.settings.onnxModelFile is not None:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
elif key in self.settings.intData:
|
||||
|
||||
def update_settings(self, key: str, val: int | float | str):
|
||||
if key in self.settings.intData:
|
||||
val = int(val)
|
||||
setattr(self.settings, key, val)
|
||||
if (
|
||||
key == "gpu"
|
||||
and val >= 0
|
||||
and val < self.gpu_num
|
||||
and self.onnx_session is not None
|
||||
):
|
||||
providers = self.onnx_session.get_providers()
|
||||
print("Providers:", providers)
|
||||
if "CUDAExecutionProvider" in providers:
|
||||
provider_options = [{"device_id": self.settings.gpu}]
|
||||
|
||||
if key == "gpu" and self.isOnnx():
|
||||
providers, options = self.getOnnxExecutionProvider()
|
||||
if self.onnx_session is not None:
|
||||
self.onnx_session.set_providers(
|
||||
providers=["CUDAExecutionProvider"],
|
||||
provider_options=provider_options,
|
||||
providers=providers,
|
||||
provider_options=options,
|
||||
)
|
||||
if self.content_vec_onnx is not None:
|
||||
self.content_vec_onnx.set_providers(
|
||||
providers=providers,
|
||||
provider_options=options,
|
||||
)
|
||||
|
||||
elif key in self.settings.floatData:
|
||||
setattr(self.settings, key, float(val))
|
||||
elif key in self.settings.strData:
|
||||
@ -441,7 +445,7 @@ class SoVitsSvc40:
|
||||
return result
|
||||
|
||||
def inference(self, data):
|
||||
if self.settings.framework == "ONNX":
|
||||
if self.isOnnx():
|
||||
audio = self._onnx_inference(data)
|
||||
else:
|
||||
audio = self._pyTorch_inference(data)
|
||||
|
Loading…
x
Reference in New Issue
Block a user