Ошибка выполнения: «addmm_impl_cpu_» не реализовано для «Half» — PEFT Huggingface пытается запуститься на ЦП
Я относительно новичок в LLM и пытаюсь наверстать упущенное. Следуя примеру, я немного изменил код, чтобы убедиться, что я запускаю все локально на экземпляре EC2. Обучение прошло нормально только на ЦП (27 часов), модель, токенизатор и конфигурации сохранены на диске. Однако у меня возникли проблемы с выводом. Вот код:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftConfig, PeftModel
from transformers import BitsAndBytesConfig
from accelerate import Accelerator
accelerator=Accelerator(cpu=True)
device = torch.device("cpu")
quantization_config = BitsAndBytesConfig(load_in_8bit_fp32_cpu_offload=True)
# Import the model
config = PeftConfig.from_pretrained(model_dir)
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
#return_dict=True,
#quantization_config=quantization_config,
#load_in_8bit=True,
#device_map=device_map,
#device_map="auto",
)
model.to(device)
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
peft_model = PeftModel.from_pretrained(model, model_dir, torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_cache=True)
peft_model.to(device)
prompt = "The hobbits were so suprised seeing their friend"
inputs = tokenizer(prompt, return_tensors="pt")
input_ids = inputs["input_ids"].to(torch.long) # Convert to Long data type
attention_mask = inputs["attention_mask"].to(torch.float32)
tokens = peft_model.generate(
input_ids=input_ids,
attention_mask=attention_mask,
max_new_tokens=100,
temperature=1,
eos_token_id=tokenizer.eos_token_id,
early_stopping=True,
use_cache=True
)
model
иpeft_model
кажется, работает, я не получаю ошибок из этих частей. Ошибка исходит изpeft_model.generate
часть. Это довольно длинное и некрасивое сообщение об ошибке. Вот чем оно заканчивается:
RuntimeError: "addmm_impl_cpu_" not implemented for 'Half'
Я проверил множество ресурсов и ссылок и попытался соответствующим образом изменить код, но, похоже, ничего не работает. Я явно делаю что-то не так или пытаюсь выполнить миссию невыполнимой, пытаясь выполнить это на процессоре. Но скажем, на данный момент это должно быть на процессоре. Буду признателен за любую оказанную помощь.
1 ответ
Почему вы используете «torch_dtype=torch.bfloat16» на процессоре?
Сообщение об ошибке «RuntimeError: «addmm_impl_cpu_» не реализовано для «Half»» означает, что функция PyTorch torch.addmm не имеет реализации ЦП для типа данных Half. Half — это 16-битный тип данных с плавающей запятой, и в PyTorch не все операции реализованы для этого типа данных на ЦП.