GradioMistral / app.py
kasim90's picture
Update app.py
0d4ee70 verified
raw
history blame
2.05 kB
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
# === 1️⃣ MODEL VE TOKENIZER YÜKLEME ===
MODEL_NAME = "mistralai/Mistral-7B-v0.1" # Hugging Face model adı
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
# === 2️⃣ CPU OPTİMİZASYONU ===
device = "cpu" # CPU kullanıyoruz
torch_dtype = torch.float32 # float32 seçtik çünkü CPU'da bf16 genelde yok
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch_dtype)
# === 3️⃣ LoRA AYARLARI ===
lora_config = LoraConfig(
r=8, # Düşük rank LoRA kullanımı
lora_alpha=32, # Alpha değeri
lora_dropout=0.1, # Dropout oranı
bias="none",
target_modules=["q_proj", "v_proj"], # Sadece attention katmanlarına LoRA uygula
)
model = get_peft_model(model, lora_config)
# === 4️⃣ VERİ SETİ ===
dataset = load_dataset("oscar", "unshuffled_deduplicated_tr") # OSCAR Türkçe veri seti
train_data = dataset["train"].shuffle(seed=42).select(range(10000)) # Küçük subset
# === 5️⃣ TOKENLEŞTİRME FONKSİYONU ===
def tokenize_function(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)
tokenized_datasets = train_data.map(tokenize_function, batched=True)
# === 6️⃣ EĞİTİM AYARLARI ===
training_args = TrainingArguments(
output_dir="./mistral_lora_cpu",
per_device_train_batch_size=1, # Küçük batch size
gradient_accumulation_steps=16, # Daha büyük effective batch için
learning_rate=5e-4, # AdamW yerine SGD kullanacağımız için yüksek LR
num_train_epochs=1, # İlk deneme için sadece 1 epoch
save_steps=500,
save_total_limit=2,
logging_dir="./logs",
logging_steps=10,
optim="sgd", # AdamW yerine SGD kullan
)
# === 7️⃣ MODEL EĞİTİMİ ===
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets,
)
trainer.train()