Об эффективности pytorch в модели RerankerPython

Программы на Python
Anonymous
Об эффективности pytorch в модели Reranker

Сообщение Anonymous »

У меня возникла проблема с эффективностью в модели Reranker.**
Подробнее:
При выводе модели PyTorch я добавляю время( ) для сбора времени в self.tokenizer и self.model. Информация о выводе такая:
token_len: 2048 ; все данные: 1000; партия: 4;номер партии: 1000/4=250. Я запускаю GPU(A800) и получаю, что время выполнения в self.tokenizer составляет 29,99 с, вывод модели составляет 4,39 с, поэтому общее время равно почти 34,4 секунды.
Когда я отлаживал код, я обнаружил, что часть .to(self.device) занимает почти все время self.tokenizer .
Но когда я аннотирую код, оценки = self.model(**inputs, return_dict=True).logits.view(-1, .float().
code>, я обнаружил, что время self.tokenizer стало 4,16 с.
Вот мой код вывода,

Код: Выделить всё

    @torch.no_grad()
def compute_score(self, sentence_pairs, batch_size: int = 256,
max_length: int = 512, normalize: bool = False):
if self.num_gpus > 0:
batch_size = batch_size * self.num_gpus

assert isinstance(sentence_pairs, list)
if isinstance(sentence_pairs[0], str):
sentence_pairs = [sentence_pairs]
start = time()

token_times=[]
model_times=[]
all_scores = []
for start_index in tqdm(range(0, len(sentence_pairs), batch_size), desc="Compute Scores",
disable=len(sentence_pairs) < 128):
sentences_batch = sentence_pairs[start_index:start_index + batch_size]

token_start = time()
inputs = self.tokenizer(
sentences_batch,
padding=True,
truncation=True,
return_tensors='pt',
max_length=max_length,
).to(self.device)
token_end = time()

scores = self.model(**inputs, return_dict=True).logits.view(-1, ).float()
model_end_time = time()
#all_scores.extend(scores.cpu().numpy().tolist())
token_times.append(token_end - token_start)
model_times.append(model_end_time - token_end)

#if normalize:
#    all_scores = [sigmoid(score) for score in all_scores]

token_all_time = sum(token_times)
model_all_time = sum(model_times)
return "", start, token_all_time, model_all_time
и token_all_time — это время self.tokenizer, а model_all_time — это время вывода модели.
Вот ссылка на исходный код: https://github.com/FlagOpen/FlagEmbeddi ... eranker.py
И вот подробности этой проблемы: https:// github.com/FlagOpen/FlagEmbedding/issues/988
Больше ли затрат времени в self.tokenizer или больше при выводе модели.
и почему временные затраты self.tokenizer с 29,99 с до 4,16 с?
Кто-нибудь знает, почему это происходит?< /strong>

Подробнее здесь: https://stackoverflow.com/questions/787 ... nker-model

Вернуться в «Python»