Spaces:
Sleeping
Sleeping
| #https://huggingface.co/spaces/MisterAI/Docker_AutoTrain_02 | |
| #app.py_01 | |
| #just POC | |
| import gradio as gr | |
| from transformers import AutoTokenizer, AutoModelForSeq2SeqLM | |
| from datasets import load_dataset | |
| import torch | |
| # Interface Gradio avec gr.Blocks | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Entraînement de modèle de transformateur") | |
| # Bloc pour sélectionner le modèle à entraîner | |
| model_name = gr.Textbox(label="Nom du modèle à entraîner") | |
| model_name.placeholder = "Nom du modèle à entraîner" | |
| model_name.value = "MisterAI/AIForce3" | |
| # Bloc pour sélectionner le jeu de données à utiliser | |
| dataset_path = gr.Textbox(label="Chemin du jeu de données") | |
| dataset_path.placeholder = "Chemin du jeu de données" | |
| dataset_path.value = "path/to/your/dataset" | |
| # Bloc pour entrer le nom du modèle une fois qu'il est entraîné | |
| model_name_checked = gr.Textbox(label="Nom du modèle entraîné") | |
| model_name_checked.placeholder = "Nom du modèle entraîné" | |
| model_name_checked.value = "Mistral-7B-Instruct-v0.3" | |
| # Bloc pour entrer l'emplacement où enregistrer le modèle entraîné | |
| model_path = gr.Textbox(label="Emplacement pour enregistrer le modèle entraîné") | |
| model_path.placeholder = "Emplacement pour enregistrer le modèle entraîné" | |
| model_path.value = "path/to/save/directory" | |
| # Bouton pour lancer l'entraînement | |
| submit = gr.Button("Lancer l'entraînement") | |
| # Bloc pour afficher les résultats de l'entraînement | |
| results = gr.Textbox(label="Résultats de l'entraînement") | |
| results.placeholder = "Résultats de l'entraînement" | |
| results.value = "" | |
| # Fonction pour entraîner le modèle | |
| def train_model(model_name, dataset_path, model_name_checked, model_path): | |
| # Charger le modèle pré-entraîné | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| model = AutoModelForSeq2SeqLM.from_pretrained(model_name) | |
| # Charger le jeu de données | |
| dataset = load_dataset(dataset_path) | |
| # Prétraiter les données pour l'entraînement | |
| def preprocess_function(examples): | |
| input_text = tokenizer.batch_encode([example["input_text"] for example in examples]) | |
| target_text = tokenizer.batch_encode([example["target_text"] for example in examples]) | |
| return {"input_ids": input_text, "attention_mask": input_text, "labels": target_text} | |
| dataset = dataset.map(preprocess_function, batched=True) | |
| # Configurer l'entraînement | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| model.to(device) | |
| optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5) | |
| criterion = torch.nn.CrossEntropyLoss() | |
| # Entraîner le modèle | |
| num_epochs = 3 | |
| for epoch in range(num_epochs): | |
| for batch in dataset: | |
| input_ids = batch["input_ids"].to(device) | |
| attention_mask = batch["attention_mask"].to(device) | |
| labels = batch["labels"].to(device) | |
| optimizer.zero_grad() | |
| outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels) | |
| loss = outputs.loss | |
| loss.backward() | |
| optimizer.step() | |
| print(f"Epoch {epoch+1}/{num_epochs}, Loss = {loss.item():.4f}") | |
| # Enregistrer le modèle entraîné | |
| model.save_pretrained(model_path) | |
| # Afficher les résultats de l'entraînement | |
| results.value = f"Modèle entraîné avec succès !\nNom du modèle : {model_name_checked}\nEmplacement : {model_path}" | |
| # Associer la fonction d'entraînement du modèle au bouton de soumission | |
| submit.click(fn=train_model, inputs=[model_name, dataset_path, model_name_checked, model_path], outputs=results) | |
| # Lancer l'interface Gradio | |
| demo.launch() | |