Avancé 11 minllama.cpp

Compiler llama.cpp avec Metal

Réponse directe

Sur un Mac Apple Silicon, llama.cpp se compile en trois commandes et Metal est activé par défaut : clonez le dépôt, lancez cmake -B build puis cmake --build build --config Release, sans installer de toolkit GPU. Vous pouvez aussi l'installer sans compiler avec Homebrew. Les binaires llama-cli et llama-server placent alors le calcul sur le GPU de la puce M ; c'est la mémoire unifiée, plus que la puissance brute, qui fixe la taille de modèle possible.

llama.cpp est le moteur d'inférence sur lequel reposent Ollama et LM Studio, et il tourne sur Mac de façon native. Ce guide montre comment l'installer ou le compiler avec Metal, le lancer sur un modèle GGUF, le servir en API, relever la limite de mémoire GPU de macOS et lire correctement les benchmarks publiés pour les puces M1 à M5.

Par Mohamed Meguedmi·Màj 2026-09-30·Testé sur macOS 14+

#llama.cpp sur Mac : ce que Metal apporte

Sur macOS, le GPU s'utilise via Metal, l'API graphique et de calcul d'Apple, et llama.cpp l'exploite directement. Le README du projet précise que Apple Silicon est un citoyen de première classe, optimisé via ARM NEON, Accelerate et Metal. En pratique, cela signifie que la compilation par défaut produit déjà un moteur qui utilise le GPU, sans option à ajouter, et que la mémoire unifiée évite tout transfert entre le processeur et le GPU : le modèle vit une seule fois en mémoire. Le facteur limitant sur un Mac est donc la capacité et la bande passante de cette mémoire.

→
Rien à installer côté GPU
Contrairement à CUDA, qui exige un toolkit de plusieurs gigaoctets, Metal est fourni par macOS. Il suffit des outils de compilation d'Apple et de CMake.

#Prérequis

Le kit IA Locale

Ton ChatGPT privé et gratuit sur ta machine en 1 heure — LM Studio, Ollama, Open WebUI, tes documents, sans cloud.

  • Espace en ligne à vie
  • PDF + fichiers
  • Mises à jour à vie
Un Mac Apple Silicon
M1 à M5 : c'est la cible de ce guide. Les Mac à processeur Intel n'y gagnent presque rien.
Les outils de compilation Apple
Installez les Command Line Tools avec xcode-select --install.
CMake et Git
Disponibles via Homebrew : brew install cmake git.
De la mémoire pour le modèle
Le repère du site : un 8B en Q4 pèse environ 5 Go, un 14B environ 9 Go, un 32B 19 à 20 Go, avant le contexte.
Outils de compilation
xcode-select --install
brew install cmake git

#Installer sans compiler : Homebrew

Si vous n'avez pas besoin d'options de compilation particulières, la voie la plus rapide est Homebrew. La documentation d'installation de llama.cpp indique que la formule est mise à jour automatiquement à chaque nouvelle version du projet. Vous obtenez les mêmes exécutables, prêts à l'emploi, avec Metal.

Installation avec Homebrew
brew install llama.cpp

Compilez vous-même quand vous voulez la dernière version du dépôt, tester une branche ou modifier une option de compilation. Sinon, Homebrew suffit : vous gagnez le temps de compilation et les mises à jour se font avec brew upgrade.

#1. Compiler avec Metal

Compilation (Metal activé par défaut)
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp

cmake -B build
cmake --build build --config Release -j $(sysctl -n hw.ncpu)

La documentation de build est explicite : sur macOS, Metal est activé par défaut, et il fait exécuter le calcul sur le GPU. Aucune option n'est à ajouter. L'ancien nom du dépôt, sous le compte de Georgi Gerganov, redirige vers l'organisation ggml-org, où se trouve désormais le projet. Les binaires apparaissent dans build/bin, notamment llama-cli pour le terminal et llama-server pour l'API.

i
Metal et MPS, deux choses différentes
MPS (Metal Performance Shaders) est la couche que PyTorch utilise. llama.cpp n'en dépend pas : son backend Metal est écrit pour l'inférence de modèles quantifiés, ce qui explique en grande partie qu'il soit plus rapide que des solutions passant par PyTorch sur Mac.

Deux options utiles : la documentation indique que -DGGML_METAL=OFF désactive Metal à la compilation, et qu'un binaire compilé avec Metal peut être forcé sur le processeur avec --n-gpu-layers 0, pratique pour comparer les vitesses.

#2. Lancer un premier modèle

Les moteurs récents savent télécharger le modèle eux-mêmes. L'option -hf prend le nom d'un dépôt Hugging Face, avec la quantification en suffixe ; sans suffixe, Q4_K_M est retenue par défaut. Pour un fichier déjà téléchargé, utilisez -m avec son chemin.

Télécharger et lancer un modèle
./build/bin/llama-cli -hf UTILISATEUR/MODELE-GGUF:Q4_K_M
Lancer un fichier local
./build/bin/llama-cli -m ~/modeles/mon-modele-Q4_K_M.gguf

Le nombre de couches placées sur le GPU se règle avec -ngl ; sa valeur par défaut est auto, ce qui convient à un Mac dont la mémoire est unifiée. Vous pouvez aussi écrire -ngl all pour tout charger. Ne cherchez pas le chemin d'un modèle dans le dossier d'Ollama : ses fichiers sont stockés sous un format interne qui n'est pas un GGUF directement utilisable.

#Servir une API compatible OpenAI avec llama-server

llama-server expose des routes compatibles avec l'API OpenAI pour le chat, les réponses et les embeddings. Par défaut, il écoute sur 127.0.0.1, port 8080 : il n'est joignable que depuis votre Mac. Pour l'ouvrir au réseau, il faut passer --host explicitement, et il convient alors de protéger l'accès.

Démarrer l'API locale
./build/bin/llama-server -m ~/modeles/mon-modele-Q4_K_M.gguf --port 8080

#4. La limite de mémoire GPU de macOS

Sur Apple Silicon, macOS ne laisse au GPU qu'une part de la mémoire unifiée. Un modèle qui dépasse cette part est refusé ou déborde vers le processeur, même si la mémoire totale suffit. Le moteur affiche la valeur effective au démarrage : cherchez la ligne ggml_metal_init: recommendedMaxWorkingSetSize dans les journaux de llama-cli ou de llama-server.

La commande sysctl iogpu.wired_limit_mb permet de relever ce plafond. Elle attend une valeur en mégaoctets : 61 440 pour 60 Go, par exemple. Un contributeur du dépôt de llama.cpp rappelle qu'elle est à refaire à chaque démarrage, car elle n'est pas persistante, et déconseille d'aller jusqu'à 100 % : le système a besoin de mémoire pour tout ce qui n'est pas verrouillé par le GPU, et les choses tournent mal si on ne lui en laisse pas assez.

Relever la limite (non persistant)
# 56 Go pour le GPU sur un Mac de 64 Go (56 x 1024 = 57344)
sudo sysctl iogpu.wired_limit_mb=57344

# Relancez ensuite le modèle et relisez recommendedMaxWorkingSetSize
!
Gardez une marge pour macOS
Laissez au système au moins quelques gigaoctets. Un plafond trop haut provoque des ralentissements ou des blocages qui obligent à redémarrer. Pour rendre le réglage permanent, il faut le rejouer au démarrage, par exemple avec un démon lancé au boot : il n'existe pas de réglage persistant natif.

#Quel modèle pour quelle mémoire unifiée

La mémoire unifiée est partagée entre macOS, vos applications et le modèle, et le GPU n'en reçoit qu'une part. Le repère du site place les poids d'un 8B en Q4 autour de 5 Go, d'un 14B autour de 9 Go et d'un 32B autour de 19 à 20 Go. Le cache du contexte s'y ajoute. Le tableau donne un ordre de grandeur de prudence ; la valeur qui fait foi est recommendedMaxWorkingSetSize, affichée par le moteur.

Ordre de grandeur selon la mémoire du Mac (poids en Q4, hors contexte)
Mémoire du MacModèle raisonnableRemarque
8 Go3B (2 Go)Un 8B est possible mais laisse trop peu de marge à macOS
16 Go8B (5 Go), contexte moyenLe plafond GPU par défaut reste suffisant
24 à 32 Go14B (9 Go), voire un 8B en Q8Un 32B en Q4 exige de relever la limite GPU
48 à 64 Go32B (19-20 Go) avec un long contexteRelever la limite GPU si le moteur refuse le modèle
96 Go et plus70B (environ 40 Go) et modèles MoEVérifier recommendedMaxWorkingSetSize avant de télécharger

Ces ordres de grandeur sont des prudences, pas des mesures : un long contexte, un second modèle ou une application gourmande suffisent à changer la donne. Le guide dédié à la mémoire donne la méthode de calcul complète.

#5. Les options qui comptent

Options de llama-cli et llama-server (README officiel de llama-cli)
OptionRôleValeur par défaut
-ngl, --n-gpu-layersNombre de couches placées en VRAM (un nombre, auto ou all)auto
-fa, --flash-attnFlash Attention : on, off ou autoauto
-ctk, -ctvType du cache KV pour les clés et les valeurs (f16, q8_0, q4_0…)f16
-hfDépôt Hugging Face à télécharger, avec quantification optionnelleQ4_K_M si le suffixe est omis
-cTaille du contexte, en tokensselon le modèle

Flash Attention est en mode automatique par défaut : inutile de l'activer à la main dans la plupart des cas. Le cache KV se quantifie avec -ctk et -ctv, à condition que Flash Attention soit active ; il divise à peu près par deux la mémoire du cache en q8_0 par rapport à f16, au prix d'une légère perte de précision qu'il vaut mieux vérifier sur vos usages. Le guide dédié détaille le compromis.

#6. Performances par puce : ce que mesurent les benchmarks publics

QuelLLM ne mesure pas ces machines. La référence est la discussion « Performance of llama.cpp on Apple Silicon M-series » du dépôt de llama.cpp, où chaque contributeur exécute le même test sur un LLaMA 7B en Q4_0. Le tableau ci-dessous en retient quelques lignes, avec les versions de llama.cpp de chaque mesure : celles des puces M1 à M4 datent de la même version, celle des M5 est plus récente.

Génération (tg) et prompt (pp) sur LLaMA 7B Q4_0, en tokens par seconde
Puce (cœurs GPU)Bande passantePromptGénérationPart du plafond théorique
M2 Pro (19)200 Go/s341,1938,8674 %
M3 Pro (18)150 Go/s341,6730,7478 %
M4 Pro (20)273 Go/s439,7850,7471 %
M5 Pro (20)307 Go/s1 620,6466,3382 %
M4 Max (40)546 Go/s885,6883,0658 %

Le plafond théorique est la bande passante divisée par le poids du modèle (3,56 Gio, soit 3,82 Go). Les puces Pro atteignent 71 à 82 % de ce plafond, la puce Max seulement 58 % : à partir d'un certain niveau, la mémoire n'est plus le seul frein, et payer plus de bande passante rapporte moins que ce que la fiche technique laisse croire.

Trois enseignements. La génération suit la bande passante : le M3 Pro, à 150 Go/s, est moins rapide que le M2 Pro à 200 Go/s, malgré une génération de puce plus récente. Les puces Max, à bande passante bien plus haute, dominent. Enfin, la lecture du prompt a fait un bond avec les M5 : 1 620,64 tokens/s pour un M5 Pro, contre 439,78 pour un M4 Pro de même nombre de cœurs GPU, soit 3,7 fois plus. Cet écart compte pour les longs documents et le RAG, beaucoup moins pour le chat.

i
Comment lire ces chiffres
Les mesures viennent de contributeurs différents, avec des versions de llama.cpp et des versions de macOS différentes. Elles donnent un ordre de grandeur pour comparer des puces, pas une garantie pour votre machine. Un modèle de 8 à 9 milliards de paramètres en Q4 est plus lourd qu'un 7B et ira donc un peu plus lentement.

Une bonne habitude avant de conclure qu'un Mac est lent : relancer le même modèle avec -ngl 0, puis avec la valeur par défaut, et comparer. L'écart entre les deux montre ce que le GPU apporte réellement sur votre machine, et confirme que le calcul passe bien par Metal. Notez aussi la version de llama.cpp utilisée : les optimisations Metal évoluent vite, et un binaire ancien peut être nettement moins rapide qu'une version récente.

#Dépannage : les erreurs courantes

Symptômes fréquents sur Mac
SymptômeCause probablePiste
Débit très bas, processeur à 100 %Modèle chargé sur le CPUVérifier -ngl et lire les journaux de démarrage
Erreur d'allocation mémoire du GPUModèle plus gros que la part de RAM accordée au GPURelever iogpu.wired_limit_mb, réduire le modèle ou le contexte
Le Mac ralentit ou se figePlafond GPU trop haut, pas de marge pour macOSRedescendre la valeur de iogpu.wired_limit_mb
La compilation échoueOutils Apple absents ou CMake trop ancienxcode-select --install puis brew upgrade cmake
Le modèle n'est pas trouvéChemin ou nom de dépôt Hugging Face erronéTester -hf avec un dépôt connu, ou -m avec un chemin absolu
FAQ
Faut-il compiler llama.cpp pour utiliser Metal sur Mac ?+
Non. Metal est activé par défaut dans la compilation sous macOS, et Homebrew fournit des exécutables déjà prêts avec brew install llama.cpp. Compilez vous-même seulement pour la dernière version du dépôt, une branche à tester ou une option particulière. Les deux voies donnent les mêmes outils, llama-cli et llama-server.
Comment vérifier que llama.cpp utilise le GPU sur mon Mac ?+
Lisez les journaux au lancement de llama-cli ou llama-server : ils indiquent l'initialisation de Metal et la valeur de recommendedMaxWorkingSetSize. Un débit très bas avec le processeur saturé signale un modèle chargé sur le CPU. Vérifiez alors le réglage -ngl, dont la valeur par défaut est auto.
Comment donner plus de mémoire au GPU sur un Mac Apple Silicon ?+
Avec sudo sysctl iogpu.wired_limit_mb=VALEUR, exprimée en mégaoctets. Le réglage n'est pas persistant et se refait à chaque démarrage. Ne visez pas 100 % de la RAM : macOS a besoin de mémoire pour le reste du système. Relisez recommendedMaxWorkingSetSize dans les journaux pour confirmer la nouvelle valeur.
llama.cpp ou Ollama sur Mac ?+
Ollama s'appuie sur llama.cpp et simplifie l'installation, les téléchargements et l'API. Utilisez llama.cpp directement pour les dernières options, un contrôle fin des paramètres ou llama-server. Sur Mac, le guide comparatif MLX contre llama.cpp détaille aussi l'autre moteur possible. Pour débuter, Ollama ou LM Studio suffisent.
Quelle vitesse attendre d'un Mac M4 Pro avec llama.cpp ?+
Le benchmark public de llama.cpp donne 50,74 tokens/s en génération et 439,78 en lecture du prompt pour un M4 Pro à 20 cœurs GPU sur un LLaMA 7B en Q4_0. Un modèle plus gros sera plus lent. Ces chiffres varient avec la version de llama.cpp, la mémoire et macOS.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.