Come ottimizzare il Mistral AI 7B LLM con Hugging Face AutoTrain

Come ottimizzare il Mistral AI 7B LLM con Hugging Face AutoTrain e ottenere i migliori risultati

 

Con i progressi della ricerca LLM in tutto il mondo, molti modelli sono diventati più accessibili. Uno dei modelli open-source piccoli ma potenti è Mistral AI 7B LLM. Il modello vanta una grande adattabilità su molti casi d’uso, mostrando una performance migliore rispetto a LlaMA 2 13B su tutti i benchmark, utilizzando un meccanismo di attenzione a finestra scorrevole (SWA) e con facilità di implementazione.

La performance complessiva del benchmark di Mistral 7 B può essere osservata nell’immagine qui sotto.

  

Il modello Mistral 7B è disponibile anche su HuggingFace. Con questo, possiamo utilizzare Hugging Face AutoTrain per adattare il modello ai nostri casi d’uso. Hugging Face AutoTrain è una piattaforma no-code con Python API che possiamo utilizzare per adattare qualsiasi modello LLM disponibile in HugginFace facilmente.

Questo tutorial ci insegnerà ad adattare Mistral AI 7B LLM con Hugging Face AutoTrain. Come funziona? Scopriamolo insieme.

 

Preparazione dell’ambiente e del dataset

 

Per adattare il modello LLM con Python API, dobbiamo installare il pacchetto Python, che puoi eseguire utilizzando il seguente codice.

pip install -U autotrain-advanced

 

Inoltre, utilizzeremo il dataset di esempio Alpaca da HuggingFace, che richiede il pacchetto datasets per acquisire il dataset e il pacchetto transformers per manipolare il modello di Hugging Face.

pip install datasets transformers

 

Successivamente, dobbiamo formattare i nostri dati per l’adattamento del modello Mistral 7B. In generale, Mistral ha rilasciato due modelli fondamentali: Mistral 7B v0.1 e Mistral 7B Instruct v0.1. Mistral 7B v0.1 è il modello fondamentale di base, mentre Mistral 7B Instruct v0.1 è un modello Mistral 7B v0.1 che è stato adattato per la conversazione e la risposta alle domande.

Avere un file CSV contenente una colonna di testo per l’adattamento con Hugging Face AutoTrain. Tuttavia, utilizzeremo un formato di testo diverso per i modelli di base e di istruzione durante l’adattamento.

Prima, diamo un’occhiata al dataset che abbiamo utilizzato per il nostro esempio.

from datasets import load_dataset
import pandas as pd
# Carica il dataset
train = load_dataset("tatsu-lab/alpaca", split='train[:10%]')
train = pd.DataFrame(train)

 

Il codice sopra prenderà il dieci percento dei campioni dei dati effettivi. Ne avremo solo bisogno di così tanto per questo tutorial, in quanto richiederebbe più tempo per l’addestramento con dati più grandi. Il nostro campione di dati assomiglia all’immagine qui sotto.

  

Il dataset contiene già le colonne di testo con un formato di cui abbiamo bisogno per ottimizzare il nostro modello LLM. Ecco perché non dobbiamo fare niente. Tuttavia, fornirò un codice se hai un altro dataset che necessita di formattazione.

def formattazione_testo(data):    # Se la colonna di input non è vuota    if data['input']:        testo = f"""Di seguito è presente un'istruzione che descrive un compito, abbinata a un input che fornisce ulteriore contesto. Scrivi una risposta che completi adeguatamente la richiesta.\n\n### Istruzione:\n{data["instruction"]} \n\n### Input:\n{data["input"]}\n\n### Risposta:\n{data["output"]}"""    else:        testo = f"""Di seguito è presente un'istruzione che descrive un compito. Scrivi una risposta che completi adeguatamente la richiesta.\n\n### Istruzione:\n{data["instruction"]}\n\n### Risposta:\n{data["output"]}"""     return testoaddestramento['testo'] = addestramento.apply(formattazione_testo, axis =1)

 

Per l’Hugging Face AutoTrain, avremmo bisogno dei dati nel formato CSV in modo da poterli salvare con il seguente codice.

addestramento.to_csv('addestramento.csv', index = False)

 

Quindi, sposta il CSV risultante in una cartella chiamata “data”. Questo è tutto ciò che devi fare per preparare il dataset per l’ottimizzazione del modello Mistral 7B v0.1.

Se desideri ottimizzare il modello Mistral 7B Instruct v0.1 per la conversazione e la risposta alle domande, è necessario seguire il formato del template di chat fornito da Mistral, mostrato nell’area del codice sottostante.

<s>[INST] Istruzione [/INST] Risposta del modello</s>[INST] Istruzione di completamento [/INST]

 

Se utilizziamo il nostro dataset di esempio precedente, è necessario riformattare la colonna di testo. Useremo solo i dati senza alcun input per il modello di chat.

addestramento_chat = addestramento[addestramento['input'] == ''].reset_index(drop = True).copy()

 

Quindi, possiamo riformattare i dati con il seguente codice.

def formato_chat(data):  testo = f"<s>[INST] {data['instruction']} [/INST] {data['output']} </s>"  return testoaddestramento_chat['testo'] = addestramento_chat.apply(formato_chat, axis =1)addestramento_chat.to_csv('addestramento_chat.csv', index =False)

 

Termineremo con un dataset appropriato per ottimizzare il modello Mistral 7B Instruct v0.1.

  

Con tutte le preparazioni effettuate, ora possiamo avviare l’AutoTrain per ottimizzare il nostro modello Mistral.

 

Allenamento e ottimizzazione

 

Impostiamo l’ambiente di AutoTrain di Hugging Face per ottimizzare il modello Mistral. Prima, eseguiamo la configurazione di AutoTrain utilizzando il comando seguente.

!autotrain setup

 

Successivamente, forniremo le informazioni necessarie affinché AutoTrain possa essere eseguito. Per questo tutorial, utilizzeremo il modello Mistral 7B Instruct v0.1.

nome_progetto = 'my_autotrain_llm'nome_modello = 'mistralai/Mistral-7B-Instruct-v0.1'

 

Quindi, aggiungeremo le informazioni di Hugging Face se desideri caricare il tuo modello nel repository.

push_to_hub = Falsehf_token = "IL TUO TOKEN HF"repo_id = "nome_utente/nome_repo"

 

Infine, inizieremo l’impostazione dei parametri del modello nelle variabili seguenti. Puoi cambiarli per vedere se il risultato è buono.

learning_rate = 2e-4num_epochs = 4batch_size = 1block_size = 1024trainer = "sft"warmup_ratio = 0.1weight_decay = 0.01gradient_accumulation = 4use_fp16 = Trueuse_peft = Trueuse_int4 = Truelora_r = 16lora_alpha = 32lora_dropout = 0.045

 

Possiamo regolare molti parametri ma non li discuteremo in questo articolo. Alcuni suggerimenti per migliorare il fine-tuning LLM includono l’utilizzo di un tasso di apprendimento più basso per mantenere le rappresentazioni pre-apprese e viceversa, evitare l’overfitting regolando il numero di epoche, utilizzare una batch size più grande per garantire stabilità o regolare l’accumulo del gradiente se si ha un problema di memoria.

Quando tutte le informazioni sono pronte, impostiamo l’ambiente per accettare tutte le informazioni che abbiamo precedentemente impostato.

import osos.environ["PROJECT_NAME"] = project_nameos.environ["MODEL_NAME"] = model_nameos.environ["PUSH_TO_HUB"] = str(push_to_hub)os.environ["HF_TOKEN"] = hf_tokenos.environ["REPO_ID"] = repo_idos.environ["LEARNING_RATE"] = str(learning_rate)os.environ["NUM_EPOCHS"] = str(num_epochs)os.environ["BATCH_SIZE"] = str(batch_size)os.environ["BLOCK_SIZE"] = str(block_size)os.environ["WARMUP_RATIO"] = str(warmup_ratio)os.environ["WEIGHT_DECAY"] = str(weight_decay)os.environ["GRADIENT_ACCUMULATION"] = str(gradient_accumulation)os.environ["USE_FP16"] = str(use_fp16)os.environ["USE_PEFT"] = str(use_peft)os.environ["USE_INT4"] = str(use_int4)os.environ["LORA_R"] = str(lora_r)os.environ["LORA_ALPHA"] = str(lora_alpha)os.environ["LORA_DROPOUT"] = str(lora_dropout)

 

Utilizzeremo il seguente comando per eseguire l’AutoTrain nel nostro notebook.

!autotrain llm \--train \--model ${MODEL_NAME} \--project-name ${PROJECT_NAME} \--data-path data/ \--text-column text \--lr ${LEARNING_RATE} \--batch-size ${BATCH_SIZE} \--epochs ${NUM_EPOCHS} \--block-size ${BLOCK_SIZE} \--warmup-ratio ${WARMUP_RATIO} \--lora-r ${LORA_R} \--lora-alpha ${LORA_ALPHA} \--lora-dropout ${LORA_DROPOUT} \--weight-decay ${WEIGHT_DECAY} \--gradient-accumulation ${GRADIENT_ACCUMULATION} \$( [[ "$USE_FP16" == "True" ]] && echo "--fp16" ) \$( [[ "$USE_PEFT" == "True" ]] && echo "--use-peft" ) \$( [[ "$USE_INT4" == "True" ]] && echo "--use-int4" ) \$( [[ "$PUSH_TO_HUB" == "True" ]] && echo "--push-to-hub --token ${HF_TOKEN} --repo-id ${REPO_ID}" )

 

Se il processo di fine-tuning ha successo, avremo una nuova directory del nostro modello fine-tuned. Utilizzeremo questa directory per testare il nostro modello appena fine-tuned.

from transformers import AutoModelForCausalLM, AutoTokenizermodel_path = "my_autotrain_llm"tokenizer = AutoTokenizer.from_pretrained(model_path)model = AutoModelForCausalLM.from_pretrained(model_path)

 

Con il modello e il tokenizer pronti all’uso, proveremo il modello con un esempio di input.

input_text = "Dai tre consigli per rimanere in salute."input_ids = tokenizer.encode(input_text, return_tensors="pt")output = model.generate(input_ids, max_new_tokens = 200)predicted_text = tokenizer.decode(output[0], skip_special_tokens=True)print(predicted_text)

 

Output:

Dai tre consigli per rimanere in salute.

  1. Mangia una dieta bilanciata: Assicurati di includere abbondanza di frutta, verdura, proteine magre e cereali integrali nella tua dieta. Questo ti aiuterà ad ottenere i nutrienti necessari per rimanere in salute ed energizzati.
  2. Fai esercizio regolarmente: Cerca di dedicare almeno 30 minuti di esercizio moderato, come una camminata veloce o una pedalata, ogni giorno. Questo ti aiuterà a mantenere un peso sano, ridurre il rischio di malattie croniche e migliorare la tua salute fisica e mentale complessiva.
  3. Dormi a sufficienza: Cerca di dormire 7-9 ore di sonno di qualità ogni notte. Questo ti aiuterà a sentirti più riposato e vigile durante il giorno, e ti aiuterà anche a mantenere un peso sano e ridurre il rischio di malattie croniche.

Il risultato del modello è stato vicino all’output effettivo dei nostri dati di addestramento, mostrato nell’immagine qui sotto.

  1. Mangia una dieta equilibrata e assicurati di includere abbondanza di frutta e verdura.
  2. Esercitati regolarmente per mantenere il tuo corpo attivo e forte.
  3. Dormi a sufficienza e mantieni una routine del sonno costante.

I modelli Mistral sono certamente potenti per le loro dimensioni, poiché una semplice messa a punto ha già mostrato risultati promettenti. Prova il tuo dataset per vedere se si adatta al tuo lavoro.

 

Conclusioni

 

Il modello Mistral AI 7B è un potente modello LLM che vanta prestazioni superiori a LLaMA e grande adattabilità. Poiché il modello è disponibile su Hugging Face, possiamo utilizzare HuggingFace AutoTrain per la messa a punto del modello. Attualmente ci sono due modelli disponibili per la messa a punto su Hugging Face: Mistral 7B v0.1 come modello di base fondamentale e Mistral 7B Instruct v0.1 per conversazioni e risposte alle domande. La messa a punto ha mostrato risultati promettenti anche con un processo di addestramento veloce.

[Cornellius Yudha Wijaya](https://www.linkedin.com/in/cornellius-yudha-wijaya/) è un assistente manager di data science e scrittore di dati. Mentre lavora a tempo pieno presso Allianz Indonesia, ama condividere consigli su Python e Data tramite i social media e i media di scrittura.