llama.cpp est une bibliothèque logicielle open-source qui effectue l'inférence sur divers grands modèles de langage tels que le modèle Llama de Meta. Elle est co-développée avec le projet GGML, une bibliothèque tensorielle à usage général écrite en C. La bibliothèque se concentre sur une exécution efficace sur des ordinateurs sans GPU dédié, rendant les modèles d'apprentissage automatique accessibles sur du matériel standard.
Le projet comprend des outils en ligne de commande et un serveur avec une interface web simple. Il est devenu la norme de facto en tant que cœur de presque tous les outils d'inférence locale, y compris Ollama et LM Studio, permettant aux utilisateurs d'exécuter des modèles d'IA générative sur leurs propres appareils.
Contexte
Fin septembre 2022, le développeur géorgien Georgi Gerganov a commencé à travailler sur la bibliothèque GGML, une bibliothèque C implémentant l'algèbre tensorielle. Gerganov a conçu GGML avec une gestion stricte de la mémoire et le multithreading comme objectifs principaux. La création a été inspirée par le travail de Fabrice Bellard sur LibNC, une bibliothèque C pour les calculs tensoriels.
Avant de commencer llama.cpp, Gerganov avait développé une bibliothèque similaire appelée whisper.cpp, qui implémentait Whisper, un modèle de reconnaissance vocale créé par OpenAI. Ce projet antérieur a établi son approche de l'inférence efficace de modèles dans des langages de bas niveau.
Développement
llama.cpp a commencé son développement en mars 2023 comme une implémentation du code d'inférence Llama en C/C++ pur sans dépendances externes. Cette approche a amélioré les performances sur les ordinateurs sans GPU ou autre matériel spécialisé, ce qui était un objectif principal du projet. Il a rapidement gagné en importance parmi les utilisateurs sans matériel dédié, car il pouvait fonctionner uniquement sur une unité centrale de traitement (CPU).
Bien qu'initialement conçu pour les CPU, la prise en charge des backends GPU et unité de traitement neuronal (NPU) a été ajoutée plus tard. En mai 2026, le projet compte plus de 109 000 étoiles sur GitHub, reflétant son adoption large.
Les étapes clés du développement incluent : FlashAttention a été introduit le 30 avril 2024, améliorant l'efficacité du mécanisme d'attention. Le 10 avril 2025, libmtmd a été introduit pour revitaliser la prise en charge des modèles multimodaux qui était auparavant stagnante. Le 17 décembre 2025, une accélération complète sur les appareils Android et ChromeOS a été introduite via une nouvelle liaison GUI, permettant le développement d'applications natives au-delà de la compilation croisée et de l'exécution d'une interface en ligne de commande dans un shell adb.
Architecture
llama.cpp prend en charge plusieurs cibles matérielles, y compris x86, ARM, Metal, BLAS, BLIS, zDNN, ZenDNN, SYCL, MUSA, CUDA, HIP, CANN, OpenCL, RPC et Vulkan version 1.2 ou supérieure. Ces backends font partie de la bibliothèque tensorielle GGML, utilisée par le code llama.cpp spécifique au modèle en front-end.
La bibliothèque utilise plusieurs extensions CPU pour l'optimisation. Pour x86-64, elle utilise les jeux d'instructions AVX, AVX2, AVX-512, AVX-VNNI et AMX. Pour AArch64 (ARM64), elle utilise NEON, i8MM, SVE, SVE2, SME et SME2. Pour s390x, elle utilise la Vector Enhancement Facility 2 (VXE2). Apple silicon est une cible importante pour le projet.
Plusieurs fonctionnalités ciblent l'inférence sur les appareils de périphérie. Cela inclut la quantification de modèle à l'avance, la quantification du cache clé-valeur (kv) à la volée, le décodage spéculatif et le déchargement partiel des couches du modèle vers la RAM système. Cette dernière permet aux appareils de charger des modèles qui seraient autrement trop volumineux pour tenir entièrement dans la VRAM du GPU.
Pour la communication front-end, llama.cpp fournit des points de terminaison compatibles OpenAI tels que v1/chat/completions et prend en charge le formatage de sortie basé sur la grammaire en JSON. Cela permet aux services cloud de s'intégrer à la bibliothèque.
Format de fichier GGUF
Le format GGUF (GGML Universal File) est un format binaire qui stocke à la fois les tenseurs et les métadonnées dans un seul fichier, conçu pour un chargement et un enregistrement rapides des données de modèle. Il a été introduit en août 2023 par l'équipe du projet pour maintenir la compatibilité ascendante à mesure que la prise en charge d'autres architectures de modèles était ajoutée.
GGUF a remplacé le format GGML précédent et est généralement produit en convertissant des modèles développés avec d'autres bibliothèques d'apprentissage automatique telles que PyTorch. Le format se concentre sur la quantification, qui est l'acte de réduire la précision des poids du modèle. La quantification réduit l'utilisation de la mémoire et augmente la vitesse, au prix d'une précision réduite du modèle.
GGUF prend en charge les types entiers quantifiés de 2 à 8 bits, les formats de données à virgule flottante courants tels que float32, float16 et bfloat16, et la quantification à 1,58 bit. Il contient le vocabulaire du tokeniseur, la longueur du contexte, les informations sur les tenseurs et d'autres attributs nécessaires pour un modèle de langage de type GPT.
La structure au niveau des octets utilise l'ordre little-endian, divisée en un bloc de métadonnées et un bloc d'informations sur les tenseurs. Cette structure permet une sérialisation efficace vers et depuis le stockage pour un chargement dynamique.<br>
Modèles
llama.cpp prend en charge de nombreux grands modèles de langage, y compris Llama, Mistral, Gemma, DeepSeek, gpt-oss, Phi et Qwen. Cette variété en fait une solution flexible pour divers cas d'utilisation d'intelligence artificielle, allant des applications de chat à des tâches plus spécialisées.
Des outils communautaires tels que Ollama et LM Studio sont construits sur le projet, et il utilise souvent des écosystèmes propriétaires comme Anthropic sur une infrastructure locale.