File size: 3,541 Bytes
2a3e81b
 
dbff60b
2a3e81b
 
dbff60b
2a3e81b
dbff60b
013742b
 
 
 
 
 
 
 
 
 
2a3e81b
 
 
 
 
 
 
 
 
 
 
 
 
dbff60b
2a3e81b
f53e75d
dbff60b
2a3e81b
f53e75d
2a3e81b
 
dbff60b
2a3e81b
 
 
 
 
 
 
 
 
 
 
f53e75d
2a3e81b
 
 
 
 
 
dbff60b
2a3e81b
 
 
 
 
dbff60b
 
 
 
 
 
 
 
 
 
 
 
2a3e81b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dbff60b
2a3e81b
 
 
 
 
 
f53e75d
dbff60b
 
 
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
#testing bloom1b training


import gradio as gr
import os
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments, DataCollatorForLanguageModeling
from datasets import load_dataset
from huggingface_hub import HfApi, HfFolder

# Récupérer le 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, epochs, batch_size):
    # Chargement du dataset
    if dataset_path.startswith("https://huggingface.co/datasets/"):
        dataset = load_dataset('json', data_files={'train': dataset_path})
    else:
        dataset = load_dataset('json', data_files={'train': dataset_path})

    # Préparation des données
    data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)

    # Configuration de l'entraînement
    training_args = TrainingArguments(
        output_dir="./results",
        num_train_epochs=epochs,
        per_device_train_batch_size=batch_size,
        save_steps=10_000,
        save_total_limit=2,
        push_to_hub=True,
        hub_model_id=model_name,
        hub_strategy="checkpoint",
        hub_token=hf_token,
    )

    trainer = Trainer(
        model=model,
        args=training_args,
        data_collator=data_collator,
        train_dataset=dataset['train'],
    )

    # Lancement de l'entraînement
    trainer.train()

    # Sauvegarde du modèle avec un préfixe
    trainer.save_model(f"./FT01_{model_name.split('/')[-1]}")
    tokenizer.save_pretrained(f"./FT01_{model_name.split('/')[-1]}")

    # Push vers Hugging Face Hub
    api = HfApi()
    api.upload_folder(
        folder_path=f"./FT01_{model_name.split('/')[-1]}",
        repo_id=model_name,
        repo_type="model"
    )

    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")
            epochs = gr.Number(label="Nombre d'époques", value=1)
            batch_size = gr.Number(label="Taille du batch", value=2)
            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, epochs, batch_size],
            outputs=fine_tune_output
        )

# Lancement de la démo
if __name__ == "__main__":
    demo.launch()