I want to create small adapter for asking llama model about my abstract game, but when I query it afterward, it doesn't seem to know anything about game. What might be the problem?
This is text of for train dataset.
[
{
"input": "Karapulkatanus is pc game?",
"output": "Karapulkatanus is an action-adventure survival game developed and published by MyHomeAbstractGames."
},
...
]
this is my code for creating adapter
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from datasets import Dataset
access_token='hf_xxxx' #my token from huggingface
# Open and read the JSON file
with open('training_data.json', 'r') as file:
data = json.load(file)
dataset = Dataset.from_list(data)
model_name = "meta-llama/Llama-3.2-1B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name,token=access_token)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(model_name,token=access_token)
def preprocess_function(examples):
inputs = tokenizer(
examples["input"], max_length=512, truncation=True, padding="max_length"
)
outputs = tokenizer(
examples["output"], max_length=512, truncation=True, padding="max_length"
)
inputs["labels"] = outputs["input_ids"]
inputs["loss_weights"] = [2.0 if token == tokenizer.encode("Karapulkatanus")[0] else 1.0 for token in inputs["input_ids"]]
return inputs
tokenized_dataset = dataset.map(preprocess_function, batched=True)
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.05,
)
model = get_peft_model(model, lora_config)
training_args = TrainingArguments(
output_dir="./llama_with_adapter",
per_device_train_batch_size=1,
num_train_epochs=3,
save_steps=500,
logging_dir="./logs",
gradient_accumulation_steps=8,
eval_strategy="no",
learning_rate=5e-5,
weight_decay=0.01,
logging_steps=10,
)
from transformers import Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset,
tokenizer=tokenizer,
)
trainer.train()
model.save_pretrained("./llama_with_adapter")
script will make folder llama_with_adapter with files after that I will ask model about this game. And model don't know anything about this game.
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import os
base_model_path = "meta-llama/Llama-3.2-1B-Instruct"
adapter_path = "./llama_with_adapter"
offload_dir = "./offload"
os.makedirs(offload_dir, exist_ok=True)
tokenizer = AutoTokenizer.from_pretrained(base_model_path)
tokenizer.pad_token = tokenizer.eos_token
base_model = AutoModelForCausalLM.from_pretrained(
base_model_path,
device_map="cpu",
offload_folder=offload_dir
)
model = PeftModel.from_pretrained(base_model, adapter_path)
model.eval()
example_input = "Karapulkatanus is pc game?"
input_ids = tokenizer(example_input, return_tensors="pt").input_ids.to(model.device)
outputs = model.generate(input_ids, max_length=500)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))