Spaces:
Sleeping
Sleeping
File size: 4,664 Bytes
e4fd642 | 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 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | import gradio as gr
import os
import subprocess
from huggingface_hub import login
# Interface pour l'entraînement
def train_model(token, username, model_name, dataset_name, epochs, batch_size, learning_rate):
# Authentification
login(token=token)
# Cloner le dépôt du modèle
repo_id = f"{username}/{model_name}"
os.system(f"git clone https://huggingface.co/{repo_id}")
os.chdir(model_name)
# Installer les dépendances
os.system("pip install transformers datasets torch numpy tqdm wandb matplotlib pandas scikit-learn huggingface_hub accelerate evaluate tensorboard")
# Créer un script d'entraînement
train_script = f"""
from transformers import Trainer, TrainingArguments
from datasets import load_dataset
import torch
import torch.nn as nn
import os
import sys
import logging
# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Importer les modules nécessaires
from modeling_recipe_generator import RecipeGeneratorForHF, RecipeGeneratorConfig
def main():
logger.info("Chargement du dataset depuis Hugging Face...")
# Charger le dataset depuis Hugging Face
dataset = load_dataset("{username}/{dataset_name}")
logger.info("Chargement de la configuration du modèle...")
# Charger la configuration
config = RecipeGeneratorConfig.from_pretrained("{username}/{model_name}")
logger.info("Création du modèle...")
# Créer le modèle
model = RecipeGeneratorForHF(config)
logger.info("Configuration des arguments d'entraînement...")
# Définir les arguments d'entraînement
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs={epochs},
per_device_train_batch_size={batch_size},
per_device_eval_batch_size={batch_size},
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=100,
evaluation_strategy="steps",
eval_steps=500,
save_steps=1000,
save_total_limit=2,
learning_rate={learning_rate},
fp16=True, # Utiliser la précision mixte
gradient_accumulation_steps=4,
push_to_hub=True,
hub_model_id="{username}/{model_name}",
hub_strategy="every_save"
)
# Définir la fonction de calcul des métriques
def compute_metrics(eval_pred):
predictions, labels = eval_pred
# Calculer la perplexité
loss = torch.nn.functional.cross_entropy(
torch.tensor(predictions).view(-1, predictions.shape[-1]),
torch.tensor(labels).view(-1)
)
perplexity = torch.exp(loss)
return {{
"perplexity": perplexity.item()
}}
logger.info("Initialisation du Trainer...")
# Initialiser le trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
eval_dataset=dataset["test"],
compute_metrics=compute_metrics
)
logger.info("Démarrage de l'entraînement...")
# Lancer l'entraînement
trainer.train()
logger.info("Entraînement terminé. Sauvegarde du modèle final...")
# Sauvegarder le modèle final
trainer.save_model("./final_model")
logger.info("Envoi du modèle final vers Hugging Face Hub...")
# Pousser le modèle final vers Hugging Face
trainer.push_to_hub()
logger.info("Processus d'entraînement terminé avec succès!")
if __name__ == "__main__":
main()
"""
with open("train_custom.py", "w") as f:
f.write(train_script)
# Lancer l'entraînement
result = subprocess.run(["python", "train_custom.py"], capture_output=True, text=True)
return result.stdout + "\n\n" + result.stderr
# Créer l'interface
iface = gr.Interface(
fn=train_model,
inputs=[
gr.Textbox(label="Token Hugging Face", type="password"),
gr.Textbox(label="Nom d'utilisateur Hugging Face"),
gr.Textbox(label="Nom du modèle", value="recettes-generator"),
gr.Textbox(label="Nom du dataset", value="recettes-dataset"),
gr.Slider(minimum=1, maximum=10, value=3, step=1, label="Nombre d'époques"),
gr.Slider(minimum=1, maximum=32, value=8, step=1, label="Taille du batch"),
gr.Slider(minimum=1e-6, maximum=1e-3, value=5e-5, step=1e-6, label="Taux d'apprentissage")
],
outputs="text",
title="Entraînement du modèle de génération de recettes",
description="Entraînez votre modèle directement sur l'infrastructure de Hugging Face"
)
iface.launch() |