| import os
|
| from unsloth import FastLanguageModel
|
| from datasets import load_dataset
|
| from trl import SFTTrainer
|
| from transformers import TrainingArguments
|
|
|
|
|
| max_seq_length = 2048
|
| dtype = None
|
| load_in_4bit = True
|
|
|
|
|
|
|
| model, tokenizer = FastLanguageModel.from_pretrained(
|
| model_name = "tda45/TdAI-4bit",
|
| max_seq_length = max_seq_length,
|
| dtype = dtype,
|
| load_in_4bit = True,
|
| fix_tokenizer = True,
|
| )
|
|
|
|
|
| model = FastLanguageModel.get_peft_model(
|
| model,
|
| r = 16,
|
| target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
|
| lora_alpha = 16,
|
| lora_dropout = 0,
|
| bias = "none",
|
| use_gradient_checkpointing = "unsloth",
|
| random_state = 3407,
|
| use_rslora = False,
|
| loftq_config = None,
|
| )
|
|
|
|
|
|
|
| prompt_sablonu = """Aşağıda bir görevi tanımlayan bir talimat ve daha fazla ortam sağlayan bir girdi bulunmaktadır. İsteyi uygun şekilde tamamlayan bir yanıt yazın.
|
|
|
| ### Talimat:
|
| {}
|
|
|
| ### Yanıt:
|
| {}"""
|
|
|
|
|
|
|
| dataset = load_dataset("yahma/alpaca-cleaned", split = "train")
|
|
|
| def format_prompts(examples):
|
| instructions = examples["instruction"]
|
| outputs = examples["output"]
|
| texts = []
|
| for instruction, output in zip(instructions, outputs):
|
| text = prompt_sablonu.format(instruction, output) + tokenizer.eos_token
|
| texts.append(text)
|
| return { "text" : texts, }
|
|
|
| dataset = dataset.map(format_prompts, batched = True,)
|
|
|
|
|
| trainer = SFTTrainer(
|
| model = model,
|
| tokenizer = tokenizer,
|
| train_dataset = dataset,
|
| dataset_text_field = "text",
|
| max_seq_length = max_seq_length,
|
| dataset_num_proc = 2,
|
| packing = False,
|
| args = TrainingArguments(
|
| per_device_train_batch_size = 2,
|
| gradient_accumulation_steps = 4,
|
| warmup_steps = 5,
|
| max_steps = 60,
|
| learning_rate = 2e-4,
|
| fp16 = not FastLanguageModel.is_bfloat16_supported(),
|
| bf16 = FastLanguageModel.is_bfloat16_supported(),
|
| logging_steps = 1,
|
| optim = "adamw_8bit",
|
| weight_decay = 0.01,
|
| lr_scheduler_type = "linear",
|
| seed = 3407,
|
| output_dir = "outputs",
|
| ),
|
| )
|
|
|
|
|
| print("Eğitim süreci başlıyor...")
|
| trainer_stats = trainer.train()
|
| print("Eğitim tamamlandı!")
|
|
|
|
|
| model.save_pretrained("lora_model")
|
| tokenizer.save_pretrained("lora_model")
|
| print("Eğitilen LoRA katmanları 'lora_model' klasörüne kaydedildi.") |