Как эффективно запустить модель вывода большого размера в многопроцессорном процессоре?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как эффективно запустить модель вывода большого размера в многопроцессорном процессоре?

Сообщение Anonymous »

Я пытаюсь выполнить только вывод с большой моделью размером 70 бит с несколькими графическими процессорами, но столкнулся с некоторыми проблемами.
< ol>
[*]Время загрузки занимает очень много времени, около 15 минут.
[*]Я не уверен, что это работает правильно, чтобы автоматически сегментировать модель через несколько графических процессоров и выполнять свою работу. в пакетном режиме. В настоящее время он сохраняет ошибки с такими сообщениями. Думаю, если бы все работало хорошо, использование только четырех графических процессоров с моделью такого размера должно было бы работать правильно.

[rank4]: torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 448.00 MiB. GPU 0 has a total capacity of 47.51 GiB of which 319.56 MiB is free. Including non-PyTorch memory, this process has 24.97 GiB memory in use. Process 1068220 has 22.22 GiB memory in use. Of the allocated memory 24.55 GiB is allocated by PyTorch, and 1.56 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/c ... -variables)

Есть ли предложения по исправлению моего кода?
p.s. Также интересно, какие подсказки будут хорошими для моделей инструкций? Я знаю, что существует множество методов быстрого проектирования, но мне просто интересно, как правильно контролировать качество вывода для модели Llama-Instruction.
import os
import torch
import pandas as pd
from tqdm import tqdm
from transformers import AutoTokenizer, AutoModelForCausalLM

os.environ["HF_HOME"] = "/mystorage"
os.environ["CUDA_VISIBLE_DEVICES"] = "3,4,5,6,7"

MODEL_ID = "meta-llama/Meta-Llama-3-70B-Instruct"
CSV_FILE = "my_csv.csv"
COLUMN_NAME = "column1"
ADDITIONAL_COLUMNS = ["column2"]
OUTPUT_FILE = "output.csv"
BATCH_SIZE = 32

print("Loading model...")
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID, padding_side="left")
tokenizer.pad_token_id = tokenizer.eos_token_id

model = AutoModelForCausalLM.from_pretrained(
MODEL_ID,
device_map="auto",
torch_dtype=torch.float16,
)

print("Loading data...")
data = pd.read_csv(CSV_FILE)
cells = data[COLUMN_NAME].dropna().tolist()
additional_data = data[ADDITIONAL_COLUMNS].loc[data[COLUMN_NAME].notna()]

PROMPTS = [
f"myprompt {cell}\n Given this cell, summarize in one sentence concisely."
for cell in cells
]

results = []

print("Starting inference...")
progress_bar = tqdm(total=len(PROMPTS))

for i in range(0, len(PROMPTS), BATCH_SIZE):
batch_prompts = PROMPTS[i:i + BATCH_SIZE]

inputs = tokenizer(batch_prompts, return_tensors="pt", padding=True, truncation=True).to("cuda")

with torch.no_grad():
output_ids = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
max_new_tokens=40,
pad_token_id=tokenizer.eos_token_id,
)

decoded_outputs = [
tokenizer.decode(output, skip_special_tokens=True).split(prompt)[-1].strip()
for output, prompt in zip(output_ids, batch_prompts)
]
results.extend(zip(batch_prompts, decoded_outputs))
progress_bar.update(len(batch_prompts))

print("Saving results...")
result_df = pd.DataFrame(results, columns=["Prompt", "Result"])
result_df = pd.concat([result_df, additional_data.reset_index(drop=True)], axis=1)
result_df.to_csv(OUTPUT_FILE, index=False)

print(f"Results saved to '{OUTPUT_FILE}'")


Подробнее здесь: https://stackoverflow.com/questions/792 ... ffeciently
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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