hackergeek commited on
Commit
a51c773
·
verified ·
1 Parent(s): c0fa669

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -34
app.py CHANGED
@@ -1,95 +1,111 @@
1
  import torch
2
  import gradio as gr
 
 
 
3
  from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
4
  from peft import get_peft_model, LoraConfig, TaskType
5
  from datasets import load_dataset
6
 
7
- device = "cpu" # ✅ اجباراً فقط روی CPU اجرا شود
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  def train_model(dataset_url, model_url, epochs):
10
  try:
11
- # 🚀 بارگیری مدل و توکنایزر با اجازه اجرای کد سفارشی و بدون نیاز به GPU
12
- # 🚀 بارگیری مدل و توکنایزر بدون نیاز به GPU
13
  tokenizer = AutoTokenizer.from_pretrained(model_url, trust_remote_code=True)
14
  model = AutoModelForCausalLM.from_pretrained(
15
- model_url,
16
- trust_remote_code=True,
17
- torch_dtype=torch.float32, # ✅ اجرا روی CPU
18
- device_map="cpu"
19
  )
20
 
21
- # ✅ تنظیم LoRA برای کاهش مصرف حافظه
22
  lora_config = LoraConfig(
23
- task_type=TaskType.CAUSAL_LM,
24
- r=8,
25
- lora_alpha=32,
26
- lora_dropout=0.1,
27
- target_modules=["q_proj", "v_proj"]
28
  )
29
 
30
  model = get_peft_model(model, lora_config)
31
  model.to(device)
32
 
33
- # ✅ بارگیری دیتاست
34
  dataset = load_dataset(dataset_url)
35
-
36
- # ✅ توکنایز کردن داده‌ها
37
  def tokenize_function(examples):
38
  return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)
39
 
40
  tokenized_datasets = dataset.map(tokenize_function, batched=True)
41
  train_dataset = tokenized_datasets["train"]
42
 
43
- # ✅ تنظیمات ترینینگ
44
  training_args = TrainingArguments(
45
  output_dir="./deepseek_lora_cpu",
46
  evaluation_strategy="epoch",
47
  learning_rate=5e-4,
48
- per_device_train_batch_size=1, # کاهش مصرف RAM
49
  per_device_eval_batch_size=1,
50
  num_train_epochs=int(epochs),
51
  save_strategy="epoch",
52
  save_total_limit=2,
53
  logging_dir="./logs",
54
  logging_steps=10,
55
- fp16=False, # ❌ غیرفعال‌سازی FP16 چون روی CPU اجرا می‌شود
56
  gradient_checkpointing=True,
57
  optim="adamw_torch",
58
  report_to="none"
59
  )
60
 
61
  trainer = Trainer(
62
- model=model,
63
- args=training_args,
64
  train_dataset=train_dataset
65
  )
66
 
67
- # 🚀 شروع ترینینگ (قفل شده تا پایان)
68
- trainer.train()
69
- trainer.save_model("./deepseek_lora_finetuned")
70
- tokenizer.save_pretrained("./deepseek_lora_finetuned")
71
 
72
- return "✅ ترینینگ کامل شد! مدل ذخیره شد."
 
 
 
 
 
73
 
74
  except Exception as e:
75
- return f"❌ خطا: {str(e)}"
 
 
 
 
 
 
 
 
 
76
 
77
- # ✅ رابط کاربری Gradio
78
  with gr.Blocks() as app:
79
- gr.Markdown("# 🚀 AutoTrain DeepSeek R1 (CPU) - (بدون توقف تا پایان)")
80
 
81
  dataset_url = gr.Textbox(label="Dataset URL (Hugging Face)", placeholder="مثال: samsum")
82
  model_url = gr.Textbox(label="Model URL (Hugging Face)", placeholder="مثال: deepseek-ai/deepseek-r1")
83
  epochs = gr.Slider(minimum=1, maximum=10, step=1, value=3, label="تعد��د Epochs")
84
 
85
- train_button = gr.Button("شروع ترینینگ", interactive=True)
86
  output_text = gr.Textbox(label="وضعیت ترینینگ")
87
 
88
- def disable_button(*args):
89
- train_button.interactive = False
90
- return train_model(*args)
 
 
 
 
91
 
92
- train_button.click(disable_button, inputs=[dataset_url, model_url, epochs], outputs=output_text)
93
 
94
  app.queue()
95
  app.launch(server_name="0.0.0.0", server_port=7860, share=True)
 
1
  import torch
2
  import gradio as gr
3
+ import multiprocessing
4
+ import os
5
+ import time
6
  from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
7
  from peft import get_peft_model, LoraConfig, TaskType
8
  from datasets import load_dataset
9
 
10
+ device = "cpu"
11
+ training_process = None
12
+ log_file = "training_status.log"
13
+
14
+ def log_status(message):
15
+ with open(log_file, "w") as f:
16
+ f.write(message)
17
+
18
+ def read_status():
19
+ if os.path.exists(log_file):
20
+ with open(log_file, "r") as f:
21
+ return f.read()
22
+ return "⏳ در انتظار شروع ترینینگ..."
23
 
24
  def train_model(dataset_url, model_url, epochs):
25
  try:
26
+ log_status("🚀 در حال بارگیری مدل...")
 
27
  tokenizer = AutoTokenizer.from_pretrained(model_url, trust_remote_code=True)
28
  model = AutoModelForCausalLM.from_pretrained(
29
+ model_url, trust_remote_code=True, torch_dtype=torch.float32, device_map="cpu"
 
 
 
30
  )
31
 
 
32
  lora_config = LoraConfig(
33
+ task_type=TaskType.CAUSAL_LM, r=8, lora_alpha=32, lora_dropout=0.1, target_modules=["q_proj", "v_proj"]
 
 
 
 
34
  )
35
 
36
  model = get_peft_model(model, lora_config)
37
  model.to(device)
38
 
 
39
  dataset = load_dataset(dataset_url)
 
 
40
  def tokenize_function(examples):
41
  return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)
42
 
43
  tokenized_datasets = dataset.map(tokenize_function, batched=True)
44
  train_dataset = tokenized_datasets["train"]
45
 
 
46
  training_args = TrainingArguments(
47
  output_dir="./deepseek_lora_cpu",
48
  evaluation_strategy="epoch",
49
  learning_rate=5e-4,
50
+ per_device_train_batch_size=1,
51
  per_device_eval_batch_size=1,
52
  num_train_epochs=int(epochs),
53
  save_strategy="epoch",
54
  save_total_limit=2,
55
  logging_dir="./logs",
56
  logging_steps=10,
57
+ fp16=False,
58
  gradient_checkpointing=True,
59
  optim="adamw_torch",
60
  report_to="none"
61
  )
62
 
63
  trainer = Trainer(
64
+ model=model,
65
+ args=training_args,
66
  train_dataset=train_dataset
67
  )
68
 
69
+ log_status("🚀 ترینینگ شروع شد...")
 
 
 
70
 
71
+ for epoch in range(int(epochs)):
72
+ log_status(f"🔄 در حال اجرا: Epoch {epoch+1}/{epochs}...")
73
+ trainer.train(resume_from_checkpoint=True)
74
+ trainer.save_model(f"./deepseek_lora_finetuned_epoch_{epoch+1}")
75
+
76
+ log_status("✅ ترینینگ کامل شد!")
77
 
78
  except Exception as e:
79
+ log_status(f"❌ خطا: {str(e)}")
80
+
81
+ def start_training(dataset_url, model_url, epochs):
82
+ global training_process
83
+ if training_process is None or not training_process.is_alive():
84
+ training_process = multiprocessing.Process(target=train_model, args=(dataset_url, model_url, epochs))
85
+ training_process.start()
86
+ return "🚀 ترینینگ شروع شد!"
87
+ else:
88
+ return "⚠ ترینینگ در حال اجرا است!"
89
 
 
90
  with gr.Blocks() as app:
91
+ gr.Markdown("# 🚀 AutoTrain DeepSeek R1 (CPU) - نمایش وضعیت لحظه‌ای")
92
 
93
  dataset_url = gr.Textbox(label="Dataset URL (Hugging Face)", placeholder="مثال: samsum")
94
  model_url = gr.Textbox(label="Model URL (Hugging Face)", placeholder="مثال: deepseek-ai/deepseek-r1")
95
  epochs = gr.Slider(minimum=1, maximum=10, step=1, value=3, label="تعد��د Epochs")
96
 
97
+ train_button = gr.Button("شروع ترینینگ")
98
  output_text = gr.Textbox(label="وضعیت ترینینگ")
99
 
100
+ train_button.click(start_training, inputs=[dataset_url, model_url, epochs], outputs=output_text)
101
+
102
+ # ✅ نمایش وضعیت لحظه‌ای ترینینگ
103
+ status_box = gr.Textbox(label="مرحله فعلی ترینینگ", interactive=False)
104
+
105
+ def update_status():
106
+ return read_status()
107
 
108
+ app.load(update_status, inputs=[], outputs=status_box, every=5) # هر ۵ ثانیه وضعیت را به‌روزرسانی کن
109
 
110
  app.queue()
111
  app.launch(server_name="0.0.0.0", server_port=7860, share=True)