Files
zmwv823-ComfyUI_Anytext/Data_Process/utils.py
T
2024-10-31 23:29:02 +08:00

78 lines
3.3 KiB
Python

import time
import torch
import time
import gc
from comfy.model_management import soft_empty_cache
def t5_translate_en_ru_zh(Target_Language, prompt, t5_translate_en_ru_zh_path, device, cpu_offload= False, loaded_t5_translate_en_ru_zh_tensor=None, loaded_t5_translate_en_ru_zh_model_name=None, keep_model_device=False):
"""_summary_
Args:
Target_Language (_type_): zh, en, ru
prompt (_type_): _description_
t5_translate_en_ru_zh_base_200_path (_type_): _description_
device (_type_): _description_
cpu_offload (bool, optional): _description_. Defaults to False.
loaded_model_tensor (_type_, optional): _description_. Defaults to None.
Returns:
_type_: result, loaded_t5_translate_en_ru_zh_tensor, loaded_t5_translate_en_ru_zh_model_name
"""
# prefix = 'translate to en: '
sttime = time.time()
from transformers import T5ForConditionalGeneration
from transformers import T5Tokenizer
if loaded_t5_translate_en_ru_zh_model_name != t5_translate_en_ru_zh_path:
del loaded_t5_translate_en_ru_zh_tensor
soft_empty_cache()
t5_translate_en_ru_zh_tensor = None
t5_translate_en_ru_zh_model_name = None
loaded_t5_translate_en_ru_zh_tensor = None
if loaded_t5_translate_en_ru_zh_tensor == None:
t5_translate = T5ForConditionalGeneration.from_pretrained(t5_translate_en_ru_zh_path).to(device)
else:
t5_translate = loaded_t5_translate_en_ru_zh_tensor.to(device)
tokenizer = T5Tokenizer.from_pretrained(t5_translate_en_ru_zh_path)
if Target_Language == 'zh':
prefix = 'translate to zh: '
elif Target_Language == 'en':
prefix = 'translate to en: '
else:
prefix = 'translate to ru: '
src_text = prefix + prompt
input_ids = tokenizer(src_text, return_tensors="pt")
input_ids = input_ids.to(device)
generated_tokens = t5_translate.generate(**input_ids).to(device, torch.float32)
result = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
if cpu_offload:
if keep_model_device:
t5_translate.to('cpu')
else:
t5_translate.to(device)
t5_translate_en_ru_zh_tensor = t5_translate
t5_translate_en_ru_zh_model_name = t5_translate_en_ru_zh_path
else:
del t5_translate
gc.collect()
if torch.cuda.is_available():
torch.cuda.empty_cache()
t5_translate_en_ru_zh_tensor = None
t5_translate_en_ru_zh_model_name = None
endtime = time.time()
print("\033[93mTime for translating(翻译耗时): ", endtime - sttime, "\033[0m")
return result, t5_translate_en_ru_zh_tensor, t5_translate_en_ru_zh_model_name
def nlp_csanmt_translation_zh2en(device, prompt, nlp_csanmt_translation_zh2en_path):
sttime = time.time()
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
pipeline_ins = pipeline(task=Tasks.translation, model=nlp_csanmt_translation_zh2en_path, device=device)
outputs = pipeline_ins(input=prompt)
endtime = time.time()
from tensorflow.python.client import device_lib
print("\033[93m翻译耗时:", endtime - sttime, "\n翻译使用的设备:\n", device_lib.list_local_devices(), "\033[0m")
del pipeline_ins
soft_empty_cache()
return outputs