Как загрузить доработанную модель пефт/лоры на основе ламы с трансформерами Huggingface?

Я следовал этому руководству (блокнот Colab ), чтобы точно настроить свою модель.

Пытаюсь загрузить локально сохраненную модель

      model = AutoModelForCausalLM.from_pretrained("finetuned_model")

урожайностьKilled.


Попытка загрузить модель из хаба:

урожайность

      import torch
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer

peft_model_id = "lucas0/empath-llama-7b"
config = PeftConfig.from_pretrained(peft_model_id)
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, return_dict=True, load_in_8bit=True, device_map='auto')
tokenizer = AutoTokenizer.from_pretrained(cwd+"/tokenizer.model")

# Load the Lora model
model = PeftModel.from_pretrained(model, peft_model_id)

урожайность

      AttributeError: /home/ubuntu/empath/lora/venv/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cget_col_row_stats

полная трассировка стека

Создание модели:

Я настроил модель, используя PEFT и LoRa:

      model = AutoModelForCausalLM.from_pretrained(
"decapoda-research/llama-7b-hf",
torch_dtype=torch.float16,
device_map='auto',
)

Пришлось скачать и вручную указать токенизатор ламы.

      tokenizer = LlamaTokenizer(cwd+"/tokenizer.model")
tokenizer.pad_token = tokenizer.eos_token

на тренинг:

      from peft import LoraConfig, get_peft_model

config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, config)

data = pd.read_csv("my_csv.csv")
dataset = Dataset.from_pandas(data)
tokenized_dataset = dataset.map(lambda samples: tokenizer(samples["text"]))

trainer = transformers.Trainer(
    model=model,
    train_dataset=tokenized_dataset,
    args=transformers.TrainingArguments(
        per_device_train_batch_size=4,
        gradient_accumulation_steps=4,
        warmup_steps=100,
        max_steps=100,
        learning_rate=1e-3,
        fp16=True,
        logging_steps=1,
        output_dir='outputs',
    ),
    data_collator=transformers.DataCollatorForLanguageModeling(tokenizer, mlm=False)
)
model.config.use_cache = True  # silence the warnings. Please re-enable for inference!
trainer.train()

и сохранил его локально с помощью:

      trainer.save_model(cwd+"/finetuned_model")
print("saved trainer locally")

а также к хабу:

      model.push_to_hub("lucas0/empath-llama-7b", create_pr=1)

Как загрузить настроенную модель?

2 ответа

Чтобы загрузить точно настроенную модель peft/lora, взгляните на пример гуанко, /questions/65260853/pyitayus-ustanovit-guanako-pip-install-guanaco-dlya-modeli-klassifikatsii-teksta/66101208#66101208

      import torch
from peft import PeftModel    
from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaTokenizer, StoppingCriteria, StoppingCriteriaList, TextIteratorStreamer

model_name = "decapoda-research/llama-7b-hf"
adapters_name = "lucas0/empath-llama-7b"

print(f"Starting to load the model {model_name} into memory")

m = AutoModelForCausalLM.from_pretrained(
    model_name,
    #load_in_4bit=True,
    torch_dtype=torch.bfloat16,
    device_map={"": 0}
)
m = PeftModel.from_pretrained(m, adapters_name)
m = m.merge_and_unload()
tok = LlamaTokenizer.from_pretrained(model_name)
tok.bos_token_id = 1

stop_token_ids = [0]

print(f"Successfully loaded the model {model_name} into memory")

Для правильной загрузки модели вам понадобится как минимум среда выполнения графического процессора A10g.


Более подробную информацию см.

Вы можете загрузить вот так после нажатия. Я успешно использовал следующий фрагмент.

      # pip install peft transformers
import torch
from peft import PeftModel, PeftConfig
from transformers import LlamaTokenizer, LlamaForCausalLM
from accelerate import infer_auto_device_map, init_empty_weights

peft_model_id = "--path--"

config = PeftConfig.from_pretrained(peft_model_id)

model1 = LlamaForCausalLM.from_pretrained(
    config.base_model_name_or_path,
    torch_dtype='auto',
    device_map='auto',
    offload_folder="offload", offload_state_dict = True
)
tokenizer = LlamaTokenizer.from_pretrained(config.base_model_name_or_path)

# Load the Lora model
model1 = PeftModel.from_pretrained(model, peft_model_id)
Другие вопросы по тегам