Spaces:
Runtime error
Runtime error
import os | |
import torch | |
import gradio as gr | |
import spaces | |
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer | |
from peft import LoraConfig, get_peft_model | |
from datasets import load_dataset, Dataset | |
from huggingface_hub import notebook_login, HfApi | |
# === 1️⃣ MODEL VE TOKENIZER YÜKLEME === | |
MODEL_NAME = "mistralai/Mistral-7B-v0.1" | |
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch.float32).to(device) | |
# === 2️⃣ LoRA AYARLARI === | |
lora_config = LoraConfig( | |
r=8, | |
lora_alpha=32, | |
lora_dropout=0.1, | |
bias="none", | |
target_modules=["q_proj", "v_proj"], | |
) | |
model = get_peft_model(model, lora_config) | |
# === 3️⃣ VERİ SETİ === | |
DATASET_PATH = "/home/user/app/oscar_tr.parquet" | |
if os.path.exists(DATASET_PATH): | |
print("📂 Kaydedilmiş dataset bulundu, yükleniyor...") | |
dataset = Dataset.from_parquet(DATASET_PATH) | |
else: | |
print("🌍 Veri seti indiriliyor ve kaydediliyor...") | |
dataset = load_dataset("oscar", "unshuffled_deduplicated_tr", split="train", streaming=True, trust_remote_code=True) | |
dataset = dataset.shuffle(seed=42).select(range(10000)) # Küçük subset | |
dataset.to_parquet(DATASET_PATH) # İlk çalışmada kaydediyoruz | |
# === 4️⃣ TOKENLEŞTİRME === | |
def tokenize_function(examples): | |
return tokenizer(examples["text"], truncation=True, max_length=512) | |
tokenized_datasets = dataset.map(tokenize_function, batched=True) | |
# === 5️⃣ EĞİTİM AYARLARI === | |
training_args = TrainingArguments( | |
output_dir="./mistral_lora_cpu", | |
per_device_train_batch_size=1, | |
gradient_accumulation_steps=16, | |
learning_rate=5e-4, | |
num_train_epochs=1, | |
save_steps=500, | |
save_total_limit=2, | |
logging_dir="./logs", | |
logging_steps=10, | |
optim="adamw_torch", | |
) | |
# === 6️⃣ GPU İLE EĞİTİM BAŞLATMA === | |
def train_model(): | |
trainer = Trainer( | |
model=model, | |
args=training_args, | |
train_dataset=tokenized_datasets, | |
) | |
trainer.train() | |
return "✅ Model Eğitimi Tamamlandı!" | |
# === 7️⃣ MODELİ HUGGING FACE HUB'A YÜKLEME === | |
def upload_model(): | |
notebook_login() # Hugging Face hesabına giriş yap | |
api = HfApi() | |
api.upload_folder( | |
folder_path="./mistral_lora_cpu", | |
repo_id="kullanici_adin/mistral-lora-modeli", | |
repo_type="model", | |
) | |
return "✅ Model Hugging Face Hub'a Yüklendi!" | |
# === 8️⃣ GRADIO ARAYÜZÜ === | |
def generate_text(prompt): | |
inputs = tokenizer(prompt, return_tensors="pt").to(device) | |
output = model.generate(**inputs, max_length=100) | |
return tokenizer.decode(output[0], skip_special_tokens=True) | |
iface = gr.Interface( | |
fn=generate_text, | |
inputs=gr.Textbox(lines=2, placeholder="Buraya bir şeyler yaz..."), | |
outputs="text", | |
live=True | |
) | |
# === 9️⃣ BAŞLATMA === | |
if __name__ == "__main__": | |
train_model() # Eğitimi başlat | |
upload_model() # Modeli Hugging Face Hub'a yükle | |
iface.launch() # Gradio UI başlat | |