Add: Implement bert_models.transfer_model()

This commit is contained in:
tsukumi
2024-08-01 23:39:28 +09:00
parent 40d7ba9583
commit f84d2ed48b

View File

@@ -78,22 +78,21 @@ def load_model(
# BERT モデルをロードし、辞書に格納して返す # BERT モデルをロードし、辞書に格納して返す
## 英語のみ DebertaV2Model でロードする必要がある ## 英語のみ DebertaV2Model でロードする必要がある
if language == Languages.EN: if language == Languages.EN:
model = cast( __loaded_models[language] = cast(
DebertaV2Model, DebertaV2Model,
DebertaV2Model.from_pretrained( DebertaV2Model.from_pretrained(
pretrained_model_name_or_path, cache_dir=cache_dir, revision=revision pretrained_model_name_or_path, cache_dir=cache_dir, revision=revision
), ),
) )
else: else:
model = AutoModelForMaskedLM.from_pretrained( __loaded_models[language] = AutoModelForMaskedLM.from_pretrained(
pretrained_model_name_or_path, cache_dir=cache_dir, revision=revision pretrained_model_name_or_path, cache_dir=cache_dir, revision=revision
) )
__loaded_models[language] = model
logger.info( logger.info(
f"Loaded the {language} BERT model from {pretrained_model_name_or_path}" f"Loaded the {language} BERT model from {pretrained_model_name_or_path}"
) )
return model return __loaded_models[language]
def load_tokenizer( def load_tokenizer(
@@ -139,23 +138,40 @@ def load_tokenizer(
# BERT トークナイザーをロードし、辞書に格納して返す # BERT トークナイザーをロードし、辞書に格納して返す
## 英語のみ DebertaV2Tokenizer でロードする必要がある ## 英語のみ DebertaV2Tokenizer でロードする必要がある
if language == Languages.EN: if language == Languages.EN:
tokenizer = DebertaV2Tokenizer.from_pretrained( __loaded_tokenizers[language] = DebertaV2Tokenizer.from_pretrained(
pretrained_model_name_or_path, pretrained_model_name_or_path,
cache_dir=cache_dir, cache_dir=cache_dir,
revision=revision, revision=revision,
) )
else: else:
tokenizer = AutoTokenizer.from_pretrained( __loaded_tokenizers[language] = AutoTokenizer.from_pretrained(
pretrained_model_name_or_path, pretrained_model_name_or_path,
cache_dir=cache_dir, cache_dir=cache_dir,
revision=revision, revision=revision,
) )
__loaded_tokenizers[language] = tokenizer
logger.info( logger.info(
f"Loaded the {language} BERT tokenizer from {pretrained_model_name_or_path}" f"Loaded the {language} BERT tokenizer from {pretrained_model_name_or_path}"
) )
return tokenizer return __loaded_tokenizers[language]
def transfer_model(language: Languages, device: str) -> None:
"""
指定された言語の BERT モデルを、指定されたデバイスに移動する。
Args:
language (Languages): モデルを移動する言語
device (str): モデルを移動するデバイス
"""
if language not in __loaded_models:
raise ValueError(f"BERT model for {language} is not loaded.")
current_device = str(__loaded_models[language].device)
if current_device != device:
__loaded_models[language].to(device) # type: ignore
logger.info(f"Transferred the {language} BERT model from {current_device} to {device}")
def unload_model(language: Languages) -> None: def unload_model(language: Languages) -> None: