
Votre premier modèle local avec llama.cpp
Dernière révision :
llama.cpp est le moteur open source qui fait tourner la plupart des modèles locaux. Son serveur parle la même API que les grands fournisseurs du cloud : la plupart des outils peuvent l'utiliser sans modification.
Un peu d'histoire
En mars 2023, quelques jours après la diffusion des poids de LLaMA de Meta, Georgi Gerganov publiait llama.cpp : du C et du C++ tout simples qui faisaient tourner un grand modèle de langage sur le processeur d'un portable. La quantification, stocker les poids sur 4 ou 5 bits au lieu de 16, le faisait tenir dans une mémoire ordinaire. En août 2023, le projet a introduit le format de fichier GGUF, devenu la monnaie commune des modèles locaux.
1. Télécharger un modèle
Qwen3 8B, compressé sur 4 bits (Q4_K_M), 5,0 Go : il tient sur une carte de 8 Go.
mkdir -p ~/models
curl -L -o ~/models/Qwen3-8B-Q4_K_M.gguf \
https://huggingface.co/unsloth/Qwen3-8B-GGUF/resolve/main/Qwen3-8B-Q4_K_M.gguf
2. Le servir
docker run --rm --gpus all \
-p 127.0.0.1:8080:8080 \
-v ~/models:/models \
ghcr.io/ggml-org/llama.cpp:server-cuda \
-m /models/Qwen3-8B-Q4_K_M.gguf \
-ngl 99 -c 8192 -fa on \
--host 0.0.0.0 --port 8080
-ngl 99: toutes les couches sur la carte.-c 8192: le contexte, la quantité de texte que le modèle garde en tête d'un coup. Plus de contexte, plus de VRAM.-fa on: flash attention, plus rapide et plus léger en mémoire.-p 127.0.0.1:8080:8080: joignable depuis cette machine seulement. Ne l'ouvrez pas à votre réseau avant d'avoir mis quelque chose devant.
3. Lui parler
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "Dis bonjour en une phrase."}]}'
Ou ouvrez http://127.0.0.1:8080 dans un navigateur : le serveur fournit une petite page de discussion.
Un piège que nous avons mesuré
Pour gagner de la mémoire, on peut compresser le cache de contexte avec -ctk q8_0 -ctv q8_0. N'allez pas plus loin côté V : avec -ctv q4_0, flash attention se désactive sans prévenir et la lecture d'un long prompt est devenue 21 fois plus lente sur notre carte (62,7 au lieu de 1 330 jetons par seconde), alors que la vitesse de génération n'a pas bougé. Un test qui ne mesure que la génération ne l'aurait jamais vu.
Sources
Utile ? Dites-nous ce qu'il faut mesurer ensuite.