Accéder au contenu principal

Tutoriel Llama.cpp : Un guide complet pour l'inférence et l'implémentation efficaces de LLM

Ce guide complet sur Llama.cpp vous guidera à travers les éléments essentiels de la mise en place de votre environnement de développement, de la compréhension de ses fonctionnalités de base et de l'exploitation de ses capacités pour résoudre des cas d'utilisation réels.
Actualisé 11 déc. 2024  · 11 min de lecture

Les grands modèles de langage (LLM) sont en train de révolutionner divers secteurs d'activité. Des chatbots de service à la clientèle aux outils d'analyse de données sophistiqués, les capacités de cette puissante technologie redessinent le paysage de l'interaction numérique et de l'automatisation.

Cependant, les applications pratiques des LLM peuvent être limitées par la nécessité de disposer d'une puissance de calcul élevée ou de temps de réponse rapides. Ces modèles nécessitent généralement du matériel sophistiqué et des dépendances importantes, ce qui peut rendre difficile leur adoption dans des environnements plus contraignants.

C'est là que LLaMa.cpp (ou LLaMa C++) vient à la rescousse, en fournissant une alternative plus légère et plus portable aux frameworks lourds.

Llama.cpp logo

Logo Llama.cpp(source)

Développer des applications d'IA

Apprenez à créer des applications d'IA à l'aide de l'API OpenAI.
Commencez à Upskiller gratuitement

Qu'est-ce que Llama.cpp ?

Llama.cpp a été développé par Georgi Gerganov. Il implémente l'architecture LLaMa de Meta en C/C++ efficace, et c'est l'une des communautés open-source les plus dynamiques autour de l'inférence LLM avec plus de 900 contributeurs, plus de 69000 étoiles sur le dépôt officiel GitHub, et plus de 2600 versions.

Quelques avantages clés de l'utilisation de LLama.cpp pour l'inférence LLM

Quelques avantages clés de l'utilisation de LLama.cpp pour l'inférence LLM

  • Compatibilité universelle : La conception de Llama.cpp en tant que bibliothèque C++ centrée sur le processeur signifie moins de complexité et une intégration transparente dans d'autres environnements de programmation. Cette large compatibilité a accéléré son adoption sur différentes plateformes.

  • Intégration complète des fonctionnalités : Agissant comme un référentiel pour les fonctionnalités critiques de bas niveau, Llama.cpp reflète l'approche de LangChain pour les capacités de haut niveau, rationalisant le processus de développement, bien qu'il y ait des défis potentiels d'extensibilité.

  • Optimisation ciblée : Llama.cpp se concentre sur un modèle unique d'architecture, ce qui permet des améliorations précises et efficaces. Son engagement en faveur des modèles lamas par le biais de formats tels que GGML et GGUF a permis de réaliser des gains d'efficacité substantiels.

Avec cette compréhension de Llama.cpp, les sections suivantes de ce tutoriel passent en revue le processus de mise en œuvre d'un cas d'utilisation de génération de texte. Nous commençons par explorer les bases de LLama.cpp, en comprenant le déroulement global du projet et en analysant certaines de ses applications dans différentes industries.

Architecture Llama.cpp

L'épine dorsale de Llama.cpp est le modèle original de Llama, qui est également basé sur l'architecture des transformateurs. Les auteurs de Llama tirent parti de diverses améliorations qui ont été proposées par la suite et utilisent différents modèles tels que PaLM.

Différence entre les transformateurs et l'architecture des lamas (Architecture des lamas par Umar Jamil)

Différence entre les transformateurs et l'architecture des lamas (Architecture des lamas par Umar Jamil)

La principale différence entre l'architecture LLaMa et celle des transformateurs :

  • Pré-normalisation (GPT3) : utilisée pour améliorer la stabilité de l'apprentissage en normalisant l'entrée de chaque sous-couche de transformateur à l'aide de l'approche RMSNorm au lieu de normaliser la sortie.
  • Fonction d'activation SwigGLU (PaLM) : la fonction d'activation non linéaire ReLU d'origine est remplacée par la fonction d'activation SwiGLU, ce qui permet d'améliorer les performances.
  • Encastrements rotatifs (GPTNeao) : les encastrements positionnels rotatifs (RoPE) ont été ajoutés à chaque couche du réseau après avoir supprimé les encastrements positionnels absolus.

Mise en place de l'environnement

Les conditions préalables pour commencer à travailler avec LLama.cpp sont les suivantes :

  • PythonPour les autres pays de l'Union européenne, vous pouvez utiliser le logiciel pip, qui est le gestionnaire de paquets de Python.
  • Llama-cpp-python: le binding Python pour llama.cpp

Créer un environnement virtuel

Il est recommandé de créer un environnement virtuel pour éviter tout problème lié au processus d'installation, et conda peut être un bon candidat pour la création de l'environnement.

Toutes les commandes de cette section sont exécutées à partir d'un terminal. En utilisant l'instruction conda create, nous créons un environnement virtuel appelé llama-cpp-env.

conda create --name llama-cpp-env

Après avoir créé avec succès l'environnement virtuel, nous l'activons à l'aide de l'instruction conda activate, comme suit :

conda activate llama-cpp-env

L'instruction ci-dessus doit afficher le nom de la variable d'environnement entre parenthèses au début du terminal, comme suit :

Nom de l'environnement virtuel après activation

Nom de l'environnement virtuel après activation

Nous pouvons maintenant installer le paquetage llama-cpp-python comme suit :

pip install llama-cpp-python
or
pip install llama-cpp-python==0.1.48

L'exécution réussie du site llama_cpp_script.py signifie que la bibliothèque est correctement installée.

Pour nous assurer que l'installation est réussie, créons et ajoutons la déclaration import, puis exécutons le script.

  • Tout d'abord, ajoutez le fichier from llama_cpp import Llama au fichier llama_cpp_script.py, puis
  • Lancez le programme Python llama_cpp_script.py pour exécuter le fichier. Si la bibliothèque ne parvient pas à être importée, une erreur est générée ; elle nécessite donc un diagnostic plus approfondi pour le processus d'installation.

Comprendre les bases de Llama.cpp

À ce stade, le processus d'installation devrait avoir réussi. Commençons par comprendre les bases de LLama.cpp.

La classe Llama importée ci-dessus est le constructeur principal utilisé lors de l'utilisation de Llama.cpp, et elle prend plusieurs paramètres qui ne sont pas limités aux suivants. La liste complète des paramètres est fournie dans la documentation officielle :

  • model_path: Le chemin d'accès au fichier du modèle Llama utilisé
  • prompt: L'invite d'entrée du modèle. Ce texte est symbolisé et transmis au modèle.
  • device: Le dispositif à utiliser pour exécuter le modèle Llama ; il peut s'agir d'un processeur ou d'un processeur graphique.
  • max_tokens: Le nombre maximum de jetons à générer dans la réponse du modèle.
  • stop: Une liste de chaînes de caractères qui entraîneront l'arrêt du processus de génération du modèle.
  • temperature: Cette valeur est comprise entre 0 et 1. Plus la valeur est faible, plus le résultat final est déterministe. D'autre part, une valeur plus élevée conduit à plus d'aléatoire, et donc à une production plus diversifiée et plus créative.
  • top_p: Est utilisé pour contrôler la diversité des prédictions, ce qui signifie qu'il sélectionne les tokens les plus probables dont la probabilité cumulée dépasse un seuil donné. En partant de zéro, une valeur plus élevée augmente les chances de trouver un meilleur résultat, mais nécessite des calculs supplémentaires.
  • echo: Un booléen utilisé pour déterminer si le modèle inclut l'invite originale au début (True) ou ne l'inclut pas (False).

Par exemple, considérons que nous voulons utiliser un grand modèle linguistique appelé stocké dans le répertoire de travail actuel. Le processus d'instanciation se déroule comme suit :

# Instanciate the model
my_aweseome_llama_model = Llama(model_path="./MY_AWESOME_MODEL")


prompt = "This is a prompt"
max_tokens = 100
temperature = 0.3
top_p = 0.1
echo = True
stop = ["Q", "\n"]


# Define the parameters
model_output = my_aweseome_llama_model(
       prompt,
       max_tokens=max_tokens,
       temperature=temperature,
       top_p=top_p,
       echo=echo,
       stop=stop,
   )
final_result = model_output["choices"][0]["text"].strip()

Le code est explicite et peut être facilement compris à partir des points initiaux indiquant la signification de chaque paramètre.

Le résultat du modèle est un dictionnaire contenant la réponse générée ainsi que quelques métadonnées supplémentaires. Le format de sortie est étudié dans les sections suivantes de l'article.

Votre premier projet Llama.cpp

Il est maintenant temps de commencer à mettre en œuvre le projet de génération de texte. Démarrer un nouveau projet Llama.The cpp n'a rien d'autre à faire que de suivre le modèle de code Python ci-dessus, qui explique toutes les étapes depuis le chargement du grand modèle de langage d'intérêt jusqu'à la génération de la réponse finale.

Le projet s'appuie sur la version GGUF du Zephyr-7B-Beta de Hugging Face. Il s'agit d'une version affinée de mistralai/Mistral-7B-v0.1 qui a été entraînée sur un ensemble d'ensembles de données synthétiques accessibles au public à l'aide de l'optimisation directe des préférences (DPO).

Notre introduction à l'utilisation des transformateurs et de Hugging Face permet de mieux comprendre les transformateurs et d'exploiter leur puissance pour résoudre des problèmes de la vie réelle. Nous avons également un tutoriel sur le Mistral 7B.

Modèle Zephyr de Hugging Face

Modèle Zephyr de Hugging Face(source)

Une fois le modèle téléchargé localement, nous pouvons le déplacer vers l'emplacement du projet dans le dossier model. Avant de plonger dans la mise en œuvre, il convient de comprendre la structure du projet :

La structure du projet

La structure du projet

La première étape consiste à charger le modèle à l'aide du constructeur Llama. Comme il s'agit d'un modèle de grande taille, il est important de spécifier la taille maximale du contexte du modèle à charger. Dans ce projet spécifique, nous utilisons 512 jetons.

from llama_cpp import Llama


# GLOBAL VARIABLES
my_model_path = "./model/zephyr-7b-beta.Q4_0.gguf"
CONTEXT_SIZE = 512


# LOAD THE MODEL
zephyr_model = Llama(model_path=my_model_path,
                    n_ctx=CONTEXT_SIZE)

Une fois le modèle chargé, l'étape suivante est la phase de génération du texte, en utilisant le modèle de code original, mais nous utilisons une fonction d'aide appelée generate_text_from_prompt.

def generate_text_from_prompt(user_prompt,
                             max_tokens = 100,
                             temperature = 0.3,
                             top_p = 0.1,
                             echo = True,
                             stop = ["Q", "\n"]):




   # Define the parameters
   model_output = zephyr_model(
       user_prompt,
       max_tokens=max_tokens,
       temperature=temperature,
       top_p=top_p,
       echo=echo,
       stop=stop,
   )


   return model_output

Dans la clause __main__, la fonction peut être exécutée à l'aide d'une invite donnée.

if __name__ == "__main__":


   my_prompt = "What do you think about the inclusion policies in Tech companies?"


   zephyr_model_response = generate_text_from_prompt(my_prompt)


   print(zephyr_model_response)

La réponse du modèle est fournie ci-dessous :

La réponse du modèle

La réponse du modèle

La réponse générée par le modèle est et la réponse exacte du modèle est mise en évidence dans la boîte orange.

  • L'invite originale comporte 12 jetons
  • Les jetons de réponse ou d'achèvement ont 10 jetons et,
  • Le total des jetons est la somme des deux jetons ci-dessus, soit 22.

Même si cette sortie complète peut être utile pour une utilisation ultérieure, il se peut que nous ne soyons intéressés que par la réponse textuelle du modèle. Nous pouvons formater la réponse pour obtenir un tel résultat en sélectionnant le champ “text” de l'élément "choices” " comme suit :

final_result = model_output["choices"][0]["text"].strip()

La fonction strip() est utilisée pour supprimer les espaces blancs de début et de fin d'une chaîne de caractères et le résultat est le suivant :

Tech companies want diverse workforces to build better products.

Llama.CPP Applications dans le monde réel

Cette section présente une application réelle de LLama.cpp et fournit le problème sous-jacent, la solution possible et les avantages de l'utilisation de Llama.cpp.

Problème

Imaginez ETP4Africa, une startup technologique qui a besoin d'un modèle linguistique capable de fonctionner efficacement sur différents appareils pour son application éducative, sans causer de retards.

Solution avec Llama.cpp

Ils implémentent Llama.cpp, profitant de ses performances optimisées pour le processeur et de sa capacité à s'interfacer avec leur backend basé sur Go.

Avantages

  • Portabilité et rapidité : La conception légère de Llama.cpp garantit des réponses rapides et la compatibilité avec de nombreux appareils.
  • Personnalisation : Des fonctions de bas niveau adaptées permettent à l'application de fournir une assistance efficace au codage en temps réel.

L'intégration de Llama.cpp permet à l'application ETP4Africa d'offrir des conseils de programmation immédiats et interactifs, améliorant ainsi l'expérience et l'engagement de l'utilisateur.

L'ingénierie des données est un élément clé de tout projet de science des données et d'IA, et notre tutoriel Introduction à LangChain pour l'ingénierie des données et les applications de données fournit un guide complet pour inclure l'IA à partir de grands modèles de langage dans les pipelines de données et les applications.

Conclusion

En résumé, cet article a fourni une vue d'ensemble complète de la configuration et de l'utilisation de grands modèles de langage avec LLama.cpp.

Des instructions détaillées ont été fournies pour vous aider à comprendre les bases de Llama.cpp, à mettre en place l'environnement de travail, à installer la bibliothèque requise et à mettre en œuvre un cas d'utilisation de génération de texte (question-réponse).

Enfin, des aperçus pratiques ont été fournis pour une application réelle et la manière dont Llama.cpp peut être utilisé pour résoudre efficacement le problème sous-jacent.

Prêt à plonger plus profondément dans le monde des grands modèles linguistiques ? Améliorez vos compétences avec les puissants frameworks d'apprentissage profond LangChain et Pytorch utilisés par les professionnels de l'IA grâce à nos tutoriels Comment construire des applications LLM avec LangChain et Comment former un LLM avec PyTorch.

Obtenez une certification de haut niveau en matière d'IA

Démontrez que vous pouvez utiliser l'IA de manière efficace et responsable.

FAQ

En quoi Llama.cpp diffère-t-il des autres frameworks LLM légers ?

Llama.cpp est spécifiquement optimisé pour l'utilisation du processeur, ce qui le différencie des autres frameworks qui s'appuient fortement sur l'accélération GPU. Il est donc bien adapté aux environnements disposant de ressources matérielles limitées.

Quelle est la configuration requise pour que Llama.cpp fonctionne efficacement ?

Bien que Llama.cpp soit conçu pour être léger, il bénéficie néanmoins d'un processeur multicœur moderne et d'une mémoire vive suffisante pour gérer des modèles plus importants. Les exigences précises dépendent de la taille du modèle avec lequel vous travaillez.

Llama.cpp peut-il être intégré à d'autres langages de programmation que Python ?

Oui, la conception de Llama.cpp en tant que bibliothèque C++ permet une intégration dans différents environnements de programmation au-delà de Python, bien que des bindings spécifiques doivent être implémentés pour chaque langage.

Que sont les formats GGML et GGUF mentionnés dans le contexte des modèles de lamas ?

GGML (Georgi Gerganov Model Language) et GGUF sont des formats utilisés pour stocker efficacement les modèles Llama, en se concentrant sur la réduction de la taille du stockage et l'amélioration de la vitesse de chargement.

Comment Llama.cpp gère-t-il les mises à jour et les améliorations des modèles LLaMa ?

La communauté open-source maintient activement Llama.cpp, s'assurant qu'il incorpore les dernières avancées et optimisations dans les modèles LLaMa, contribuant ainsi à son efficacité et à ses gains de performance.

Existe-t-il des limitations ou des problèmes connus liés à l'utilisation de Llama.cpp ?

Comme tout logiciel, Llama.cpp peut avoir des limites, en particulier en ce qui concerne l'extensibilité des modèles de très grande taille ou des flux de travail complexes. En outre, l'optimisation du processeur peut ne pas être à la hauteur des performances des solutions basées sur le GPU pour certaines tâches.

Comment le paramètre de température influence-t-il la sortie de Llama.cpp ?

Le paramètretemperature affecte le caractère aléatoire des réponses du modèle. Des valeurs plus faibles rendent la sortie plus déterministe, tandis que des valeurs plus élevées introduisent de la variabilité, ce qui peut être utile dans des applications créatives.


Zoumana Keita 's photo
Author
Zoumana Keita
LinkedIn
Twitter

Scientifique de données aux multiples talents qui aime partager ses connaissances et rendre service aux autres, Zoumana est un créateur de contenu sur YouTube et un rédacteur technique de premier plan sur Medium. Il prend plaisir à parler, à coder et à enseigner. Zoumana est titulaire de deux masters. Le premier en informatique avec une spécialisation en apprentissage automatique à Paris, en France, et le second en science des données à l'université Texas Tech aux États-Unis. Son parcours professionnel a débuté en tant que développeur de logiciels au sein du Groupe OPEN en France, avant de rejoindre IBM en tant que consultant en apprentissage automatique, où il a développé des solutions d'IA de bout en bout pour les compagnies d'assurance. Zoumana a rejoint Axionable, la première startup d'IA durable basée à Paris et Montréal. Il y a occupé le poste de Data Scientist et a mis en œuvre des produits d'IA, principalement des cas d'utilisation NLP, pour des clients en France, à Montréal, à Singapour et en Suisse. En outre, 5 % de son temps a été consacré à la recherche et au développement. Il travaille actuellement en tant que scientifique de données senior à l'IFC, le groupe de la Banque mondiale.

Sujets

Commencez dès aujourd'hui votre voyage dans l'IA !

cours

Generative AI Concepts

2 hr
45.9K
Discover how to begin responsibly leveraging generative AI. Learn how generative AI models are developed and how they will impact society moving forward.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus