Avancé 30 min

Comprendre llama.cpp et le format GGUF sous le capot

Le moteur C++ derrière l'inférence locale. Comment ça marche et comment optimiser vos modèles au plus près de la RAM.

Ollama est un outil fantastique pour l’expérience développeur. Mais si vous grattez un peu la peinture, vous découvrirez que le vrai moteur de rendu, le projet qui a rendu l’IA locale possible sur des machines grand public, s’appelle llama.cpp.

Créé par Georgi Gerganov, c’est un projet open-source écrit en C/C++ purs. Son objectif, exécuter des LLMs avec des performances maximales sans dépendre des lourdes bibliothèques Python comme PyTorch.

Comprendre llama.cpp, c’est comprendre comment optimiser l’inférence pour des serveurs de production.

Le problème de la RAM et l’invention du GGUF

À la base, un modèle de langage n’est qu’un énorme fichier contenant des milliards de “poids” mathématiques. Habituellement, ces poids sont stockés avec une précision de 16 bits (FP16). Conséquence, un modèle de 8 milliards de paramètres pèse environ 16 Go sur le disque. Le charger demande 16 Go de VRAM. Pour beaucoup, c’est bloquant.

L’équipe de llama.cpp a popularisé le concept de Quantification et créé le format GGUF (GPT-Generated Unified Format).

La quantification consiste à réduire la précision mathématique de ces poids (par exemple, passer de 16 bits à 4 bits). C’est une compression destructrice, mais de manière surprenante, l’impact sur l‘“intelligence” du modèle est minime. Résultat, un modèle de 8B paramètres quantifié en 4 bits (Q4) ne pèse plus que 4.5 Go. Il tourne très bien sur un ordinateur portable.

Compiler le moteur soi-même

L’avantage majeur d’utiliser llama.cpp directement, c’est que vous le compilez pour votre architecture matérielle spécifique. Il tirera parti des instructions AVX sur Intel, d’Apple Metal sur les Mac récents, ou de CUDA si vous avez un GPU NVIDIA.

Récupérez le code source.

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

Compilez-le. Si vous êtes sur un Mac récent (Apple Silicon), la compilation activera Metal par défaut.

make

Si vous êtes sur un serveur Linux avec une carte NVIDIA.

make GGML_CUDA=1

Faire tourner un modèle

Contrairement à Ollama qui masque le stockage, avec llama.cpp vous devez télécharger vos fichiers .gguf directement depuis Hugging Face. Cherchez des modèles avec les tags “GGUF” (les dépôts de MaziyarPanahi ou TheBloke sont très connus pour ça).

Une fois le fichier téléchargé (ex: llama3-8b.Q4_K_M.gguf), lancez l’exécutable llama-cli.

./llama-cli -m chemin/vers/llama3-8b.Q4_K_M.gguf -p "Explique le protocole TCP/IP." -n 500 -ngl 99

L’argument -ngl 99 est crucial, il demande au moteur de décharger un maximum de couches de calcul vers la carte graphique (GPU). Si vous l’omettez, le calcul se fera sur le processeur central (CPU), ce qui sera extrêmement lent.

Le serveur natif

llama.cpp intègre directement un serveur HTTP hautes performances. C’est l’alternative hardcore à l’API d’Ollama si vous voulez déployer en production avec l’empreinte mémoire la plus faible possible.

./llama-server -m modele.gguf -c 2048 -ngl 99 --port 8080

Il expose des endpoints compatibles avec l’API OpenAI, prêts à être consommés par vos applications front-end ou backend. C’est brut, rapide, et ça ne vous cache rien.