Testing_BrokenSpace / app.py_04_NOK
MisterAI's picture
Rename app.py to app.py_04_NOK
71c3e10 verified
#BS_app.py_04
#Training OK BUT Need new folder to save training session
#testing bloom1b training
import gradio as gr
import os
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments, DataCollatorForLanguageModeling
from datasets import load_dataset, Dataset
from huggingface_hub import HfApi, HfFolder
import requests
from io import BytesIO
# Récupérer token depuis les variables d'environnement
hf_token = os.getenv("MisterAI_bigscience_bloom_560m")
# Configurer le token pour l'utilisation avec Hugging Face
if hf_token:
HfFolder.save_token(hf_token)
else:
raise ValueError("Le token Hugging Face n'est pas configuré. Assurez-vous qu'il est défini dans les variables d'environnement.")
# Chargement du modèle et du tokenizer
model_name = "MisterAI/bigscience_bloom-560m"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Fonction pour générer une réponse
def generate_response(input_text):
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_length=100)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response
# Fonction pour créer un nouveau répertoire d'entraînement et sauvegarder le modèle
def create_training_folder_and_save_model(dataset_path, dataset_file, epochs, batch_size):
# Récupération du chemin du répertoire de base
# base_path = os.path.join(model_name, "FT")
base_path = os.path.join(model_name, "resolve", "main", "FT")
# Récupération des dossiers existants et incrémentation du numéro
# existing_folders = [folder for folder in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, folder))]
existing_folders = [folder for folder in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, folder))]
new_folder_num = len(existing_folders) + 1
new_folder_name = f"TRAIN{new_folder_num:02d}"
# Création du nouveau répertoire d'entraînement
new_folder_path = os.path.join(base_path, new_folder_name)
os.makedirs(new_folder_path, exist_ok=True)
# Affichage des logs
print("Création du nouveau répertoire d'entraînement en cours...")
print(f"Nouveau répertoire créé : {new_folder_path}")
# # Chargement du dataset
# if dataset_path.startswith("https://huggingface.co/datasets/"):
# dataset = load_dataset('json', data_files={dataset_file: dataset_path})
# else:
# dataset = load_dataset('json', data_files={dataset_file: dataset_path})
# Récupération du fichier à partir de l'URL fournie
response = requests.get(f"{dataset_path}/resolve/main/{dataset_file}")
dataset_lines = response.text.strip().split('\n')
# Convertir les lignes en dictionnaires pour JSONL
dataset_dict = [json.loads(line) for line in dataset_lines if line]
# Créer un Dataset Hugging Face
dataset = Dataset.from_dict({
'question': [item['question'] for item in dataset_dict],
'chosen': [item['chosen'] for item in dataset_dict]
})
# Préparation des données
dataset = Dataset.from_dict(dataset[dataset_file])
dataset = dataset.map(lambda x: tokenizer(x['question'] + ' ' + x['chosen'], truncation=True, padding='max_length'), batched=True)
dataset.set_format(type='torch', columns=['input_ids', 'attention_mask', 'labels'])
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
# Configuration de l'entraînement
training_args = TrainingArguments(
output_dir=new_folder_path, # Sauvegarder dans le nouveau répertoire
num_train_epochs=epochs,
per_device_train_batch_size=batch_size,
save_steps=10_000,
save_total_limit=2,
push_to_hub=False,
)
trainer = Trainer(
model=model,
args=training_args,
data_collator=data_collator,
train_dataset=dataset
)
# Lancement de l'entraînement
trainer.train()
# Sauvegarde du modèle dans le nouveau répertoire
trainer.save_model(new_folder_path)
tokenizer.save_pretrained(new_folder_path)
# Push vers Hugging Face Hub avec le bon repo_id
api = HfApi()
api.upload_folder(
folder_path=new_folder_path,
repo_id=model_name,
repo_type="model",
token=hf_token
)
return f"Fine-tuning terminé et modèle sauvegardé dans {new_folder_path}."
# Interface Gradio
with gr.Blocks() as demo:
with gr.Tab("Chatbot"):
chat_interface = gr.Interface(
fn=generate_response,
inputs="text",
outputs="text",
title="Chat avec le modèle",
description="Tester Le Modèle"
)
with gr.Tab("Fine-Tuning"):
with gr.Row():
dataset_path = gr.Textbox(label="Chemin du dataset")
dataset_file = gr.Textbox(label="Nom du fichier du dataset")
epochs = gr.Number(label="Nombre d'époques", value=1)
batch_size = gr.Number(label="Taille du batch", value=2)
with gr.Row():
fine_tune_button = gr.Button("Lancer le Fine-Tuning")
with gr.Row():
fine_tune_output = gr.Textbox(label="État du Fine-Tuning")
fine_tune_button.click(
create_training_folder_and_save_model,
inputs=[dataset_path, dataset_file, epochs, batch_size],
outputs=fine_tune_output
)
# Lancement de la démo
if __name__ == "__main__":
demo.launch()
# Je n'ai pas trouvé de documentation officielle sur la création de répertoires dans l'espace de travail Hugging Face.