hackergeek commited on
Commit
3f9d883
·
verified ·
1 Parent(s): b6d5f19

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -27
app.py CHANGED
@@ -4,17 +4,17 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments,
4
  from peft import get_peft_model, LoraConfig, TaskType
5
  from datasets import load_dataset
6
 
7
- # ✅ Check if a GPU is available, otherwise use CPU
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
9
 
10
- # ✅ Function to start training
11
  def train_model(dataset_url, model_url, epochs):
12
  try:
13
- # Load tokenizer and model
14
  tokenizer = AutoTokenizer.from_pretrained(model_url)
15
  model = AutoModelForCausalLM.from_pretrained(model_url).to(device)
16
 
17
- # ✅ Apply LoRA (Reduces trainable parameters)
18
  lora_config = LoraConfig(
19
  task_type=TaskType.CAUSAL_LM,
20
  r=8,
@@ -26,30 +26,30 @@ def train_model(dataset_url, model_url, epochs):
26
  model = get_peft_model(model, lora_config)
27
  model.to(device)
28
 
29
- # ✅ Load dataset
30
  dataset = load_dataset(dataset_url)
31
 
32
- # ✅ Tokenization function
33
  def tokenize_function(examples):
34
  return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)
35
 
36
  tokenized_datasets = dataset.map(tokenize_function, batched=True)
37
  train_dataset = tokenized_datasets["train"]
38
 
39
- # ✅ Training Arguments (Optimized for CPU)
40
  training_args = TrainingArguments(
41
  output_dir="./deepseek_lora_cpu",
42
  evaluation_strategy="epoch",
43
  learning_rate=5e-4,
44
- per_device_train_batch_size=1, # Keeps memory low
45
  per_device_eval_batch_size=1,
46
  num_train_epochs=int(epochs),
47
  save_strategy="epoch",
48
  save_total_limit=2,
49
  logging_dir="./logs",
50
  logging_steps=10,
51
- fp16=False, # Disable FP16 for CPU
52
- gradient_checkpointing=True, # Saves memory
53
  optim="adamw_torch",
54
  report_to="none"
55
  )
@@ -60,30 +60,34 @@ def train_model(dataset_url, model_url, epochs):
60
  train_dataset=train_dataset
61
  )
62
 
63
- # Start Training
64
  trainer.train()
65
-
66
- # ✅ Save the Fine-Tuned Model
67
- model.save_pretrained("./deepseek_lora_finetuned")
68
  tokenizer.save_pretrained("./deepseek_lora_finetuned")
69
 
70
- return "✅ Training Completed! Model saved successfully."
71
-
72
  except Exception as e:
73
- return f"❌ Error: {str(e)}"
74
 
75
- # ✅ Gradio UI
76
  with gr.Blocks() as app:
77
- gr.Markdown("# 🚀 AutoTrain DeepSeek R1 (CPU)")
 
 
 
 
78
 
79
- dataset_url = gr.Textbox(label="Dataset URL (Hugging Face)", placeholder="e.g. samsum")
80
- model_url = gr.Textbox(label="Model URL (Hugging Face)", placeholder="e.g. deepseek-ai/deepseek-r1")
81
- epochs = gr.Slider(minimum=1, maximum=10, step=1, value=3, label="Number of Training Epochs")
82
 
83
- train_button = gr.Button("Start Training")
84
- output_text = gr.Textbox(label="Training Output")
 
 
85
 
86
- train_button.click(train_model, inputs=[dataset_url, model_url, epochs], outputs=output_text)
87
 
88
- # ✅ Launch the app
89
- app.launch(server_name="0.0.0.0", server_port=7860)
 
 
4
  from peft import get_peft_model, LoraConfig, TaskType
5
  from datasets import load_dataset
6
 
7
+ # ✅ بررسی سخت‌افزار (CPU/GPU)
8
  device = "cuda" if torch.cuda.is_available() else "cpu"
9
 
10
+ # ✅ تابع اجرای ترینینگ (قفل شده تا پایان)
11
  def train_model(dataset_url, model_url, epochs):
12
  try:
13
+ # 🚀 بارگیری مدل و توکنایزر
14
  tokenizer = AutoTokenizer.from_pretrained(model_url)
15
  model = AutoModelForCausalLM.from_pretrained(model_url).to(device)
16
 
17
+ # ✅ تنظیم LoRA برای کاهش مصرف حافظه
18
  lora_config = LoraConfig(
19
  task_type=TaskType.CAUSAL_LM,
20
  r=8,
 
26
  model = get_peft_model(model, lora_config)
27
  model.to(device)
28
 
29
+ # ✅ بارگیری دیتاست
30
  dataset = load_dataset(dataset_url)
31
 
32
+ # ✅ توکنایز کردن داده‌ها
33
  def tokenize_function(examples):
34
  return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)
35
 
36
  tokenized_datasets = dataset.map(tokenize_function, batched=True)
37
  train_dataset = tokenized_datasets["train"]
38
 
39
+ # ✅ تنظیمات ترینینگ
40
  training_args = TrainingArguments(
41
  output_dir="./deepseek_lora_cpu",
42
  evaluation_strategy="epoch",
43
  learning_rate=5e-4,
44
+ per_device_train_batch_size=1, # کاهش مصرف RAM
45
  per_device_eval_batch_size=1,
46
  num_train_epochs=int(epochs),
47
  save_strategy="epoch",
48
  save_total_limit=2,
49
  logging_dir="./logs",
50
  logging_steps=10,
51
+ fp16=False, # عدم استفاده از FP16 روی CPU
52
+ gradient_checkpointing=True, # ذخیره حافظه
53
  optim="adamw_torch",
54
  report_to="none"
55
  )
 
60
  train_dataset=train_dataset
61
  )
62
 
63
+ # 🚀 شروع ترینینگ (قفل شده تا پایان)
64
  trainer.train()
65
+ trainer.save_model("./deepseek_lora_finetuned") # ذخیره نهایی مدل
 
 
66
  tokenizer.save_pretrained("./deepseek_lora_finetuned")
67
 
68
+ return "✅ ترینینگ کامل شد! مدل ذخیره شد."
69
+
70
  except Exception as e:
71
+ return f"❌ خطا: {str(e)}"
72
 
73
+ # ✅ Gradio UI با دکمه‌ی غیرفعال‌شونده
74
  with gr.Blocks() as app:
75
+ gr.Markdown("# 🚀 AutoTrain DeepSeek R1 (CPU) - (بدون توقف تا پایان)")
76
+
77
+ dataset_url = gr.Textbox(label="Dataset URL (Hugging Face)", placeholder="مثال: samsum")
78
+ model_url = gr.Textbox(label="Model URL (Hugging Face)", placeholder="مثال: deepseek-ai/deepseek-r1")
79
+ epochs = gr.Slider(minimum=1, maximum=10, step=1, value=3, label="تعداد Epochs")
80
 
81
+ train_button = gr.Button("شروع ترینینگ", interactive=True)
82
+ output_text = gr.Textbox(label="وضعیت ترینینگ")
 
83
 
84
+ # 🚀 بعد از کلیک دکمه را غیرفعال کنیم تا کار متوقف نشود
85
+ def disable_button(*args):
86
+ train_button.interactive = False # غیرفعال کردن دکمه
87
+ return train_model(*args)
88
 
89
+ train_button.click(disable_button, inputs=[dataset_url, model_url, epochs], outputs=output_text)
90
 
91
+ # ✅ اجرای Gradio در حالت قفل شده
92
+ app.queue() # این خط تضمین می‌کند که پردازش متوقف نشو��
93
+ app.launch(server_name="0.0.0.0", server_port=7860, share=True, blocking=True)