File size: 2,238 Bytes
8dab05b
 
 
 
8a36ca1
b0fe154
 
 
 
8dab05b
8f36cea
 
 
 
 
 
8dab05b
 
 
 
0536038
5f44074
 
8dab05b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f1b57b
152a5c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import gradio as gr
import os
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from huggingface_hub import login
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
os.environ["TORCH_CUDA_ARCH_LIST"] = ""


# Hugging Face Token'ı Secrets'ten al
HF_TOKEN = os.getenv("HF_TOKEN")
if HF_TOKEN:
    login(HF_TOKEN)
else:
    raise ValueError("Hugging Face Token bulunamadı! Lütfen Secrets bölümüne ekleyin.")

# Model ve tokenizer yükleme
model_name = "mistralai/Mistral-7B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_name, token=HF_TOKEN)

# Modeli 32-bit hassasiyetle yükleme (CPU uyumlu)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", token=HF_TOKEN)

# OSCAR Türkçe'yi yükleme fonksiyonu
def load_and_clean_oscar():
    dataset = load_dataset("oscar-corpus/OSCAR-2301", lang="tr", split="train")

    # Veri temizleme
    def clean_text(example):
        text = example["text"].replace("\n", " ")  # Satır sonlarını temizle
        return {"text": text}
    
    dataset = dataset.map(clean_text)
    return dataset

# Fine-tuning fonksiyonu
def fine_tune(epochs, lr):
    dataset = load_and_clean_oscar()

    training_args = TrainingArguments(
        output_dir="./mistral-finetuned",
        per_device_train_batch_size=1,
        gradient_accumulation_steps=8,
        save_steps=1000,
        save_total_limit=2,
        num_train_epochs=int(epochs),
        learning_rate=float(lr),
        logging_dir="./logs",
        logging_steps=50
    )

    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=dataset
    )

    trainer.train()
    return "Fine-tuning tamamlandı!"

# Gradio Arayüzü
with gr.Blocks() as demo:
    gr.Markdown("# Mistral Türkçe Fine-Tuning")
    
    epochs = gr.Number(value=3, label="Epoch Sayısı")
    lr = gr.Textbox(value="2e-4", label="Öğrenme Oranı (Learning Rate)")
    
    train_button = gr.Button("Eğitimi Başlat")
    output_text = gr.Textbox(label="Sonuç")

    train_button.click(fine_tune, inputs=[epochs, lr], outputs=output_text)

# Public link oluşturmak için 'share=True' parametresini ekliyoruz
demo.launch()