Spaces:
Sleeping
Sleeping
File size: 3,688 Bytes
2b35f7d 0b40748 777e328 0b40748 777e328 e784c2f 777e328 0b40748 3f9d883 0b40748 3f9d883 0b40748 3f9d883 0b40748 3f9d883 0b40748 777e328 0b40748 777e328 e784c2f 0b40748 3f9d883 0b40748 e784c2f 0b40748 3f9d883 0b40748 3f9d883 0b40748 e784c2f 0b40748 3f9d883 0b40748 3f9d883 0b40748 3f9d883 e784c2f 3f9d883 0b40748 3f9d883 2b35f7d e784c2f |
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 |
import torch
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import get_peft_model, LoraConfig, TaskType
from datasets import load_dataset
device = "cpu" # ✅ اجباراً فقط روی CPU اجرا شود
def train_model(dataset_url, model_url, epochs):
try:
# 🚀 بارگیری مدل و توکنایزر با اجازه اجرای کد سفارشی و بدون نیاز به GPU
tokenizer = AutoTokenizer.from_pretrained(model_url, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_url,
trust_remote_code=True,
torch_dtype=torch.float32, # ✅ تغییر به float32 برای CPU
device_map="cpu" # ✅ اجباری کردن اجرای روی CPU
)
# ✅ تنظیم LoRA برای کاهش مصرف حافظه
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8,
lora_alpha=32,
lora_dropout=0.1,
target_modules=["q_proj", "v_proj"]
)
model = get_peft_model(model, lora_config)
model.to(device)
# ✅ بارگیری دیتاست
dataset = load_dataset(dataset_url)
# ✅ توکنایز کردن دادهها
def tokenize_function(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=256)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
train_dataset = tokenized_datasets["train"]
# ✅ تنظیمات ترینینگ
training_args = TrainingArguments(
output_dir="./deepseek_lora_cpu",
evaluation_strategy="epoch",
learning_rate=5e-4,
per_device_train_batch_size=1, # کاهش مصرف RAM
per_device_eval_batch_size=1,
num_train_epochs=int(epochs),
save_strategy="epoch",
save_total_limit=2,
logging_dir="./logs",
logging_steps=10,
fp16=False, # ❌ غیرفعالسازی FP16 چون روی CPU اجرا میشود
gradient_checkpointing=True,
optim="adamw_torch",
report_to="none"
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset
)
# 🚀 شروع ترینینگ (قفل شده تا پایان)
trainer.train()
trainer.save_model("./deepseek_lora_finetuned")
tokenizer.save_pretrained("./deepseek_lora_finetuned")
return "✅ ترینینگ کامل شد! مدل ذخیره شد."
except Exception as e:
return f"❌ خطا: {str(e)}"
# ✅ رابط کاربری Gradio
with gr.Blocks() as app:
gr.Markdown("# 🚀 AutoTrain DeepSeek R1 (CPU) - (بدون توقف تا پایان)")
dataset_url = gr.Textbox(label="Dataset URL (Hugging Face)", placeholder="مثال: samsum")
model_url = gr.Textbox(label="Model URL (Hugging Face)", placeholder="مثال: deepseek-ai/deepseek-r1")
epochs = gr.Slider(minimum=1, maximum=10, step=1, value=3, label="تعداد Epochs")
train_button = gr.Button("شروع ترینینگ", interactive=True)
output_text = gr.Textbox(label="وضعیت ترینینگ")
def disable_button(*args):
train_button.interactive = False
return train_model(*args)
train_button.click(disable_button, inputs=[dataset_url, model_url, epochs], outputs=output_text)
app.queue()
app.launch(server_name="0.0.0.0", server_port=7860, share=True) |