# Qu’est-ce que llama.cpp, et comment un grand modèle de langage peut-il tourner sur un portable?

Date: 2023-03-11 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/qu-est-ce-que-llama-cpp/

**Answer:** llama.cpp est un petit programme à code source ouvert, publié sur GitHub le 10 mars 2023 par Georgi Gerganov, qui fait tourner les modèles de langage LLaMA de Meta en C/C++ pur sur le processeur d’un ordinateur ordinaire. Il réduit le modèle par quantification sur 4 bits, si bien que la version de 7 milliards de paramètres tient dans environ 4 Go et tourne sur un MacBook, sans matériel d’IA spécialisé.

Jusqu’à cette semaine, faire tourner un modèle de langage de la même catégorie que GPT-3 voulait dire louer des serveurs puissants. Le développeur Simon Willison note que ces modèles exigent habituellement plusieurs puces graphiques de classe A100, qui coûtent chacune 8 000 $ US ou plus. Hier, le 10 mars 2023, les choses ont changé. Georgi Gerganov, un développeur de code source ouvert de Sofia, en Bulgarie, a publié **llama.cpp** sur GitHub, et dès ce matin, des développeurs généraient du texte avec les modèles LLaMA de Meta sur leurs propres portables.

Willison a fait tourner le modèle de 7 milliards de paramètres sur son portable hier soir, puis celui de 13 milliards ce matin, la version que Meta dit concurrentielle avec GPT-3. Il parle du « moment Stable Diffusion » des modèles de langage, en comparaison avec août dernier, quand un générateur d’images est devenu un outil que n’importe qui pouvait faire tourner chez soi.

## Ce qu’est llama.cpp

llama.cpp est un programme d’**inférence**. L’inférence consiste à utiliser un modèle déjà entraîné pour produire un résultat; elle n’entraîne rien. Le programme fait tourner LLaMA, la famille de modèles de recherche que Meta a publiée le 24 février, de 7 à 65 milliards de paramètres (les nombres internes qu’un modèle apprend).

Le README du projet, sa page d’instructions principale, en décrit la conception :

- C/C++ pur, sans aucune autre dépendance logicielle
- Les puces Apple traitées comme une cible de premier ordre, grâce à leurs instructions Arm Neon
- Une précision numérique mixte de 16 et 32 bits
- La prise en charge de la quantification sur 4 bits
- Fonctionne sur le CPU, le processeur principal de l’ordinateur, plutôt que sur une carte graphique

Gerganov ne cache pas à quel point le projet est neuf. Le README dit qu’il a été « bricolé en une soirée » et qu’il n’est pas certain qu’il fonctionne correctement. Les mises à jour d’aujourd’hui ajoutent une mise en garde plus forte : ne jugez pas les modèles LLaMA à partir de cette mise en œuvre, qu’il décrit comme un projet éducatif qui ne sera pas entretenu convenablement.

Il a déjà fait quelque chose de semblable. Willison rappelle que Gerganov a publié plus tôt whisper.cpp, une version en C++ du modèle de reconnaissance vocale Whisper d’OpenAI.

## Comment faire entrer un gros modèle dans un portable?

L’astuce, c’est la **quantification**. Les paramètres d’un modèle sont normalement stockés sous forme de nombres de 16 bits. La quantification arrondit chacun à une valeur plus grossière de 4 bits, si bien que chaque paramètre occupe environ le quart de l’espace. Pensez à une photo enregistrée avec moins de couleurs : elle est plus petite et toujours reconnaissable, même si on perd un peu de détail. Willison rapporte que le modèle 7B occupe environ 4 Go sur disque, et le modèle 13B un peu moins de 8 Go.

Le README détaille les étapes :

1. Téléchargez et compilez le code avec `make`.
2. Placez les poids LLaMA originaux (les paramètres entraînés) dans un dossier models.
3. Lancez un script Python pour les convertir au format ggml 16 bits du projet.
4. Lancez l’outil quantize pour transformer ce fichier en fichier 4 bits.
5. Démarrez `./main` avec le fichier du modèle et un prompt.

Dans l’exemple d’exécution du README sur un Apple M1 Pro, le modèle 7B poursuit le prompt `Building a website can be done in 10 simple steps:` avec une liste numérotée, à environ 61 millisecondes par morceau de mot (jeton), une vitesse utilisable. Le texte se met vite à se répéter, ce qui rappelle qu’il s’agit d’un modèle brut, pas d’un robot conversationnel peaufiné.

Le projet avance vite. Le jour du lancement, seul le modèle 7B avait été testé, et les modèles quantifiés ne tournaient que sur les puces Apple. Aujourd’hui, le README couvre les quatre tailles, qui se divisent en un à huit fichiers, et ajoute la prise en charge d’AVX2 pour les processeurs x86, ceux de la plupart des PC sous Windows et Linux; la prise en charge de Windows est en discussion.

## Pourquoi c’est important, et où est le piège

Faire tourner un modèle sur votre propre machine, c’est pouvoir se passer de connexion Internet, de frais d’utilisation et d’entreprise intermédiaire. Willison soutient que cela permet aux développeurs d’explorer ces systèmes de l’intérieur, comme Stable Diffusion l’a fait pour les images.

Il y a deux pièges. D’abord, l’accès : Meta accorde les poids de LLaMA au cas par cas, pour la recherche non commerciale. Willison rapporte que quelques jours après la publication, quelqu’un a mis en ligne un lien BitTorrent non officiel vers les fichiers du modèle; ils circulent donc maintenant largement, mais cela ne change rien à la licence. Ensuite, le risque : il cite le pourriel, les arnaques amoureuses, la désinformation et la radicalisation automatisée comme des dangers réels, et note que les contrôles limités que les entreprises pouvaient appliquer sur leurs propres sites Web n’existent plus quand le modèle tourne sur votre portable.

> **À essayer :** lisez l’exemple de sortie du README pour le prompt sur le site Web. Repérez la première ligne où le texte commence à se répéter ou à dériver hors sujet, et notez une consigne que vous ajouteriez au prompt pour le garder centré.

## Devriez-vous essayer de faire tourner un modèle de langage sur votre propre ordinateur?

Si vous êtes à l’aise avec un terminal, que vous avez un Mac à puce Apple ou un processeur récent avec assez de mémoire, et que vous avez un accès légitime aux poids de LLaMA par le programme de recherche de Meta, llama.cpp est un outil d’apprentissage remarquable. Vous verrez exactement ce que fait un modèle de langage brut, sans les filtres de sécurité ni le fini d’un robot conversationnel.

Pour la plupart des débutants, mieux vaut attendre un peu. Le projet a quelques jours à peine, son auteur prévient qu’il peut contenir des erreurs, et l’installation exige de compiler du code et de convertir de gros fichiers. Les modèles demandent aussi de la pratique pour être bien utilisés, parce qu’ils ne sont pas ajustés pour suivre des consignes comme ChatGPT.

Dans un cas comme dans l’autre, la grande leçon est déjà claire : des modèles de langage performants n’exigent plus de centre de données. Attendez-vous à voir d’autres outils qui emballeront cette approche pour le grand public, et gardez les mêmes habitudes qu’avec n’importe quel outil d’IA : vérifiez les faits, respectez les licences et réfléchissez à la façon dont ce que vous générez pourrait être détourné.

## Sources

- llama.cpp README (commit 73c6ed5, 10 March 2023): https://github.com/ggerganov/llama.cpp/blob/73c6ed5e8784/README.md
- llama.cpp README (commit da1a4ff, 11 March 2023): https://github.com/ggerganov/llama.cpp/blob/da1a4ff01f42/README.md
- Large language models are having their Stable Diffusion moment: https://simonwillison.net/2023/Mar/11/llama/
