Spaces:
Runtime error
Runtime error
File size: 4,588 Bytes
7b02281 0462c81 2636834 0462c81 1527ee9 a7bd5fa 0462c81 1527ee9 0462c81 2636834 1527ee9 a7bd5fa 0462c81 1527ee9 0462c81 1527ee9 7b02281 0462c81 1527ee9 0462c81 1527ee9 413d0ff 1527ee9 413d0ff 0462c81 1527ee9 0462c81 1527ee9 413d0ff 1527ee9 413d0ff 1527ee9 0462c81 1527ee9 0462c81 1527ee9 413d0ff 1527ee9 0462c81 1527ee9 0462c81 1527ee9 0462c81 1527ee9 413d0ff 1527ee9 413d0ff 1527ee9 7b02281 0462c81 1527ee9 0462c81 1527ee9 0462c81 1527ee9 0462c81 1527ee9 0462c81 1527ee9 0462c81 2636834 1527ee9 |
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 111 112 113 114 |
import os
import gradio as gr
from huggingface_hub import login
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments, DataCollatorForLanguageModeling, pipeline
from peft import PeftModel
# ============================================================
# 🔐 Autenticación HuggingFace
# ============================================================
hf_token = os.environ.get("HF_TOKEN")
if hf_token:
login(token=hf_token)
else:
print("⚠️ No se encontró el token. Agrega 'HF_TOKEN' en Settings → Secrets.")
# ============================================================
# ⚙️ Configuración del modelo y dataset
# ============================================================
BASE_MODEL = "bigcode/santacoder" # Modelo público
LORA_PATH = "./lora_output" # Carpeta donde se guardará LoRA
DATASET_PATH = "tu_dataset.json" # Cambia aquí al nombre de tu dataset
# ============================================================
# 🧩 Función de entrenamiento LoRA
# ============================================================
def train_lora(epochs, batch_size, learning_rate):
try:
dataset = load_dataset("json", data_files=DATASET_PATH)
tokenized = dataset.map(
lambda e: tokenizer(
e["prompt"] + e["completion"],
truncation=True,
padding="max_length",
max_length=256
),
batched=True
)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
training_args = TrainingArguments(
output_dir=LORA_PATH,
per_device_train_batch_size=int(batch_size),
num_train_epochs=int(epochs),
learning_rate=learning_rate,
save_total_limit=1,
logging_steps=10,
push_to_hub=False
)
trainer = Trainer(
model=base_model,
args=training_args,
train_dataset=tokenized["train"],
data_collator=data_collator,
)
trainer.train()
# Guardar LoRA
model.save_pretrained(LORA_PATH)
tokenizer.save_pretrained(LORA_PATH)
return "✅ Entrenamiento completado y guardado en ./lora_output"
except Exception as e:
return f"❌ Error durante el entrenamiento: {e}"
# ============================================================
# 🤖 Función para generar texto usando LoRA sobre el modelo base
# ============================================================
def generate_text(prompt_text):
try:
# Cargar modelo base
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
base_model = AutoModelForCausalLM.from_pretrained(BASE_MODEL)
# Aplicar LoRA
model = PeftModel.from_pretrained(base_model, LORA_PATH)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
output = generator(prompt_text, max_new_tokens=100, temperature=0.7, top_p=0.9)
return output[0]["generated_text"]
except Exception as e:
return f"❌ Error generando texto: {e}"
# ============================================================
# 💻 Interfaz Gradio
# ============================================================
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
base_model = AutoModelForCausalLM.from_pretrained(BASE_MODEL)
with gr.Blocks(title="AmorCoderAI - Entrenamiento LoRA") as demo:
gr.Markdown("# 💙 AmorCoderAI - Entrenamiento y Pruebas")
gr.Markdown("Entrena y prueba tu modelo basado en `bigcode/santacoder` con LoRA")
with gr.Tab("🧠 Entrenar"):
epochs = gr.Number(value=1, label="Épocas")
batch_size = gr.Number(value=2, label="Tamaño de lote")
learning_rate = gr.Number(value=5e-5, label="Tasa de aprendizaje")
train_button = gr.Button("🚀 Iniciar entrenamiento")
train_output = gr.Textbox(label="Resultado")
train_button.click(train_lora, inputs=[epochs, batch_size, learning_rate], outputs=train_output)
with gr.Tab("✨ Probar modelo"):
prompt = gr.Textbox(label="Escribe un prompt")
generate_button = gr.Button("💬 Generar texto")
output_box = gr.Textbox(label="Salida generada")
generate_button.click(generate_text, inputs=prompt, outputs=output_box)
# ============================================================
# 🚀 Lanzar app
# ============================================================
if __name__ == "__main__":
demo.launch() |