import torch from datasets import load_dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer from peft import LoraConfig, get_peft_model MODEL_ID = "abdelac/tinyllama" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) model = AutoModelForCausalLM.from_pretrained( MODEL_ID, load_in_4bit=True, device_map="auto" ) dataset = load_dataset("json", data_files="data.json")["train"] def tokenize(example): text = f"### Instruction:\n{example['instruction']}\n### Response:\n{example['output']}" return tokenizer(text, truncation=True, padding="max_length", max_length=512) dataset = dataset.map(tokenize) lora_config = LoraConfig( r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config) training_args = TrainingArguments( output_dir="./lora-out", per_device_train_batch_size=1, gradient_accumulation_steps=4, num_train_epochs=2, fp16=True, logging_steps=10, save_strategy="epoch" ) trainer = Trainer( model=model, args=training_args, train_dataset=dataset ) trainer.train() model.save_pretrained("./lora-out")