Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face

Mistral 7B-V0.2: Fine-Tuning Mistral’s New Open-Source LLM with Hugging Face
selvaraj_mistral_7bv02_finetuning_mistral_new_opensource_llm_hugging_face_3 Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face Intelligence artificielle

Mistral AI, l’une des principales sociétés de recherche en IA au monde, a récemment publié le modèle de base pour Mistral 7B v0.2.

Ce modèle de langage open source a été dévoilé lors de l’événement hackathon de l’entreprise le 23 mars 2024.

Les modèles Mistral 7B disposent de 7,3 milliards de paramètres, ce qui les rend extrêmement puissants. Ils surpassent Llama 2 13B et Llama 1 34B sur presque tous les benchmarks. Le dernier modèle V0.2 introduit, entre autres avancées, une fenêtre contextuelle de 32 Ko, améliorant sa capacité à traiter et à générer du texte.

De plus, la version récemment annoncée est le modèle de base de la variante optimisée pour les instructions, « Mistral-7B-Instruct-V0.2 », qui a été publiée plus tôt l’année dernière.

Dans ce tutoriel, je vais vous montrer comment accéder et affiner ce modèle de langage sur Hugging Face.

Nous peaufinerons le modèle de base Mistral 7B-v0.2 en utilisant la fonctionnalité AutoTrain de Hugging Face.

Visage câlin est réputé pour démocratiser l’accès aux modèles d’apprentissage automatique, permettant aux utilisateurs quotidiens de développer des solutions d’IA avancées.

AutoTrain, une fonctionnalité de Hugging Face, automatise le processus de formation des modèles, le rendant accessible et efficace.

Il aide les utilisateurs à sélectionner les meilleurs paramètres et techniques de formation lors du réglage fin des modèles, une tâche qui autrement peut s’avérer ardue et longue.

Voici 5 étapes pour peaufiner votre modèle Mistral-7B :

1. Mise en place de l’environnement

Vous devez d’abord créer un compte avec Hugging Face, puis créer un référentiel de modèles.

Pour y parvenir, suivez simplement les étapes fournies dans ce lien et revenons à ce tutoriel.

Nous formerons le modèle en Python. Lorsqu’il s’agit de sélectionner un environnement de bloc-notes pour la formation, vous pouvez utiliser Cahiers Kaggle ou Google Co.qui offrent tous deux un accès gratuit aux GPU.

Si le processus de formation prend trop de temps, vous souhaiterez peut-être passer à une plateforme cloud comme AWS Sagemaker ou Azure ML.

Enfin, effectuez les installations pip suivantes avant de commencer à coder ce didacticiel :

!pip install -U autotrain-advanced
!pip install datasets transformers

2. Préparation de votre ensemble de données

Dans ce tutoriel, nous utiliserons le Ensemble de données sur l’alpaga sur Hugging Face, qui ressemble à ceci :

selvaraj_mistral_7bv02_finetuning_mistral_new_opensource_llm_hugging_face_1 Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face Intelligence artificielle selvaraj_mistral_7bv02_finetuning_mistral_new_opensource_llm_hugging_face_1 Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face Intelligence artificielle
Nous affinerons le modèle sur des paires d’instructions et de sorties et évaluerons sa capacité à répondre à l’instruction donnée dans le processus d’évaluation.

Pour accéder et préparer cet ensemble de données, exécutez les lignes de code suivantes :

import pandas as pd
from datasets import load_dataset

# Load and preprocess dataset
def preprocess_dataset(dataset_name, split_ratio='train[:10%]', input_col="input", output_col="output"):
   dataset = load_dataset(dataset_name, split=split_ratio)
   df = pd.DataFrame(dataset)
   chat_df = df[df[input_col] == ''].reset_index(drop=True)
   return chat_df

# Formatting according to AutoTrain requirements
def format_interaction(row):
   formatted_text = f"[Begin] {row['instruction']} [End] {row['output']} [Close]"
   return formatted_text

# Process and save the dataset
if __name__ == "__main__":
   dataset_name = "tatsu-lab/alpaca"
   processed_data = preprocess_dataset(dataset_name)
   processed_data['formatted_text'] = processed_data.apply(format_interaction, axis=1)
  
   save_path="formatted_data/training_dataset"
   os.makedirs(save_path, exist_ok=True)
   file_path = os.path.join(save_path, 'formatted_train.csv')
   processed_data[['formatted_text']].to_csv(file_path, index=False)
   print("Dataset formatted and saved.")

La première fonction chargera l’ensemble de données Alpaca à l’aide de la bibliothèque « datasets » et le nettoiera pour garantir que nous n’incluons aucune instruction vide. La deuxième fonction structure vos données dans un format qu’AutoTrain peut comprendre.

Après avoir exécuté le code ci-dessus, l’ensemble de données sera chargé, formaté et enregistré dans le chemin spécifié. Lorsque vous ouvrez votre ensemble de données formaté, vous devriez voir une seule colonne intitulée « formatted_text ».

3. Mise en place de votre environnement de formation

Maintenant que vous avez préparé avec succès l’ensemble de données, passons à la configuration de votre environnement de formation de modèle.

Pour ce faire, vous devez définir les paramètres suivants :

project_name="mistralai"
model_name="alpindale/Mistral-7B-v0.2-hf"
push_to_hub = True
hf_token = 'your_token_here'
repo_id = 'your_repo_here.'

Voici un aperçu des spécifications ci-dessus :

  • Vous pouvez spécifier n’importe quel nom du projet. C’est ici que seront stockés tous vos fichiers de projets et de formations.
  • Le nom du modèle Le paramètre est le modèle que vous souhaitez affiner. Dans ce cas, j’ai spécifié un chemin vers le Modèle de base Mistral-7B v0.2 sur Câlin visage.
  • Le hf_token La variable doit être définie sur votre jeton Hugging Face, qui peut être obtenu en accédant à ce lien.
  • Ton dépôt_id doit être défini sur le référentiel de modèles Hugging Face que vous avez créé à la première étape de ce didacticiel. Par exemple, mon identifiant de référentiel est NatasshaS/Modèle2.

4. Configuration des paramètres du modèle

Avant d’affiner notre modèle, nous devons définir les paramètres d’entraînement, qui contrôlent les aspects du comportement du modèle tels que la durée de l’entraînement et la régularisation.

Ces paramètres influencent des aspects clés tels que la durée d’entraînement du modèle, la manière dont il apprend des données et la manière dont il évite le surajustement.

Vous pouvez définir les paramètres suivants pour votre modèle :

use_fp16 = True
use_peft = True
use_int4 = True
learning_rate = 1e-4
num_epochs = 3
batch_size = 4 
block_size = 512 
warmup_ratio = 0.05
weight_decay = 0.005
lora_r = 8
lora_alpha = 16
lora_dropout = 0.01

5. Définition des variables d’environnement

Préparons maintenant notre environnement de formation en définissant quelques variables d’environnement.

Cette étape garantit que la fonctionnalité AutoTrain utilise les paramètres souhaités pour affiner le modèle, tels que le nom de notre projet et nos préférences de formation :

os.environ["PROJECT_NAME"] = project_name
os.environ["MODEL_NAME"] = model_name
os.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["USE_FP16"] = str(use_fp16)
os.environ["LORA_R"] = str(lora_r)
os.environ["LORA_ALPHA"] = str(lora_alpha)
os.environ["LORA_DROPOUT"] = str(lora_dropout)

6. Lancer la formation du modèle

Enfin, commençons à entraîner le modèle en utilisant le train automatique commande. Cette étape implique de spécifier vos configurations de modèle, d’ensemble de données et d’entraînement, comme indiqué ci-dessous :

!autotrain llm 
 --train 
 --model "${MODEL_NAME}" 
 --project-name "${PROJECT_NAME}" 
 --data-path "formatted_data/training_dataset/" 
 --text-column "formatted_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}" 
 $( [[ "$USE_FP16" == "True" ]] && echo "--mixed-precision fp16" ) 
 $( [[ "$USE_PEFT" == "True" ]] && echo "--use-peft" ) 
 $( [[ "$USE_INT4" == "True" ]] && echo "--quantization int4" ) 
 $( [[ "$PUSH_TO_HUB" == "True" ]] && echo "--push-to-hub --token ${HF_TOKEN} --repo-id ${REPO_ID}" )

Assurez-vous de changer le Chemin de données à l’endroit où se trouve votre ensemble de données d’entraînement.

7. Évaluation du modèle

Une fois la formation de votre modèle terminée, vous devriez voir un dossier apparaître dans votre répertoire avec le même titre que le nom de votre projet.

Dans mon cas, ce dossier s’intitule «les mistrals, » comme le montre l’image ci-dessous :

selvaraj_mistral_7bv02_finetuning_mistral_new_opensource_llm_hugging_face_2 Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face Intelligence artificielle selvaraj_mistral_7bv02_finetuning_mistral_new_opensource_llm_hugging_face_2 Mistral 7B-V0.2 : peaufiner le nouveau LLM open source de Mistral avec Hugging Face Intelligence artificielle
Dans ce dossier, vous pouvez trouver des fichiers contenant les poids de votre modèle, vos hyperparamètres et les détails de votre architecture.

Vérifions maintenant si ce modèle affiné est capable de répondre avec précision à une question de notre ensemble de données. Pour y parvenir, nous devons d’abord exécuter les lignes de code suivantes pour générer 5 exemples d’entrées et de sorties à partir de notre ensemble de données :

# Print out 5 sample inputs and outputs from our dataset
for i, example in enumerate(dataset):
   if i >= 5: 
       break
   print(f"Instruction: {example['instruction']}")
   print(f"Output: {example['output']}n---")

Vous devriez voir une réponse qui ressemble à ceci, présentant 5 exemples de points de données :

Instruction: Give three tips for staying healthy.
Output: 1.Eat a balanced diet and make sure to include plenty of fruits and vegetables.
2. Exercise regularly to keep your body active and strong.
3. Get enough sleep and maintain a consistent sleep schedule.
---
Instruction: What are the three primary colors?
Output: The three primary colors are red, blue, and yellow.
---
Instruction: Describe the structure of an atom.
Output: An atom is made up of a nucleus, which contains protons and neutrons, surrounded by electrons that travel in orbits around the nucleus. The protons and neutrons have a positive charge, while the electrons have a negative charge, resulting in an overall neutral atom. The number of each particle determines the atomic number and the type of atom.
---
Instruction: How can we reduce air pollution?
Output: There are a number of ways to reduce air pollution, such as shifting to renewable energy sources, encouraging the use of public transportation, prohibiting the burning of fossil fuels, implementing policies to reduce emissions from industrial sources, and implementing vehicle emissions standards. Additionally, individuals can do their part to reduce air pollution by reducing car use, avoiding burning materials such as wood, and changing to energy efficient appliances.
---
Instruction: Describe a time when you had to make a difficult decision.
Output: I had to make a difficult decision when I was working as a project manager at a construction company. I was in charge of a project that needed to be completed by a certain date in order to meet the client's expectations. However, due to unexpected delays, we were not able to meet the deadline and so I had to make a difficult decision. I decided to extend the deadline, but I had to stretch the team's resources even further and increase the budget. Although it was a risky decision, I ultimately decided to go ahead with it to ensure that the project was completed on time and that the client's expectations were met. The project was eventually successfully completed and this was seen as a testament to my leadership and decision-making abilities.

Nous allons saisir l’une des instructions ci-dessus dans le modèle et vérifier si elle génère une sortie précise. Voici une fonction pour fournir une instruction au modèle et en obtenir une réponse :

# Function to provide an instruction
def ask(model, tokenizer, question, max_length=128):
   inputs = tokenizer.encode(question, return_tensors="pt")
   outputs = model.generate(inputs, max_length=max_length, num_return_sequences=1)
   answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
   return answer

Enfin, saisissez une question dans cette fonction comme affiché ci-dessous :

question = "Describe a time when you had to make a difficult decision."
answer = ask(model, tokenizer, question)
print(answer)

Votre modèle doit générer une réponse identique à sa sortie correspondante dans l’ensemble de données d’entraînement, comme affiché ci-dessous :

Describe a time when you had to make a difficult decision.

What did you do? How did it turn out?

[/INST] I remember a time when I had to make a difficult decision about
my career. I had been working in the same job for several years and had
grown tired of it. I knew that I needed to make a change, but I was unsure of what to do. I weighed my options carefully and eventually decided to take a leap of faith and start my own business. It was a risky move, but it paid off in the end. I am now the owner of a successful business and

Veuillez noter que la réponse peut sembler incomplète ou tronquée en raison du nombre de jetons que nous avons spécifié. N’hésitez pas à ajuster la valeur « max_length » pour permettre une réponse plus étendue.

Si vous êtes arrivé jusqu’ici, félicitations !

Vous avez peaufiné avec succès un modèle de langage de pointe, en tirant parti de la puissance de Mistral 7B v-0.2 ainsi que des capacités de Hugging Face.

Mais le voyage ne s’arrête pas là.

Dans une prochaine étape, je recommande d’expérimenter différents ensembles de données ou de modifier certains paramètres d’entraînement pour optimiser les performances du modèle. Affiner les modèles à plus grande échelle améliorera leur utilité, alors essayez d’expérimenter avec des ensembles de données plus volumineux ou différents formats, tels que des PDF et des fichiers texte.

Une telle expérience devient inestimable lorsque l’on travaille avec des données du monde réel dans des organisations, qui sont souvent désordonnées et non structurées.

Natasha Selvaraj est un data scientist autodidacte passionné par l’écriture. Natassha écrit sur tout ce qui concerne la science des données, une véritable maîtrise de tous les sujets liés aux données. Vous pouvez la contacter sur LinkedIn ou regarde-la Chaîne Youtube.

Source