Spaces:
Sleeping
Sleeping
| 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() |