Les premiers pas
Démarrer avec llama.cpp est simple. Voici plusieurs façons de l'installer sur votre machine :
- Installez llama.cpp avec brew, nix ou winget
- Exécutez avec Docker
- Téléchargez les binaires pré-compilés depuis la page des versions
- Créez à partir des sources en clonant ce dépôt
Une fois installé, vous aurez besoin d'un modèle.
Exemple de commande :
|
# Utiliser un fichier de modèle local llama-cli -m my_model.gguf # Ou téléchargez et exécutez un modèle directement depuis Hugging Face llama-cli -hf ggml-org/gemma-3-1b-it-GGUF # Lancer un serveur API compatible OpenAI llama-server -hf ggml-org/gemma-3-1b-it-GGUF |
Description
L'objectif principal de llama.cpp est de permettre l'inférence LLM avec une configuration minimale et des performances de pointe sur une large gamme de matériels, localement et dans l'infonuagique.
- Implémentation C/C++ simple et sans dépendances
- La puce Apple est un atout majeur : optimisée via les cadres d'applications ARM NEON, Accelerate et Metal
- Prise en charge d'AVX, AVX2, AVX512 et AMX pour les architectures x86
- Quantification d'entiers 1,5 bit, 2 bit, 3 bit, 4 bit, 5 bit, 6 bit et 8 bits pour une inférence plus rapide et une utilisation mémoire réduite
- Noyaux CUDA personnalisés pour l'exécution de LLM sur GPU NVIDIA (prise en charge des GPU AMD via HIP et des GPU Moore Threads via MUSA)
- Prise en charge des backends Vulkan et SYCL
- Inférence hybride CPU+GPU pour accélérer partiellement les modèles dont la capacité VRAM est supérieure à la capacité totale
Le projet llama.cpp est le principal terrain de jeu pour le développement de nouvelles fonctionnalités pour la bibliothèque ggml.
Modèles
Les ajustements des modèles de base ci-dessous sont généralement également pris en charge.
Les instructions pour ajouter la prise en charge de nouveaux modèles situé dans «HOWTO-add-model.md»
Texte seul :
- LLaMA
- LLaMA 2
- LLaMA 3
- Mistral 7B
- Mixtral MoE
- DBRX
- Falcon
- Chinese LLaMA / Alpaca and Chinese LLaMA-2 / Alpaca-2
- Vigogne (French)
- BERT
- Koala
- Baichuan 1 & 2 + derivations
- Aquila 1 & 2
- Modèle Starcoder
- Refact
- MPT
- Bloom
- Modèle Yi
- Modèle StableLM
- Modèle Deepseek
- Modèle Qwen
- PLaMo-13B
- Modèle Phi
- PhiMoE
- GPT-2
- Orion 14B
- InternLM2
- CodeShell
- Gemma
- Mamba
- Grok-1
- Xverse
- Modèle Command-R
- SEA-LION
- GritLM-7B + GritLM-8x7B
- OLMo
- OLMo 2
- OLMoE
- Modèle Granite
- GPT-NeoX + Pythia
- Snowflake-Arctic MoE
- Smaug
- Poro 34B
- Modèle Bitnet b1.58
- Flan T5
- Modèle Open Elm
- ChatGLM3-6b + ChatGLM4-9b + GLMEdge-1.5b + GLMEdge-4b
- GLM-4-0414
- SmolLM
- EXAONE-3.0-7.8B-Instruct
- Modèle FalconMamba
- Jais
- Bielik-11B-v2.3
- RWKV-6
- QRWKV-6
- GigaChat-20B-A3B
- Trillion-7B-preview
- Modèle Ling
- Modèle LFM2
Multimodal :
- Modèle LLaVA 1.5, modèle LLaVA 1.6
- BakLLaVA
- Obsidian
- ShareGPT4V
- Modèle MobileVLM 1.7B/3B
- Yi-VL
- Mini CPM
- Moondream
- Bunny
- GLM-EDGE
- Qwen2-VL
Liaisons
- Python: ddh0/easy-llama
- Python: abetlen/llama-cpp-python
- Go: go-skynet/go-llama.cpp
- Node.js: withcatai/node-llama-cpp
- JS/TS (llama.cpp serveur client): lgrammel/modelfusion
- JS/TS (Programmable Prompt Engine CLI): offline-ai/cli
- JavaScript/Wasm (fonctionne dans le navigateur): tangledgroup/llama-cpp-wasm
- Typescript/Wasm (API plus agréable, disponible sur npm): ngxson/wllama
- Ruby: yoshoku/llama_cpp.rb
- Rust (plus de fonctionnalités): edgenai/llama_cpp-rs
- Rust (API plus agréable): mdrokz/rust-llama.cpp
- Rust (des liaisons plus directes): utilityai/llama-cpp-rs
- Rust (construction automatisée à partir de crates.io): ShelbyJenkins/llm_client
- C#/.NET: SciSharp/LLamaSharp
- C#/VB.NET (plus de fonctionnalités - licence communautaire): LM-Kit.NET
- Scala 3: donderom/llm4s
- Clojure: phronmophobic/llama.clj
- React Native: mybigday/llama.rn
- Java: kherud/java-llama.cpp
- Zig: deins/llama.cpp.zig
- Flutter/Dart: netdur/llama_cpp_dart
- Flutter: xuegao-tzx/Fllama
- PHP (Liaisons et fonctionnalités API construites sur llama.cpp): distantmagic/resonance (plus d'informations)
- Guile Scheme: guile_llama_cpp
- Swift srgtuszy/llama-cpp-swift
- Swift ShenghaiWang/SwiftLlama
- Delphi Embarcadero/llama-cpp-delphi
UI
(pour qu'un projet soit répertorié ici, il doit clairement indiquer qu'il dépend de llama.cpp) :
- AI Sublime Text plugin (MIT)
- cztomsik/ava (MIT)
- Dot (GPL)
- eva (MIT)
- iohub/collama (Apache-2.0)
- janhq/jan (AGPL)
- johnbean393/Sidekick (MIT)
- KanTV (Apache-2.0)
- KodiBot (GPL)
- llama.vim (MIT)
- LARS (AGPL)
- Llama Assistant (GPL)
- LLMFarm (MIT)
- LLMUnity (MIT)
- LMStudio (propriétaire)
- LocalAI (MIT)
- LostRuins/koboldcpp (AGPL)
- MindMac (propriétaire)
- MindWorkAI/AI-Studio (FSL-1.1-MIT)
- Mobile-Artificial-Intelligence/maid (MIT)
- Mozilla-Ocho/llamafile (Apache-2.0)
- nat/openplayground (MIT)
- nomic-ai/gpt4all (MIT)
- ollama/ollama (MIT)
- oobabooga/text-generation-webui (AGPL)
- PocketPal AI (MIT)
- psugihara/FreeChat (MIT)
- ptsochantaris/emeltal (MIT)
- pythops/tenere (AGPL)
- ramalama (MIT)
- semperai/amica (MIT)
- withcatai/catai (MIT)
- Autopen (GPL)
Outils
- akx/ggify : Téléchargez les modèles PyTorch depuis HuggingFace Hub et convertissez-les en GGML
- akx/ollama-dl : Téléchargez les modèles de la bibliothèque Ollama pour une utilisation directe avec llama.cpp
- crashr/gppm : Lancez les instances llama.cpp avec les GPU NVIDIA Tesla P40 ou P100 avec une consommation d'énergie réduite au repos
- gpustack/gguf-parser : Examinez/vérifiez le fichier GGUF et estimez l'utilisation mémoire
- Styled Lines (encapsuleur désynchronisée sous licence propriétaire de la partie inférence pour le développement de jeux dans Unity3D, avec des encapsuleurs pré-intégrés pour plateformes mobile et web et un exemple de modèle)
Infrastructure
- Paddler : Équilibreur de charge avec état, conçu sur mesure pour llama.cpp
- GPUStack : Gérez les unités d'allocations GPU pour l'exécution de LLM
- llama_cpp_canister : llama.cpp comme contrat intelligent sur l'ordinateur Internet, en utilisant WebAssembly
- llama-swap : Proxy transparent qui ajoute la commutation automatique de modèle avec llama-server
- Kalavai : Déploiement collaboratif de LLM de bout en bout à n'importe quelle échelle
- llmaz : Plateforme d'inférence simple et avancée pour les modèles de langage volumineux sur Kubernetes.
Jeux
- Lucy's Labyrinth - Un jeu de labyrinthe simple où des agents contrôlés par une IA tenteront de vous piéger.
Backends pris en charge
| Backend | Appareils cibles |
|---|---|
| Metal | Apple Silicon |
| BLAS | Tous |
| BLIS | Tous |
| SYCL | GPU Intel et Nvidia |
| MUSA | Moore Threads GPU |
| CUDA | Nvidia GPU |
| HIP | AMD GPU |
| Vulkan | GPU |
| CANN | Ascend NPU |
| OpenCL | Adreno GPU |
| WebGPU | Tous |
| RPC | Tous |
Obtention et quantification de modèles
La plateforme Hugging Face héberge plusieurs LLM compatibles avec llama.cpp :
- Tendances
- LLaMA
Vous pouvez télécharger manuellement le fichier GGUF ou utiliser directement n'importe quel modèle compatible avec llama.cpp depuis Hugging Face ou d'autres sites d'hébergement de modèles, comme ModelScope, en utilisant le paramètre CLI suivant : -hf <utilisateur>/<modèle>[:quant]. Par exemple :
| llama-cli -hf ggml-org/gemma-3-1b-it-GGUF |
Par défaut, la CLI télécharge depuis Hugging Face. Vous pouvez utiliser d'autres options avec la variable d'environnement MODEL_ENDPOINT. Par exemple, vous pouvez choisir de télécharger les points de contrôle du modèle depuis ModelScope ou d'autres communautés de partage de modèles en définissant la variable d'environnement, par exemple : MODEL_ENDPOINT=https://www.modelscope.cn/.
Après avoir téléchargé un modèle, utilisez les outils CLI pour l'exécuter localement (voir ci-dessous).
llama.cpp nécessite que le modèle soit entreposé au format de fichier GGUF. Les modèles dans d'autres formats de données peuvent être convertis au format GGUF à l'aide des scripts Python convert_*.py de ce dépôt.
La plateforme Hugging Face propose divers outils en ligne pour convertir, quantifier et héberger des modèles avec llama.cpp :
- Utilisez l'espace GGUF-my-repo pour convertir au format GGUF et quantifier les pondérations des modèles à des tailles plus petites.
- Utilisez l'espace GGUF-my-LoRA pour convertir les adaptateurs LoRA au format GGUF (plus d'informations : n° 10123).
- Utilisez l'espace GGUF-editor pour modifier les métadonnées GGUF dans le navigateur (plus d'informations : n° 9268).
- Utilisez les points de terminaison d'inférence pour héberger directement llama.cpp dans l'infonuagique (plus d'informations : n° 9669).
llama-cli
Un outil CLI pour accéder et expérimenter la plupart des fonctionnalités de llama.cpp.
Exécution en mode conversation
Les modèles dotés d'un modèle de chat intégré activent automatiquement le mode conversation. Si ce n'est pas le cas, vous pouvez l'activer manuellement en ajoutant -cnv et en spécifiant un modèle de chat approprié avec --chat-template NAME.
|
llama-cli -m model.gguf # > hi, who are you? # Hi there! I'm your helpful assistant! I'm an AI-powered chatbot designed to assist and provide information to users like you. I'm here to help answer your questions, provide guidance, and offer support on a wide range of topics. I'm a friendly and knowledgeable AI, and I'm always happy to help with anything you need. What's on your mind, and how can I assist you today? # # > what is 1+1? # Easy peasy! The answer to 1+1 is... 2! |
Exécutez en mode conversation avec un modèle de chat personnalisé :
|
# utilisez le modèle «chatml» (utilisez -h pour voir la liste des modèles pris en charge) llama-cli -m model.gguf -cnv --chat-template chatml # utiliser un modèle personnalisé llama-cli -m model.gguf -cnv --in-prefix 'Utilisateur: ' --reverse-prompt 'Utilisateur: ' |
Exécuter la saisie semi-automatique simple
Pour désactiver explicitement le mode conversation, utilisez -no-cnv :
|
llama-cli -m model.gguf -p "I believe the meaning of life is" -n 128 -no-cnv # I believe the meaning of life is to find your own truth and to live in accordance with it. For me, this means being true to myself and following my passions, even if they don't align with societal expectations. I think that's what I love about yoga - it's not just a physical practice, but a spiritual one too. It's about connecting with y ourself, listening to your inner voice, and honoring your own unique journey. |
Limiter la sortie avec une grammaire personnalisée
|
llama-cli -m model.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Demande : planifier un appel à 20h ; Commande :' # {"appointmentTime": "8pm", "appointmentDetails": "schedule a a call"} |
llama-server
Un serveur HTTP léger, compatible avec l'API OpenAI, pour les LLM.
Démarrez un serveur HTTP local avec la configuration par défaut sur le port 8080 :
|
llama-server -m model.gguf --port 8080 # L'interface utilisateur Web de base est accessible via un navigateur : http://localhost:8080 # Point de terminaison de fin de discussion : http://localhost:8080/v1/chat/completions |
Prise en charge de plusieurs utilisateurs et du décodage parallèle
|
# jusqu'à 4 requêtes simultanées, chacune avec un contexte maximal de 4 096 llama-server -m model.gguf -c 16384 -np 4 |
Activer le décodage spéculatif
|
# le modèle draft.gguf doit être une petite variante du modèle cible.gguf llama-server -m model.gguf -md draft.gguf |
Servir un modèle d'intégration
|
# utiliser le point de terminaison /embedding llama-server -m model.gguf --embedding --pooling cls -ub 8192 |
Servir un modèle de reclassement
|
# utiliser le point de terminaison /reranking llama-server -m model.gguf --reranking |
Limiter toutes les sorties avec une grammaire
|
# grammaire personnalisée llama-server -m model.gguf --grammar-file grammar.gbnf # JSON llama-server -m model.gguf --grammar-file grammars/json.gbnf |
llama-perplexity
Un outil permettant de mesurer la perplexité 1 (et d'autres indicateurs de qualité) d'un modèle sur un texte donné.
Mesurer la perplexité sur un fichier texte.
|
llama-perplexity -m model.gguf -f file.txt # [1]15.2701,[2]5.4007,[3]5.3073,[4]6.2965,[5]5.8940,[6]5.6096,[7]5.7942,[8]4.9297, ... # Estimation finale : PPL = 5.4007 +/- 0.67339 |
llama-bench
Évaluez les performances de l'inférence pour différents paramètres.
Exécuter le benchmark par défaut
|
llama-bench -m model.gguf # Output: # | model | size | params | backend | threads | test | t/s | # | ------------------- | ---------: | ---------: | ---------- | ------: | ------------: | -------------------: | # | qwen2 1.5B Q4_0 | 885.97 MiB | 1.54 B | Metal,BLAS | 16 | pp512 | 5765.41 ± 20.55 | # | qwen2 1.5B Q4_0 | 885.97 MiB | 1.54 B | Metal,BLAS | 16 | tg128 | 197.71 ± 0.81 | # # build: 3e0ba0e60 (4229) |
llama-run
Un exemple complet d'exécution de modèles llama.cpp. Utile pour l'inférence. Utilisé avec RamaLama 2.
Exécutez un modèle avec une invite spécifique (par défaut, elle est extraite du registre Ollama).
| llama-run granite-code |
llama-simple
Exemple minimal d'implémentation d'applications avec llama.cpp. Utile pour les développeurs.
Complétion de simple texte
|
llama-simple -m model.gguf # Hello my name is Kaitlyn and I am a 16 year old girl. I am a junior in high school and I am currently taking a class called "The Art of |