# Comment faire tourner un modèle de langage sur votre propre portable avec llama.cpp?

Date: 2023-03-22 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/modele-de-langage-sur-portable-llama-cpp/

**Answer:** Vous compilez llama.cpp à partir de sa page GitHub, convertissez les fichiers du modèle LLaMA de Meta au format du programme, les réduisez à des nombres de 4 bits, puis lancez le modèle dans le terminal. Le plus petit modèle, LLaMA 7B, demande environ 3,9 Go de mémoire et d’espace disque une fois quantifié : il tient donc sur bien des portables récents, dont les Mac à puce Apple.

Douze jours après sa première version, llama.cpp permet de faire tourner un modèle de langage de la catégorie de GPT-3 sur un ordinateur ordinaire. C’est un programme gratuit à code source ouvert, écrit en C et en C++, qui n’exige aucune bibliothèque logicielle supplémentaire, et il fonctionne entièrement sur le processeur principal de l’ordinateur, le CPU. Le but déclaré du projet est de faire tourner le modèle LLaMA de Meta sur un MacBook, et il prend maintenant aussi en charge Linux, Windows et Docker.

Ce guide passe en revue les étapes telles que le README du projet, sa page d’instructions, les décrit cette semaine. Une mise en garde d’abord : le code change presque tous les jours, et une importante réécriture est en cours d’intégration en ce moment : vérifiez donc le README actuel avant de commencer.

## Avant de commencer : les fichiers du modèle et la licence

llama.cpp n’est que le moteur. Il ne comprend pas de modèle. Les poids de LLaMA, les milliards de nombres que le modèle a appris pendant son entraînement, viennent de Meta, qui a publié LLaMA le 24 février en quatre tailles : 7, 13, 33 et 65 milliards de paramètres. Meta accorde l’accès au cas par cas, pour la recherche non commerciale seulement, aux universitaires, aux gouvernements, aux groupes de la société civile et aux laboratoires de l’industrie. Le README de llama.cpp précise clairement que le projet ne distribuera jamais lui-même les fichiers du modèle.

Des copies des poids circulent en ligne sans la permission de Meta. Simon Willison, un développeur qui a écrit sur l’exécution de LLaMA sur son portable, note qu’un lien de téléchargement non officiel est apparu quelques jours après la publication. Utiliser ces copies ne change rien aux conditions de la licence : faites donc une demande à Meta si vous voulez les respecter.

## Ce dont votre ordinateur a besoin

Comme le programme charge le modèle entier en mémoire, il vous faut autant de mémoire vive libre que la taille du fichier du modèle, plus la même quantité d’espace disque. Le README donne ces tailles (il désigne le modèle 33B de Meta comme 30B) :

| Modèle | Taille après quantification sur 4 bits | Taille avant | Mémoire du portable à viser (repère approximatif) |
|---|---|---|---|
| 7B | 3,9 Go | 13 Go | 8 Go |
| 13B | 7,8 Go | 24 Go | 16 Go |
| 30B | 19,5 Go | 60 Go | 32 Go |
| 65B | 38,5 Go | 120 Go | 64 Go |

Notez que les étapes de conversion demandent temporairement de la place pour les fichiers originaux et les fichiers intermédiaires : gardez donc beaucoup d’espace disque libre. La dernière colonne est un repère approximatif qui laisse de la place au système d’exploitation et à vos autres applications. Il vous faut aussi Python, idéalement la version 3.9 ou 3.10, puisqu’un des paquets requis ne s’installe pas encore proprement avec la 3.11.

## Les étapes

Voici la séquence pour le modèle 7B sur un Mac ou une machine Linux, dans le terminal :

1. **Téléchargez et compilez.** Clonez le dépôt avec `git clone https://github.com/ggerganov/llama.cpp`, entrez dans le dossier avec `cd llama.cpp`, et tapez `make`.
2. **Ajoutez les poids.** Placez les fichiers originaux de Meta dans le dossier `models`, de façon à avoir `models/7B` et le fichier `tokenizer.model`.
3. **Installez les outils Python.** Lancez `python3 -m pip install torch numpy sentencepiece`.
4. **Convertissez.** Lancez `python3 convert-pth-to-ggml.py models/7B/ 1` pour transformer les poids au format ggml du programme, en précision 16 bits.
5. **Quantifiez.** Lancez `python3 quantize.py 7B` pour réduire le fichier à 4 bits.
6. **Exécutez.** Démarrez le modèle avec `./main -m ./models/7B/ggml-model-q4_0.bin -n 128`. La valeur `-n` fixe le nombre de jetons, ou morceaux de mots, à générer.

Avant l’étape 4, le README suggère de vérifier vos fichiers téléchargés à l’aide des sommes de contrôle publiées dans son fichier SHA256SUMS, pour confirmer qu’ils sont complets et authentiques.

LLaMA est un modèle brut : il poursuit un texte plutôt que de suivre des consignes. Rédigez donc vos prompts comme le début de ce que vous voulez voir complété :

```prompt
Un petit guide pour les jardiniers débutants. Étape 1 : choisir un endroit ensoleillé.
Étape 2 :
```

Pour une séance qui ressemble à une conversation, ajoutez `-i` pour le mode interactif et `-r "User:"`, qui vous redonne la main chaque fois que le modèle écrit `User:`. Le README montre aussi un mode instructions qui utilise Alpaca, un modèle de chercheurs de Stanford bâti sur LLaMA.

> **À essayer :** lancez trois fois le prompt sur le jardinage avec le modèle 7B et comparez les résultats. Ajoutez ensuite deux autres étapes terminées au prompt avant « Étape 2 : » et voyez si la suite devient plus ciblée.

## Qu’est-ce que la quantification?

La quantification consiste à stocker chacun des nombres d’un modèle avec moins de bits, pour que le fichier entier prenne moins de place. Les poids de LLaMA utilisent normalement 16 bits par nombre. llama.cpp arrondit chacun à une valeur de 4 bits, ce qui ne permet que 16 niveaux possibles au lieu de dizaines de milliers. C’est pourquoi le modèle 7B passe de 13 Go à 3,9 Go dans le tableau ci-dessus.

Une comparaison de tous les jours : une photo enregistrée avec une palette de couleurs plus restreinte. L’image est beaucoup plus petite et toujours facile à reconnaître, mais les nuances fines se perdent. De la même façon, un modèle quantifié conserve l’essentiel de ses connaissances et de son aisance, mais ses nombres sont un peu moins précis.

Ce que cela coûte en qualité reste une question ouverte. Le README le dit directement dans sa liste de limites : l’effet de la quantification sur le texte généré n’est pas encore connu. Pour apprendre et expérimenter, le compromis en vaut généralement la peine, car sans quantification, même le plus petit modèle LLaMA demanderait plus de mémoire que n’en ont la plupart des portables.

## Sources

- llama.cpp README (commit of 2023-03-21): https://github.com/ggerganov/llama.cpp/blob/da0e9fe90ccf6e73597eb19dd0cfc0a28363fb3b/README.md
- Introducing LLaMA: A foundational, 65-billion-parameter large language model: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/
- Large language models are having their Stable Diffusion moment: https://simonwillison.net/2023/Mar/11/llama/
