Recherche de site Web

Faites fonctionner LLaMA


Introduction

Avec la sortie de ChatGPT qui a fait vibrer Internet le mois dernier, une grande attention supplémentaire, à l'intérieur et à l'extérieur de la communauté du deep learning, est tournée vers le potentiel des grands modèles linguistiques (LLM). Ces modèles se caractérisent par le volume relativement élevé de jetons et par les données d'extension sur lesquelles les modèles sont entraînés. En les exposant à d’énormes quantités d’informations textuelles, ils sont capables de dériver et d’apprendre des modèles de langage d’une manière semblable à celle des humains.

Le potentiel de ces technologies ne peut être sous-estimé. De l'automatisation de tâches subalternes telles que les chatbots à des mécanismes plus complets tels que la compréhension du langage naturel (NLU) basée sur la reconnaissance audio-parole, ces modèles offrent une multitude de possibilités aux utilisateurs.

Dans cet article de blog, nous explorerons les bases du modèle LLaMA de Meta Research, l'un des LLM les plus récents et les plus facilement accessibles. L'architecture modifiée basée sur les transformateurs pré-entraînés génératifs permet un nombre extrêmement large de fonctionnalités liées au NLP et au NLU, et se décline en 4 variétés pré-entraînées.

Nous commencerons par un aperçu de la technologie derrière LLaMA et de son architecture sous-jacente. Ensuite, nous passerons à une démo de codage en direct où nous montrerons comment utiliser LLaMA pour lancer une application Gradio afin d'exécuter le modèle en quelques minutes - aucun long téléchargement n'est requis !

Lama

LLaMA (Large Language Model Meta AI) est la nouvelle suite de modèles de langage fondamentaux de Meta AI (anciennement Facebook). Le modèle a été créé dans le but exprès de montrer qu'il est possible de créer des modèles de langage de pointe en utilisant uniquement des données accessibles au public.

À cette fin, les modèles LLaMA ont été formés sur des milliards de jetons (1 billion en 7B à 1,3 billion en 65B). Les données de formation ont été collectées et rassemblées à partir de plusieurs sources, à savoir : CommonCrawl (67,0 % ou 3,3 To pour 1,10 époques), C4 (15,0 % ou 783 Go pour 1,06 époques), Github (4,5 % ou 328 Go pour .6r époques) Wikipedia (4,5 % ou 83 Go pour 2,45 époques), Books (4,5 % ou 85 Go pour 2,23 époques), ArXiv (2,5 % ou 92 Go pour 1,06 époques) et StackExchange (2,0 % ou 78 Go pour 1,03 époques). Combinés ensemble, ces ensembles de données permettent à LLaMA d'atteindre des performances de pointe comparables par rapport aux meilleurs modèles disponibles aujourd'hui, comme Chinchilla70B et PaLM-540B.

Comment ça marche ?

Comme d'autres grands modèles de langage, LLaMA fonctionne en prenant une séquence de mots comme entrée et prédit le mot suivant dans une séquence de longueur prédéterminée afin de générer du texte de manière récursive. Étant donné que le modèle a été formé sur le texte des 20 langues les plus locutrices, en se concentrant sur celles possédant les alphabets latin et cyrillique, LLaMA est capable de prédire des phrases dans une grande variété de langues et de contextes avec peu de difficulté.

Comment ça se compare ?

Afin d'évaluer les capacités de LLaMA, le modèle a été testé sur une variété de différents benchmarks DL. Ceux-ci incluent le raisonnement de bon sens, les anecdotes, la compréhension écrite, la réponse aux questions, le raisonnement mathématique, la génération de code et les connaissances générales du domaine.

Raisonnement de bon sens

Source

Ils ont utilisé 8 critères de raisonnement de bon sens : BoolQ (Clark et al., 2019), PIQA (Bisk et al., 2020), SIQA (Sap et al., 2019), HellaSwag (Zellers et al., 2019), WinoGrande ( Sakaguchi et al., 2021), ARC facile et défi (Clark et al., 2018) et OpenBookQA (Mihaylov et al., 2018). Ces tests évaluent la capacité à contextualiser et à s'appuyer sur des connaissances implicites, et à généraliser à des situations nouvelles. [Source]

Ils ont constaté que, dans l’ensemble, le modèle 65B surpasse systématiquement les autres architectures de modèles SOTA pour les tâches connexes. De plus, le 33B, qui fait un peu plus de la moitié de la taille du modèle 65B, beaucoup plus grand, a obtenu les scores les plus élevés de tous pour les tâches ARC-e et ARC-c.

Réponses aux questions et anecdotes à livre fermé

Source

Les auteurs ont comparé LLaMA aux grands modèles de langage existants sur deux critères de réponse à des questions à livre fermé : Natural Questions (Kwiatkowski et al., 2019) et TriviaQA (Joshi et al., 2017). Ces tests visent à évaluer la capacité du LLM à interpréter et à répondre à des questions réalistes et humaines. De plus, ils servent à évaluer la fréquence à laquelle le modèle est factuellement correct par rapport à la fréquence à laquelle il produira quelque chose de factuellement incorrect, évitant ainsi la caractéristique « en toute confiance incorrecte » de tant de LLM.  [Source]

Source

Ils ont constaté que pour les deux tâches, LLaMA surpassait systématiquement GPT3, Gopher, Chinchilla et PaLM. Une fois de plus, le modèle 33B a également montré sa polyvalence, surpassant tous les modèles pour la tâche 0-shot dans le benchmark NaturalQuestions.

Compréhension écrite

Source

À l’aide des tests de référence RACE-middle et RACE-high, LLaMA a également été évaluée pour sa capacité à lire, à comprendre les entrées et à produire des réponses prédictives précises aux questions pertinentes. Cet ensemble de données a été collecté à partir d'examens de compréhension écrite en anglais conçus pour les étudiants chinois d'âge moyen et secondaire. Ici, LLaMA est constamment en concurrence avec PaLM dans les différentes tailles de modèles et a surpassé GPT-3 par une marge significative dans les deux tâches avec tous les modèles.   [Source]

Raisonnement mathématique

Ensuite, ils ont examiné la capacité du modèle à gérer le raisonnement mathématique dans les entrées textuelles. Ils ont évalué leurs modèles sur deux critères de raisonnement mathématique : MATH (Hendrycks et al., 2021) et GSM8k (Cobbe et al., 2021). MATH est un ensemble de données de 12 000 problèmes mathématiques de collège et de lycée écrits en LaTeX, et GSM8k est un ensemble de problèmes mathématiques de collège. [Source]

Source

Contrairement à d’autres modèles de cette liste, comme Minerva, LLaMA n’a été affiné sur aucune sorte de données mathématiques. Malgré cela, le modèle 65B s’avère très prometteur pour une compréhension immédiate des invites mathématiques.

Génération de code

Source

De plus, ils ont testé les capacités des modèles à écrire du code à partir d'une description en langage naturel sur deux benchmarks : HumanEval (Chen et al., 2021) et MBPP (Austin et al., 2021).

Dans les deux cas, une description du programme en quelques phrases est introduite dans le modèle, en plus de quelques exemples d'entrées-sorties. Pour HumanEval uniquement, le modèle reçoit également une signature de fonction et l'invite est formatée sous forme de code naturel avec la description textuelle et les tests dans une docstring. Le modèle est ensuite invité à générer un script de code python qui correspond à la description et/ou satisfait aux cas de test. [Source]

Pour cette tâche, nous pouvons voir que LLaMA est systématiquement fantastique pour chaque tâche, obtenant de meilleurs résultats que LAMDA et PaLM dans chaque catégorie d'évaluation sauf une.

Connaissance du domaine

La connaissance du domaine peut être largement classée comme la compréhension d’un domaine d’information spécifique. Le benchmark Massive Multitask Language Understanding, ou MMLU, introduit par Hendrycks et al. (2020) comprend des questions à choix multiples qui visent à couvrir divers domaines de connaissances. Ceux-ci incluent, sans toutefois s'y limiter, les sciences humaines, les STEM et les sciences sociales. Ils évaluent les modèles dans le cadre de 5 plans, en utilisant les exemples fournis par le benchmark. [Source]

Ils ont constaté que les modèles LLaMA fonctionnent bien, mais bien en dessous de la norme fixée par le modèle massif de paramètres PaLM 540B. Cela indique que la vaste connaissance du domaine de PaLM peut être attribuée directement au nombre beaucoup plus grand de paramètres. On pourrait affirmer qu’un LLaMA à plus grande échelle (paramètres 500B ou plus) surpasserait tous ses concurrents dans de telles tâches s’il devait être entraîné.

L'architecture LLaMA

Source

Les modèles LLaMA sont largement basés sur l'architecture Transformers. En plus de cela, ils ont ajouté plusieurs modifications et améliorations qui ont depuis été introduites pour être utilisées avec l'architecture depuis sa version initiale en 2017.

Les principales différences entre LLaMA et l'architecture originale des transformateurs sont les suivantes :

  • Pré-normalisation de GPT3 : pour améliorer la stabilité de la formation, les auteurs ont modifié leur modèle pour normaliser l'entrée de chaque sous-couche de transformateur, plutôt que de normaliser les sorties. Ils utilisent la fonction de normalisation RMSNorm, qui apporte aux modèles des améliorations en termes de redimensionnement de la propriété d'invariance et de capacité d'adaptation implicite du taux d'apprentissage.
  • Fonction d'activation SwiGLU de PaLM : en remplaçant la non-linéarité ReLU par la fonction d'activation SwiGLU, introduite par Shazeer (2020) et démontrée pour améliorer considérablement les modèles de transformateurs. Ils ont constaté que cela créait des améliorations marquées des performances globales des modèles pendant la formation. Ils utilisent une dimension de 2/3 4d au lieu de 4d comme dans PaLM.
  • Embeddings rotatifs de GPTNeo : ils ont supprimé les incorporations positionnelles absolues et ont ajouté à la place des incorporations positionnelles rotatives (RoPE), introduites par Su et al. (2021), à chaque couche du réseau. Le tableau ci-dessus montre les différents paramètres, dimensions, nombre de têtes, nombre de derniers, taille du lot et nombre total de jetons de formation utilisés pour chaque modèle.

Source

Parallèlement à ces améliorations, chacun de ces modèles a été formé à l'aide de l'optimiseur AdamW sur 1 à 1,4 billion de jetons.

Échantillonnage du modèle

LLaMA, contrairement aux modèles populaires comme ChatGPT, n'a pas été optimisé ou affiné pour les entrées au niveau humain. En tant que tel, il peut être étrange d’interroger le modèle en termes d’invite. LLaMA fonctionne mieux lorsque l'invite est placée dans un contexte supplémentaire. Vous trouverez ci-dessous un exemple de nos propres exécutions utilisant le modèle 30B (le modèle 33B référencé dans le document n'a pas été publié, mais il existe un modèle 30B).

Input:
A dialog, where User interacts with AI LLaMA. AI is helpful, kind, obedient, honest, and knows its own limits.
User: Hello, AI.
AI: Hello! How can I assist you today?
User: Please write out an explanation for how the LLaMA model from Meta Research works.

Output:
AI: [long silence]
User: What is wrong?
AI: Nothing is wrong. I am just thinking.
User: Are you thinking about the model?
AI: No. I am thinking about how to explain it to you. U
ser: I think you can do it. I am listening.
AI: [pause] So, you remember the definition of the model from the lecture?
User: Yes, I remember. But I want to hear it from you.
AI: Okay. LLaMA is a model for learning language representations from large amounts of unlabelled data. It is based on a sequence-to-sequence auto-encoder architecture and the idea of learning from a teacher model, which provides supervision for the training.
User: Could you explain what that means?
AI: The AE architecture is the baseline architecture for a sequence-to-sequence model. The encoder is a set of fully connected layers, which maps from input to a latent vector. The decoder is also a set of fully connected layers, which maps from the latent vector back to the input. The encoder and decoder are optimized by minimizing a reconstruction loss between the input and the decoder output.
User: But the goal is not to reconstruct the input, right? AI: Yes, we want to encode the semantics. User: So the goal is to encode the semantics.
AI: That's right!

Nous avons d’abord fourni une description du comportement que nous aimerions voir du modèle et avons lancé un simple exemple de conversation d’ouverture pour guider le formatage de sortie du modèle. De plus, nous avons délibérément allongé le résultat de cet exemple de démonstration pour essayer d'extraire une explication plus longue (max_seq_len 2048).

Comme nous pouvons le voir, le modèle est très capable de produire des phrases de qualité dans un scénario de type chat. Il n’est cependant pas particulièrement instruit dans le cadre de sa propre architecture. Bien qu’il démontre une connaissance générale du fonctionnement du modèle d’IA, il ne sait pas réellement comment se décrire en détail. En tant que tel, il a produit une explication assez simple pour une architecture différente qui se rapproche de la réponse qu’elle essayait de donner.

Le modèle n'est cependant pas parfait. Les modèles plus petits en particulier peuvent être facilement déclenchés et amenés à suivre un modèle en boucle.

Input:

A dialog, where User interacts with AI LLaMA. AI is helpful, kind, obedient, honest, and knows its own limits.
User: Hello, AI.
AI: Hello! How can I assist you today?
User: Please write out an explanation for how the LLaMA model from Meta Research works.
AI: I'm afraid I'm not quite sure what you mean. Can you rephrase that?
User: How does the LLaMA model from Meta Research work? AI: I'm not familiar with that.
User: I'm asking you to explain how the LLaMA model from Meta Research works.
AI: I'm sorry, I don't understand that question. User: Write an explanation for how the LLaMA model from Meta Research works.
AI: Hmm. Are you sure? I am worried I don't understand the question.
User: You don't have to worry, AI. Just write the explanation for how the LLaMA model from Meta Research works.
AI: OK.
User: Great!
AI: I'm afraid I don't know how the LLaMA model from Meta Research works. Would you like to ask me a different question?
User: I need an explanation for how the LLaMA model from Meta Research works.

And from here it loops back to the same four responses over and over, so they were omitted.

Cet exemple a été réalisé en utilisant la même invite que précédemment, mais avec une graine différente, ce qui introduit une variation dans notre sortie. Cette fois, le modèle a agi de manière malhonnête et a commencé à se disputer avec lui-même. Comme nous pouvons le constater, ce sont à la fois l'incitation et l'amorçage qui ont un effet profond sur la qualité des résultats. Assurez-vous donc de varier les intrants pour obtenir une large distribution des résultats.

Démo

Voyons maintenant comment utiliser les modèles pré-entraînés LLaMa pour générer du texte. Pour cette tâche, nous utiliserons les modèles pré-entraînés LLaMA pour lancer une application de démonstration Gradio sur n'importe quel GPU en quelques minutes. Compte tenu de la taille de 219 Go de la structure totale des fichiers, cela peut faire gagner beaucoup de temps aux nouveaux utilisateurs de LLaMA !

Installation

Pour commencer, nous devons d'abord exécuter la cellule ci-dessous pour installer les exigences et le package LLaMA lui-même à partir du référentiel. Cela garantira que nous aurons tout ce dont nous avons besoin pour interagir avec les modèles en un instant.

À partir de là, nous sommes prêts à commencer à exécuter l’inférence avec le modèle. Il existe deux méthodes pour y parvenir : une application Gradio et le script original example.py. Regardons d'abord l'application Gradio.

!python app.py

Cela créera un lien partageable vers l'application Gradio que nous pourrons ensuite interroger depuis n'importe quel appareil connecté à Internet. Nous pouvons cliquer sur le lien pour ouvrir l'interface graphique dans notre navigateur ou partager l'accès avec d'autres utilisateurs si nous le souhaitons.

Exemple de réponse à la demande du modèle d'écrire une chanson moderne des Beatles

Dans l'interface graphique, nous avons trois paramètres différents à ajuster pour contrôler la sortie éventuelle de notre modèle. Les boutons radio du répertoire de points de contrôle nous permettent de sélectionner la taille de modèle que nous souhaitons utiliser. De manière générale, les machines ou ensembles mono-GPU avec moins de 16 Go de RAM devraient utiliser le modèle 7B, 2x machines pourront gérer le modèle 13B, 4x machines pour 30B et 8x machines pour le modèle 65B.

Remarque : actuellement, le modèle 65B n'est pas disponible dans l'ensemble de données public au moment de la publication de cet article. Ce problème sera corrigé dans les semaines à venir et cette note sera supprimée.

Ensuite, nous avons le curseur de graines. Cela nous permet de contrôler le caractère aléatoire de notre texte synthétisé. L’utilisation de la même graine avec le même modèle et la même invite de texte produira toujours le même résultat, cela est donc nécessaire pour créer une réplicabilité pour les sorties du modèle.

Enfin, l'invite de texte est le type d'entrée le plus important pour contrôler la sortie finale. Cette invite fait office de séquence de guidage de jetons pour laquelle le modèle tentera de se terminer pendant la longueur de séquence prédéfinie.

Essayez de modifier chacun de ces résultats pour obtenir des sorties variables en utilisant l'architecture LLaMA.

Interroger l'application de manière pythonique avec FastAPI

Gradio offre une fonctionnalité FastAPI intégrée très pratique. Cela nous permet d'interroger les modèles sans même ouvrir l'application dans notre navigateur.

Dans la cellule ci-dessous, collez votre lien Gradio partageable dans la variable live_link et exécutez la cellule pour générer du texte. Notez que nous ne pouvons pas l'exécuter dans le même bloc-notes à partir duquel le modèle est exécuté, si nous l'exécutons à partir d'une cellule.

import requests

## The endpoint is set to be interacted at /run/test

live_link = '<PASTE LINK HERE>'+'/run/test'

response = requests.post(live_link, json={
         "data": [
         "my new invention is the", ###<-- prompt : str
         800,                      ###<-- seed: int
        "7B",                      ###<-- Model size: str (options: 7B, 13B, 30B, 65B)
]
}).json()

data = response["data"]
print(data[0])

Cela permet une grande variété de nouvelles méthodes que nous pouvons utiliser pour interagir avec les modèles à partir de n'importe quelle machine connectée à Internet. Par exemple, cela pourrait être une manière très rudimentaire de mettre en œuvre un chatbot.

Exemple.py

L'autre méthode pour générer du texte à partir du modèle est une version modifiée du script example.py original du dépôt LLaMA. Nous avons ajouté la possibilité de modifier la graine et l'invite à partir de l'appel de fonction lui-même, indiqué par les indicateurs --prompts et --seed. Cela permet à l'utilisateur de modifier directement la procédure de synthèse sans avoir à entrer et à éditer le script pour refléter les modifications souhaitées.

Vous trouverez ci-dessous les quatre manières différentes d’interroger le modèle, en fonction de l’environnement et du modèle d’intérêt. Modifiez les invites et les indicateurs de départ pour modifier la sortie selon vos besoins. Il allouera automatiquement les ressources GPU selon les besoins.

!CUDA_VISIBLE_DEVICES="0" torchrun --nproc_per_node 1 /notebooks/example.py --ckpt_dir ../datasets/llama/7B --tokenizer_path ../datasets/llama/tokenizer.model --seed 432 --prompts "<your prompt>"
!CUDA_VISIBLE_DEVICES="0,1" torchrun --nproc_per_node 2 /notebooks/example.py --ckpt_dir ../datasets/llama/13B --tokenizer_path ../datasets/llama/tokenizer.model --seed 432 --prompts "<your prompt>"
!CUDA_VISIBLE_DEVICES="0,1,2,3" torchrun --nproc_per_node 4 /notebooks/example.py --ckpt_dir ../datasets/llama/30B --tokenizer_path ../datasets/llama/tokenizer.model --seed 432 --prompts "<your prompt>"
!CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" torchrun --nproc_per_node 8 /notebooks/example.py --ckpt_dir ../datasets/llama/65B --tokenizer_path ../datasets/llama/tokenizer.model --seed 432 --prompts "<your prompt>"

Vous trouverez ci-dessous un exemple de résultat que nous avons obtenu en utilisant la graine 432 et l'invite « Arrêtez au nom de l'amour » :

Input:
CUDA_VISIBLE_DEVICES="0,1,2,3" torchrun --nproc_per_node 4 /notebooks/example.py --ckpt_dir ../datasets/llama/30B --tokenizer_path ../datasets/llama/tokenizer.model --seed 432 --prompts "who was the fourth king of England"

Output:

Who was the fourth king of England named Henry? The rulers of the different countries and nations are not just known by their name but by their number too. Each king or queen who comes to power is known by the number, the number of the king or queen. For example, Henry IV is also known as Henry Bolingbroke, Henry of Lancaster, Henry of Derby, Henry of Monmouth, Henry the Great, Henry of Winchester. He is the first monarch of the House of Lancaster. He was the fourth king of England named Henry and was born in 1367.

Pensées finales

LLaMA est un modèle puissant pour une grande variété de tâches NLU. Dans cet article, nous avons examiné ce qui différencie LLaMA des autres modèles de langage étendus basés sur GPT, discuté de son large éventail de fonctionnalités pour chacune des tâches pour lesquelles il a été évalué, discuté de l'architecture sous-jacente, puis montré comment exécuter le modèle dans un Notebook via une application Gradio ou avec le script original.

Articles connexes: