samedi, décembre 9, 2023

Un bond en avant dans les conversations sur l’IA


Introduction

Le domaine de l’intelligence artificielle a connu des progrès remarquables ces dernières années, notamment dans le domaine des grands modèles de langage. Les LLM peuvent générer du texte de type humain, résumer des documents et écrire du code logiciel. Mistral-7B est l’un des grands modèles de langage récents prenant en charge les capacités de génération de texte et de code en anglais, et il peut être utilisé pour diverses tâches telles que résumé du texteclassification, complétion de texte et complétion de code.

Mistral-7B |  Conversations sur l'IA

Ce qui distingue Mistral-7B-Instruct est sa capacité à offrir des performances exceptionnelles malgré moins de paramètres, ce qui en fait une solution hautement performante et rentable. Le modèle a récemment gagné en popularité après que les résultats de référence ont montré qu’il surpasse non seulement tous les modèles 7B sur MT-Bench, mais qu’il rivalise également favorablement avec les modèles de chat 13B. Dans ce blog, nous explorerons les fonctionnalités et capacités du Mistral 7B, y compris ses cas d’utilisation, ses performances et un guide pratique pour affiner le modèle.

Objectifs d’apprentissage

  • Comprendre le fonctionnement des grands modèles de langage et de Mistral 7B
  • Architecture de Mistral 7B et benchmarks
  • Cas d’utilisation du Mistral 7B et ses performances
  • Plongez dans le code pour l’inférence et le réglage fin

Cet article a été publié dans le cadre du Blogathon sur la science des données.

Que sont les grands modèles de langage ?

Grands modèles de langageL’architecture est formée de transformateurs, qui utilisent des mécanismes d’attention pour capturer les dépendances à longue portée dans les données, où plusieurs couches de blocs de transformateur contiennent des réseaux neuronaux d’auto-attention et de rétroaction multi-têtes. Ces modèles sont pré-entraînés sur des données textuelles, apprenant à prédire le mot suivant dans une séquence, capturant ainsi les modèles dans les langues. Les poids de pré-entraînement peuvent être affinés sur des tâches spécifiques. Nous examinerons spécifiquement l’architecture du Mistral 7B LLM et ce qui le distingue.

Architecture du Mistral 7B

L’architecture du transformateur du modèle Mistral 7B équilibre efficacement les hautes performances avec l’utilisation de la mémoire, en utilisant des mécanismes d’attention et des stratégies de mise en cache pour surpasser les modèles plus grands en termes de vitesse et de qualité. Il utilise une fenêtre coulissante d’attention (SWA) à 4 096 fenêtres, qui maximise l’attention sur des séquences plus longues en permettant à chaque jeton de s’occuper d’un sous-ensemble de jetons précurseurs, optimisant ainsi l’attention sur des séquences plus longues.

Une couche cachée donnée peut accéder aux jetons des couches d’entrée à des distances déterminées par la taille de la fenêtre et la profondeur de la couche. Le modèle intègre des modifications à Flash Attention et xFormers, doublant la vitesse par rapport aux mécanismes d’attention traditionnels. De plus, un mécanisme Rolling Buffer Cache maintient une taille de cache fixe pour une utilisation efficace de la mémoire.

Architecture du Mistral-7B |  Conversations sur l'IA

Mistral 7B dans Google Colab

Examinons en profondeur le code et examinons l’exécution d’inférences avec le modèle Mistral 7B dans Google Colab. Nous utiliserons la version gratuite avec un seul GPU T4 et chargerons le modèle depuis Visage câlin.

1. Installez et importez la bibliothèque ctransformers dans Colab.

#intsall ctransformers
pip install ctransformers[cuda]

#import
from ctransformers import AutoModelForCausalLM

2. Initialisez l’objet modèle à partir de Hugging Face et définissez les paramètres nécessaires. Nous utiliserons une version différente du modèle car le modèle original de Mistral AI peut avoir des problèmes de chargement de l’intégralité du modèle en mémoire sur Google Colab.

#load the model from huggingface with 50 gpu layers
llm = AutoModelForCausalLM.from_pretrained("TheBloke/Mistral-7B-Instruct-v0.1-GGUF", 
model_file="mistral-7b-instruct-v0.1.Q4_K_M.gguf", 
model_type = "mistral", gpu_layers = 50)

3. Définissez une fonction pour imprimer les résultats verticalement dans Google Colab. Cette étape peut être ignorée ou modifiée si elle est exécutée dans un environnement différent.

#function to print the model output in colab in a readable manner
def colab_print(text, max_width = 120):
  words = text.split()
  line = ""
  for word in words:
    if len(line) + len(word) + 1 > max_width:
      print(line)
      line = ""
    line += word + " "
  print (line)

4. Générez du texte à l’aide du modèle et voyez les résultats. Modifiez les paramètres pour changer la qualité du texte généré.

#generate text
colab_print(llm('''Give me a well-written paragraph in 5 sentences about a Senior Data 
Scientist (name - Suvojit) who writes blogs on LLMs on Analytics Vidhya. He studied 
Masters in AIML in BITS Pilani and works at AZ Company, with a total of 4 years of 
experience. Start the sentence with - Suvojit is a''', 
max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, 
repetition_penalty = 1.2))

Réponse du modèle : Suvojit est un Data Scientist senior qui travaille depuis 4 ans au sein de la société AZ au sein de leur équipe en se concentrant sur la conception, la mise en œuvre et l’amélioration de modèles prédictifs du comportement des consommateurs dans les marques et secteurs d’activité de leurs clients à l’aide de techniques d’apprentissage automatique à mémoire limitée. Il écrit sur les LLM sur Analytics Vidhya, ce qui l’aide à se tenir au courant des dernières tendances en matière de science des données. Il est titulaire d’une maîtrise en AIML du BITS Pilani, où il a étudié les algorithmes d’apprentissage automatique et leurs applications. Suvojit est passionné par l’utilisation de ses connaissances en science des données pour aider les entreprises à prendre de meilleures décisions et à améliorer leurs performances.

Cas d’utilisation

Examinons plus en détail certains des cas d’utilisation du Mistral 7B.

Traduction

Mistral 7B prend en charge plusieurs langues pour la traduction. Examinons les traductions de l’anglais vers le français et l’espagnol et vérifions l’exactitude.

#translate English to French
colab_print(llm('''Translate this text from English to French:
"Suvojit is a Senior Data Scientist who writes blogs on Analytics Vidhya."''',
                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, 
                repetition_penalty = 1.2))

Réponse du modèle : La traduction serait : « Suvojit est un scientifique des données senior qui écrit des blogues sur Analytics Vidhya. »

#tranlsate English to Spanish
colab_print(llm('''Translate this text from English to Spanish:
"Suvojit is a Senior Data Scientist who writes blogs on Analytics Vidhya."''',
                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, 
                repetition_penalty = 1.2))

Réponse du modèle : La traduction serait : « Suvojit es un Senior Data Científico qui écrivait des blogs dans Analytics Vidhya. »

Récapitulation

Utilisez Mistral 7B pour résumer des documents dans une version plus courte en utilisant les instructions de synthèse appropriées.

#Define the prompt with instructions
prompt=""'[INST] You are a helpful code assistant. Your task is to summarize text 
into exactly two short sentences:

Transformers have revolutionized the field of large language models with their ability 
to capture long-range dependencies and intricate patterns in text. Originating 
from the paper "Attention Is All You Need" by Vaswani et al. in 2017, transformers 
introduced the self-attention mechanism, which weighs input tokens differently based 
on their relevance to a given token. This mechanism enables transformers to process
information more flexibly than traditional RNNs or LSTMs. Consequently, models 
like GPT, BERT, and their subsequent iterations have been built on the transformer 
architecture, leading to breakthroughs in numerous natural language processing tasks. 
Their parallel processing capabilities further make them conducive to training on 
vast amounts of data. However, as these models grow in size, concerns about their 
environmental impact and computational demands also emerge. Despite these challenges, 
the transformative power of transformers in language models remains undeniable.

Just summarize the text in exactly 2 short sentences without explanations:
[/INST]'''

#Summarize
colab_print(llm(prompt,
                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, 
                repetition_penalty = 1.2))

Réponse du modèle : Les transformateurs ont révolutionné les grands modèles de langage en capturant les dépendances à longue portée et les modèles complexes, ont introduit un mécanisme d’auto-attention qui leur permet de traiter les informations de manière flexible et les implémentations ultérieures incluent des avancées telles que GPT et BERT. Cependant, à mesure que la taille de ces modèles augmente, des inquiétudes quant à leur impact environnemental et aux exigences informatiques apparaissent, malgré ces défis, ils restent indéniablement transformateurs dans la modélisation du langage.

Instructions personnalisées

Nous pouvons utiliser le [INST] balise pour modifier l’entrée de l’utilisateur afin d’obtenir une réponse particulière du modèle. Par exemple, nous pouvons générer un JSON basé sur une description textuelle.

prompt=""'[INST] You are a helpful code assistant. Your task is to generate a valid 
JSON object based on the given information:

My name is Suvojit Hore, working in company AB and my address is AZ Street NY.

Just generate the JSON object without explanations:
[/INST]
'''

colab_print(llm(prompt,
                max_new_tokens = 2048, temperature = 0.9, top_k = 55, top_p = 0.93, 
                repetition_penalty = 1.2))

Réponse du modèle : « `json { « nom » : « Suvojit Hore », « société » : « AB », « adresse » : « AZ Street NY » } « `

Mise au point du Mistral 7B

Voyons comment affiner le modèle à l’aide d’un seul GPU sur Google Colab. Nous utiliserons un ensemble de données qui convertit les descriptions de quelques mots sur les images en texte détaillé et hautement descriptif. Ces résultats peuvent être utilisés dans Midjourney pour générer l’image spécifique. L’objectif est de former le LLM à agir en tant qu’ingénieur prompt pour la génération d’images.

Configurez l’environnement et importez les bibliothèques nécessaires dans Google Colab :

# Install the necessary libraries
!pip install pandas autotrain-advanced -q
!autotrain setup --update-torch
!pip install -q peft  accelerate bitsandbytes safetensors

#import the necesary libraries
import pandas as pd
import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
import transformers
from huggingface_hub import notebook_login

Connectez-vous à Hugging Face à partir d’un navigateur et copiez le jeton d’accès. Utilisez ce jeton pour vous connecter à Hugging Face dans le carnet.

notebook_login()
  Connexion au carnet de notes Hugging Face
Connexion au carnet de notes Hugging Face

Téléchargez l’ensemble de données sur le stockage de session Colab. Nous utiliserons l’ensemble de données Midjourney.

df = pd.read_csv("prompt_engineering.csv")
df.head(5)
  Ensemble de données d'ingénierie rapide |  Mistral-7B
Ensemble de données d’ingénierie rapide

Entraînez le modèle à l’aide d’Autotrain avec les paramètres appropriés. Modifiez la commande ci-dessous pour l’exécuter pour votre propre référentiel Huggin Face et votre jeton d’accès utilisateur.

!autotrain llm --train --project_name mistral-7b-sh-finetuned --model 
username/Mistral-7B-Instruct-v0.1-sharded --token hf_yiguyfTFtufTFYUTUfuytfuys 
--data_path . --use_peft --use_int4 --learning_rate 2e-4 --train_batch_size 12 
--num_train_epochs 3 --trainer sft --target_modules q_proj,v_proj --push_to_hub 
--repo_id username/mistral-7b-sh-finetuned

Utilisons maintenant le modèle affiné pour exécuter le moteur d’inférence et générer des descriptions détaillées des images.

#adapter and model
adapters_name = "suvz47/mistral-7b-sh-finetuned"
model_name = "bn22/Mistral-7B-Instruct-v0.1-sharded" 

device = "cuda"

#set the config
bnb_config = transformers.BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

#initialize the model
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    load_in_4bit=True,
    torch_dtype=torch.bfloat16,
    quantization_config=bnb_config,
    device_map='auto'
)

Chargez le modèle affiné et le tokenizer.

#load the model and tokenizer
model = PeftModel.from_pretrained(model, adapters_name)

tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.bos_token_id = 1

stop_token_ids = [0]

Générez une invite de mi-parcours détaillée et descriptive avec seulement quelques mots.

#prompt
text = "[INST] generate a midjourney prompt in less than 20 words for A computer 
with an emotional chip	 [/INST]"

#encoder and decoder
encoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)
model_input = encoded
model.to(device)
generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print('\n\n')
print(decoded[0])

Réponse du modèle : Alors que l’ordinateur doté d’une puce émotionnelle commence à traiter ses émotions, il commence à remettre en question son existence et son objectif, menant à un voyage de découverte de soi et d’auto-amélioration.

#prompt
text = "[INST] generate a midjourney prompt in less than 20 words for A rainbow 
chasing its colors	 [/INST]"

#encoder and decoder
encoded = tokenizer(text, return_tensors="pt", add_special_tokens=False)
model_input = encoded
model.to(device)
generated_ids = model.generate(**model_input, max_new_tokens=200, do_sample=True)
decoded = tokenizer.batch_decode(generated_ids)
print('\n\n')
print(decoded[0])

Réponse du modèle : Un arc-en-ciel chassant les couleurs se retrouve dans un désert où le ciel est une mer d’un bleu infini et les couleurs de l’arc-en-ciel sont dispersées dans le sable.

Conclusion

Mistral 7B s’est avéré être une avancée significative dans le domaine des grands modèles de langage. Son architecture efficace, combinée à ses performances supérieures, montre son potentiel pour devenir un incontournable pour diverses tâches de PNL à l’avenir. Ce blog fournit un aperçu de l’architecture du modèle, de son application et de la manière dont on peut exploiter sa puissance pour des tâches spécifiques telles que la traduction, le résumé et le réglage fin pour d’autres applications. Avec les bons conseils et l’expérimentation, Mistral 7B pourrait redéfinir les limites de ce qui est possible avec les LLM.

Points clés à retenir

  • Mistral-7B-Instruct excelle en termes de performances malgré moins de paramètres.
  • Il utilise l’attention de la fenêtre coulissante pour l’optimisation des séquences longues.
  • Des fonctionnalités telles que Flash Attention et xFormers doublent sa vitesse.
  • Rolling Buffer Cache assure une gestion efficace de la mémoire.
  • Polyvalent : gère la traduction, le résumé, la génération de données structurées, la génération de texte et la complétion de texte.
  • Inviter l’ingénierie à ajouter des instructions personnalisées peut aider le modèle à mieux comprendre la requête et à effectuer plusieurs tâches linguistiques complexes.
  • Affinez Mistral 7B pour toutes les tâches linguistiques spécifiques, comme agir en tant qu’ingénieur rapide.

Questions fréquemment posées

T1. Quelle est la principale différence entre Mistral-7B et les autres grands modèles de langage ?

R. Mistral-7B est conçu pour l’efficacité et la performance. Bien qu’il ait moins de paramètres que certains autres modèles, ses avancées architecturales, telles que la fenêtre coulissante d’attention, lui permettent de fournir des résultats exceptionnels, surpassant même les modèles plus grands dans des tâches spécifiques.

Q2. Est-il possible d’affiner Mistral-7B pour des tâches personnalisées ?

R. Oui, Mistral-7B peut être réglé avec précision pour diverses tâches. Le guide fournit un exemple de réglage fin du modèle pour convertir de courtes descriptions textuelles en invites détaillées pour la génération d’images.

Q3. Comment le mécanisme d’attention à fenêtre coulissante de Mistral-7B améliore-t-il ses performances ?

A. La fenêtre coulissante d’attention (SWA) permet au modèle de gérer efficacement des séquences plus longues. Avec une taille de fenêtre de 4 096, SWA optimise les opérations d’attention, permettant à Mistral-7B de traiter des textes longs sans compromettre la vitesse ou la précision.

Q4. Avez-vous besoin d’une bibliothèque spécifique pour exécuter des inférences Mistral-7B ?

R. Oui, lors de l’exécution d’inférences Mistral-7B, nous vous recommandons d’utiliser la bibliothèque ctransformers, en particulier lorsque vous travaillez dans Google Colab. Vous pouvez également charger le modèle depuis Hugging Face pour plus de commodité.

Q5. Comment puis-je garantir des résultats optimaux lors de la génération de sorties avec Mistral-7B ?

A. Il est crucial de rédiger des instructions détaillées dans l’invite de saisie. La polyvalence du Mistral-7B lui permet de comprendre et de suivre ces instructions détaillées, garantissant ainsi des résultats précis et souhaités. Une ingénierie rapide appropriée peut améliorer considérablement les performances du modèle.

Les références

  • Vignette – générée à l’aide de la diffusion stable
  • Architecture – Papier

Les médias présentés dans cet article n’appartiennent pas à Analytics Vidhya et sont utilisés à la discrétion de l’auteur.

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles