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() | |