Fix: g2p process fails in PyTorch-independent environment
This commit is contained in:
@@ -26,6 +26,7 @@ from transformers import (
|
|||||||
|
|
||||||
from style_bert_vits2.constants import DEFAULT_BERT_MODEL_PATHS, Languages
|
from style_bert_vits2.constants import DEFAULT_BERT_MODEL_PATHS, Languages
|
||||||
from style_bert_vits2.logging import logger
|
from style_bert_vits2.logging import logger
|
||||||
|
from style_bert_vits2.nlp import onnx_bert_models
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@@ -84,9 +85,8 @@ def load_model(
|
|||||||
|
|
||||||
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
||||||
if pretrained_model_name_or_path is None:
|
if pretrained_model_name_or_path is None:
|
||||||
assert DEFAULT_BERT_MODEL_PATHS[
|
assert DEFAULT_BERT_MODEL_PATHS[language].exists(), \
|
||||||
language
|
f"The default {language.name} BERT model does not exist on the file system. Please specify the path to the pre-trained model." # fmt: skip
|
||||||
].exists(), f"The default {language.name} BERT model does not exist on the file system. Please specify the path to the pre-trained model."
|
|
||||||
pretrained_model_name_or_path = str(DEFAULT_BERT_MODEL_PATHS[language])
|
pretrained_model_name_or_path = str(DEFAULT_BERT_MODEL_PATHS[language])
|
||||||
|
|
||||||
# BERT モデルをロードし、辞書に格納して返す
|
# BERT モデルをロードし、辞書に格納して返す
|
||||||
@@ -151,9 +151,13 @@ def load_tokenizer(
|
|||||||
|
|
||||||
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
||||||
if pretrained_model_name_or_path is None:
|
if pretrained_model_name_or_path is None:
|
||||||
assert DEFAULT_BERT_MODEL_PATHS[
|
# ライブラリ利用時、特例的にこの状況で ONNX 版 BERT トークナイザーがロードされている場合はそのまま返す
|
||||||
language
|
## ONNX 版 BERT トークナイザー単独で g2p 処理を行うために必要 (各言語の g2p.py はこの関数に依存している)
|
||||||
].exists(), f"The default {language.name} BERT tokenizer does not exist on the file system. Please specify the path to the pre-trained model."
|
## 設計的には微妙だがこの方が差異を吸収できて手っ取り早い
|
||||||
|
if DEFAULT_BERT_MODEL_PATHS[language].exists() is False and onnx_bert_models.is_tokenizer_loaded(language): # fmt: skip
|
||||||
|
return onnx_bert_models.load_tokenizer(language)
|
||||||
|
assert DEFAULT_BERT_MODEL_PATHS[language].exists(), \
|
||||||
|
f"The default {language.name} BERT tokenizer does not exist on the file system. Please specify the path to the pre-trained model." # fmt: skip
|
||||||
pretrained_model_name_or_path = str(DEFAULT_BERT_MODEL_PATHS[language])
|
pretrained_model_name_or_path = str(DEFAULT_BERT_MODEL_PATHS[language])
|
||||||
|
|
||||||
# BERT トークナイザーをロードし、辞書に格納して返す
|
# BERT トークナイザーをロードし、辞書に格納して返す
|
||||||
@@ -205,6 +209,22 @@ def transfer_model(language: Languages, device: str) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def is_model_loaded(language: Languages) -> bool:
|
||||||
|
"""
|
||||||
|
指定された言語の BERT モデルがロード済みかどうかを返す。
|
||||||
|
"""
|
||||||
|
|
||||||
|
return language in __loaded_models
|
||||||
|
|
||||||
|
|
||||||
|
def is_tokenizer_loaded(language: Languages) -> bool:
|
||||||
|
"""
|
||||||
|
指定された言語の BERT トークナイザーがロード済みかどうかを返す。
|
||||||
|
"""
|
||||||
|
|
||||||
|
return language in __loaded_tokenizers
|
||||||
|
|
||||||
|
|
||||||
def unload_model(language: Languages) -> None:
|
def unload_model(language: Languages) -> None:
|
||||||
"""
|
"""
|
||||||
指定された言語の BERT モデルをアンロードする。
|
指定された言語の BERT モデルをアンロードする。
|
||||||
|
|||||||
@@ -72,9 +72,8 @@ def load_model(
|
|||||||
|
|
||||||
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
||||||
if pretrained_model_name_or_path is None:
|
if pretrained_model_name_or_path is None:
|
||||||
assert DEFAULT_ONNX_BERT_MODEL_PATHS[
|
assert DEFAULT_ONNX_BERT_MODEL_PATHS[language].exists(), \
|
||||||
language
|
f"The default {language.name} ONNX BERT model does not exist on the file system. Please specify the path to the pre-trained model." # fmt: skip
|
||||||
].exists(), f"The default {language.name} ONNX BERT model does not exist on the file system. Please specify the path to the pre-trained model."
|
|
||||||
pretrained_model_name_or_path = str(DEFAULT_ONNX_BERT_MODEL_PATHS[language])
|
pretrained_model_name_or_path = str(DEFAULT_ONNX_BERT_MODEL_PATHS[language])
|
||||||
|
|
||||||
# pretrained_model_name_or_path に Hugging Face のリポジトリ名が指定された場合 (aaaa/bbbb のフォーマットを想定):
|
# pretrained_model_name_or_path に Hugging Face のリポジトリ名が指定された場合 (aaaa/bbbb のフォーマットを想定):
|
||||||
@@ -148,9 +147,8 @@ def load_tokenizer(
|
|||||||
|
|
||||||
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
# pretrained_model_name_or_path が指定されていない場合はデフォルトのパスを利用
|
||||||
if pretrained_model_name_or_path is None:
|
if pretrained_model_name_or_path is None:
|
||||||
assert DEFAULT_ONNX_BERT_MODEL_PATHS[
|
assert DEFAULT_ONNX_BERT_MODEL_PATHS[language].exists(), \
|
||||||
language
|
f"The default {language.name} BERT tokenizer does not exist on the file system. Please specify the path to the pre-trained model." # fmt: skip
|
||||||
].exists(), f"The default {language.name} BERT tokenizer does not exist on the file system. Please specify the path to the pre-trained model."
|
|
||||||
pretrained_model_name_or_path = str(DEFAULT_ONNX_BERT_MODEL_PATHS[language])
|
pretrained_model_name_or_path = str(DEFAULT_ONNX_BERT_MODEL_PATHS[language])
|
||||||
|
|
||||||
# BERT トークナイザーをロードし、辞書に格納して返す
|
# BERT トークナイザーをロードし、辞書に格納して返す
|
||||||
@@ -175,9 +173,25 @@ def load_tokenizer(
|
|||||||
return __loaded_tokenizers[language]
|
return __loaded_tokenizers[language]
|
||||||
|
|
||||||
|
|
||||||
|
def is_model_loaded(language: Languages) -> bool:
|
||||||
|
"""
|
||||||
|
指定された言語の ONNX 版 BERT モデルがロード済みかどうかを返す。
|
||||||
|
"""
|
||||||
|
|
||||||
|
return language in __loaded_models
|
||||||
|
|
||||||
|
|
||||||
|
def is_tokenizer_loaded(language: Languages) -> bool:
|
||||||
|
"""
|
||||||
|
指定された言語の ONNX 版 BERT トークナイザーがロード済みかどうかを返す。
|
||||||
|
"""
|
||||||
|
|
||||||
|
return language in __loaded_tokenizers
|
||||||
|
|
||||||
|
|
||||||
def unload_model(language: Languages) -> None:
|
def unload_model(language: Languages) -> None:
|
||||||
"""
|
"""
|
||||||
指定された言語の BERT モデルをアンロードする。
|
指定された言語の ONNX 版 BERT モデルをアンロードする。
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
language (Languages): アンロードする BERT モデルの言語
|
language (Languages): アンロードする BERT モデルの言語
|
||||||
@@ -191,7 +205,7 @@ def unload_model(language: Languages) -> None:
|
|||||||
|
|
||||||
def unload_tokenizer(language: Languages) -> None:
|
def unload_tokenizer(language: Languages) -> None:
|
||||||
"""
|
"""
|
||||||
指定された言語の BERT トークナイザーをアンロードする。
|
指定された言語の ONNX 版 BERT トークナイザーをアンロードする。
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
language (Languages): アンロードする BERT トークナイザーの言語
|
language (Languages): アンロードする BERT トークナイザーの言語
|
||||||
@@ -205,7 +219,7 @@ def unload_tokenizer(language: Languages) -> None:
|
|||||||
|
|
||||||
def unload_all_models() -> None:
|
def unload_all_models() -> None:
|
||||||
"""
|
"""
|
||||||
すべての BERT モデルをアンロードする。
|
すべての ONNX 版 BERT モデルをアンロードする。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for language in list(__loaded_models.keys()):
|
for language in list(__loaded_models.keys()):
|
||||||
@@ -215,7 +229,7 @@ def unload_all_models() -> None:
|
|||||||
|
|
||||||
def unload_all_tokenizers() -> None:
|
def unload_all_tokenizers() -> None:
|
||||||
"""
|
"""
|
||||||
すべての BERT トークナイザーをアンロードする。
|
すべての ONNX 版 BERT トークナイザーをアンロードする。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for language in list(__loaded_tokenizers.keys()):
|
for language in list(__loaded_tokenizers.keys()):
|
||||||
|
|||||||
Reference in New Issue
Block a user