File size: 3,265 Bytes
0d4ee70
 
 
c139ec7
66c7691
1b2fed0
8b909bf
fe4ee33
8b909bf
 
0693177
8b909bf
 
fe4ee33
8b909bf
fe4ee33
8b909bf
 
fe4ee33
8b909bf
 
 
 
 
 
 
 
5d86404
8b909bf
fe4ee33
8b909bf
 
b716af8
 
e5d1136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0858459
b94fa53
66c7691
4baf273
7489b32
9cb9d28
b94fa53
 
 
94c5b67
9cb9d28
fd473a9
66c7691
0858459
 
 
 
 
 
 
 
 
 
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
import gradio as gr
import spaces

#----------------------------
import time
import gradio as gr
@spaces.GPU
def slow_echo(message, history):
    for i in range(len(message)):
        main()
        time.sleep(0.05)
        
        yield "You typed: " + message[: i + 1]

demo = gr.ChatInterface(
    slow_echo,
    type="messages",
    flagging_mode="manual",
    flagging_options=["Like", "Spam", "Inappropriate", "Other"],
    save_history=True,
)

if __name__ == "__main__":
    demo.launch(share=True)

#--------------------


@spaces.GPU
def main():
    # === 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 ===
    torch_dtype = torch.float32  # CPU için uygun dtype
    model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch_dtype)
    
    # === 3️⃣ 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)
    
    # === 4️⃣ VERİ SETİ ===
    dataset = load_dataset("oscar", "unshuffled_deduplicated_tr", trust_remote_code=True)  # trust_remote_code=True
    subset = dataset["train"].shuffle(seed=42).select(range(10000))  # Küçük subset seçiyoruz (10.000 örnek)
    
    # === 5️⃣ TOKENLEŞTİRME FONKSİYONU ===
    @spaces.GPU
    def tokenize_function(examples):
        return tokenizer(examples["text"], truncation=True, max_length=512)
    
    tokenized_datasets = subset.map(tokenize_function, batched=True)
    
    # === 6️⃣ EĞİTİM AYARLARI ===
    # Eğitimde kaç adım olduğunu hesaplayalım
    train_size = len(tokenized_datasets)  # 10,000 örnek
    batch_size = 1  # Batch size 1
    num_epochs = 1  # 1 epoch eğitimi
    max_steps = (train_size // batch_size) * num_epochs  # max_steps hesapla
    
    training_args = TrainingArguments(
        output_dir="./mistral_lora",
        per_device_train_batch_size=1,  
        gradient_accumulation_steps=16, 
        learning_rate=5e-4,  
        num_train_epochs=1,  
        max_steps=max_steps,  # Buraya max_steps parametresini ekliyoruz
        save_steps=500,
        save_total_limit=2,
        logging_dir="./logs",
        logging_steps=10,
        optim="adamw_torch",
        train_dataset=split_dataset["train"],
        eval_dataset=split_dataset["test"],
        no_cuda=True,  # GPU kullanılmıyor
    )


# === 7️⃣ MODEL EĞİTİMİ ===
@spaces.GPU
def train_model():
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized_datasets,
    )
    trainer.train()

train_model()  # Eğitimi başlat
demo = gr.ChatInterface(
    slow_echo,
    type="messages",
    flagging_mode="manual",
    flagging_options=["Like", "Spam", "Inappropriate", "Other"],
    save_history=True,
)

if __name__ == "__main__":
    demo.launch(share=True)