Ошибка выполнения: «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 не все операции реализованы для этого типа данных на ЦП.

Другие вопросы по тегам