Spaces:
Running
Running
File size: 5,537 Bytes
7a5daaa cd55d3d 7a5daaa f6381f8 7a5daaa f5a62d4 7a5daaa 50cfc1c 7a5daaa 50cfc1c 7a5daaa ae354c0 7a5daaa f6381f8 7a5daaa f6381f8 7a5daaa f6381f8 7a5daaa f5a62d4 50cfc1c f6381f8 ccd7a84 7a5daaa |
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 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
#BS_app.py_03
#Training OK But Need To Creat New Folder For 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 le fine-tuning
#def fine_tune_model(dataset_path, dataset_file, epochs, batch_size, prefix):
# # 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})
#
# # 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)
def fine_tune_model(dataset_path, dataset_file, epochs, batch_size, prefix):
import json # Assurez-vous que json est importé
# 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
def preprocess_function(examples):
inputs = [q + ' ' + c for q, c in zip(examples['question'], examples['chosen'])]
model_inputs = tokenizer(inputs, truncation=True, padding='max_length', max_length=512)
model_inputs["labels"] = model_inputs["input_ids"].copy()
return model_inputs
dataset = dataset.map(preprocess_function, 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=f"./{prefix}_{model_name.split('/')[-1]}",
num_train_epochs=epochs,
per_device_train_batch_size=batch_size,
save_steps=10_000,
save_total_limit=2,
push_to_hub=False, # Désactiver la création automatique de repo
hub_token=hf_token,
)
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 avec un préfixe
trainer.save_model(f"./{prefix}_{model_name.split('/')[-1]}")
tokenizer.save_pretrained(f"./{prefix}_{model_name.split('/')[-1]}")
# Push vers Hugging Face Hub avec le bon repo_id
api = HfApi()
api.upload_folder(
folder_path=f"./{prefix}_{model_name.split('/')[-1]}",
repo_id=model_name, # Utiliser le même repo_id que le modèle original
repo_type="model",
token=hf_token,
)
return "Fine-tuning terminé et modèle sauvegardé."
# 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="Entrez votre message pour obtenir une réponse du 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)
prefix = gr.Textbox(label="Préfixe pour les fichiers sauvegardés")
fine_tune_button = gr.Button("Lancer le Fine-Tuning")
fine_tune_output = gr.Textbox(label="État du Fine-Tuning")
fine_tune_button.click(
fine_tune_model,
inputs=[dataset_path, dataset_file, epochs, batch_size, prefix],
outputs=fine_tune_output
)
# Lancement de la démo
if __name__ == "__main__":
demo.launch()
|