File size: 4,589 Bytes
1946897 6f5ec4e cbc6f45 6f5ec4e cbc6f45 1946897 cbc6f45 6f5ec4e cbc6f45 6f5ec4e cbc6f45 6f5ec4e cbc6f45 1946897 cbc6f45 6f5ec4e cbc6f45 |
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 |
import os
import json
import sys
from datetime import datetime
import traceback
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from datasets import load_dataset
import torch
import pandas as pd
from huggingface_hub import login
from connect_huggingface import setup_huggingface
import gradio as gr
class TrainingCallback:
def __init__(self):
self.logs = []
def on_log(self, args, state, control, logs=None, **kwargs):
if logs:
self.logs.append(logs)
def get_logs(self):
return "\n".join([str(log) for log in self.logs])
def start_training():
try:
# Configuration de Hugging Face
if not setup_huggingface():
return "Erreur : Impossible de configurer Hugging Face", "### Logs d'entraînement\nErreur de configuration Hugging Face"
# Initialiser les logs
status = "Configuration de l'environnement..."
logs = f"### Logs d'entraînement\nDémarrage à {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"
# Charger la configuration
with open('config.json', 'r') as f:
config = json.load(f)
# Charger le modèle et le tokenizer
logs += "- Chargement du modèle et du tokenizer...\n"
tokenizer = AutoTokenizer.from_pretrained(config['model']['tokenizer'])
model = AutoModelForCausalLM.from_pretrained(
config['model']['name'],
torch_dtype=torch.bfloat16 if config['training']['bf16'] else torch.float32,
device_map="auto"
)
# Charger le dataset
status = "Chargement du dataset..."
logs += f"- Chargement de {config['dataset']['name']}...\n"
dataset = load_dataset(config['dataset']['name'])
# Configurer l'entraînement
status = "Configuration de l'entraînement..."
logs += "- Configuration des paramètres d'entraînement...\n"
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=config['training']['epochs'],
per_device_train_batch_size=config['training']['batch_size'],
learning_rate=config['training']['learning_rate'],
warmup_ratio=config['training']['warmup_ratio'],
evaluation_strategy=config['training']['evaluation_strategy'],
eval_steps=config['training']['eval_steps'],
save_strategy=config['training']['save_strategy'],
save_steps=config['training']['save_steps'],
save_total_limit=config['training']['save_total_limit'],
load_best_model_at_end=config['training']['load_best_model_at_end'],
metric_for_best_model=config['training']['metric_for_best_model'],
greater_is_better=config['training']['greater_is_better'],
gradient_accumulation_steps=config['training']['gradient_accumulation_steps'],
logging_steps=config['training']['logging_steps'],
fp16=config['training']['fp16'],
bf16=config['training']['bf16']
)
# Créer le callback pour les logs
callback = TrainingCallback()
# Créer le Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset[config['dataset']['train_split']],
eval_dataset=dataset[config['dataset']['eval_split']],
callbacks=[callback]
)
# Démarrer l'entraînement
status = "Entraînement en cours..."
logs += "- Début de l'entraînement...\n"
trainer.train()
# Ajouter les logs d'entraînement
logs += "\n### Logs détaillés\n"
logs += callback.get_logs()
status = "Entraînement terminé avec succès!"
logs += "\n\nEntraînement terminé avec succès!"
return status, logs
except Exception as e:
error_msg = f"Erreur pendant l'entraînement : {str(e)}\n{traceback.format_exc()}"
print(error_msg)
return "Erreur pendant l'entraînement", f"### Logs d'entraînement\n❌ {error_msg}"
# Interface Gradio
demo = gr.Interface(
fn=start_training,
inputs=[],
outputs=[gr.Textbox(label="Statut de l'entraînement"), gr.Markdown(label="Logs de l'entraînement")],
title="AUTO Training Space",
description="Cliquez sur le bouton pour lancer l'entraînement du modèle."
)
if __name__ == "__main__":
demo.launch()
|