Я пытаюсь выполнить только вывод с большой моделью размером 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
Как эффективно запустить модель вывода большого размера в многопроцессорном процессоре? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Запись OpenCV GStreamer VideoWriter зависает в многопроцессорном процессе Python
Anonymous » » в форуме Python - 0 Ответы
- 38 Просмотры
-
Последнее сообщение Anonymous
-