Polydesk-logotype
Polydesk.ai — Header

GGML (Georgi Gerganov Machine Learning)

GGML est une bibliothèque tensor écrite en C/C++ par Georgi Gerganov, conçue pour exécuter des opérations d’algèbre tensorielle (multiplications matricielles, calculs d’attention, fonctions d’activation) de manière optimisée sur du matériel grand public, en particulier les CPU. C’est le moteur de calcul bas niveau qui alimente llama.cpp, whisper.cpp et l’ensemble de l’écosystème d’inférence locale de LLM.

Si vous avez déjà lancé un modèle via Ollama, LM Studio ou Jan, c’est GGML qui effectuait les calculs en coulisse. La bibliothèque n’alloue pas de mémoire à l’exécution, n’a aucune dépendance externe, supporte la quantification native de 1,5 à 8 bits, et fonctionne sur un éventail de matériel allant du Raspberry Pi aux GPU NVIDIA Blackwell. En février 2026, Georgi Gerganov et son équipe GGML.ai ont rejoint Hugging Face, intégrant le moteur d’inférence locale le plus utilisé au monde directement dans le plus grand écosystème de modèles open source.

GGML en bref
Type
Bibliothèque tensor pour l’inférence de modèles de machine learning
Langage
C/C++ pur (aucune dépendance externe)
Créateur
Georgi Gerganov (Bulgarie)
Date de création
Septembre 2022
Licence
MIT
Projets principaux
llama.cpp (LLM), whisper.cpp (speech-to-text)
Format de fichier
GGUF (remplace l’ancien format GGML depuis août 2023)
GitHub
ggml-org/ggml (14 200+ étoiles)
Acquis par
Hugging Face (février 2026)

Histoire et contexte

Fin septembre 2022, Georgi Gerganov commence à développer GGML avec un objectif clair : créer une bibliothèque de calcul tensoriel en C qui soit rapide, portable, et qui gère la mémoire de manière stricte. L’inspiration vient de LibNC, un projet de Fabrice Bellard. Le premier projet construit sur GGML est whisper.cpp, une implémentation en C++ du modèle Whisper d’OpenAI pour la transcription audio.

En mars 2023, quand Meta publie les poids de LLaMA, Gerganov crée llama.cpp : une implémentation de l’inférence LLaMA en C/C++ pur, sans aucune dépendance. Le projet explose. Pour la première fois, des développeurs peuvent faire tourner un LLM de 7 milliards de paramètres sur un MacBook, un PC de bureau, voire un Raspberry Pi. C’est un moment fondateur pour l’IA locale.

En août 2023, le format de fichier GGUF remplace l’ancien format GGML pour résoudre les problèmes d’extensibilité et de rétrocompatibilité. Le terme « GGML » désigne désormais principalement la bibliothèque tensor, tandis que « GGUF » désigne le format de fichier.

En février 2026, Hugging Face acquiert GGML.ai. Georgi Gerganov et son équipe rejoignent Hugging Face, fusionnant le moteur d’inférence locale le plus populaire avec le plus grand hub de modèles IA. Cette acquisition signifie que les quantifications GGUF de première main seront produites directement par les mainteneurs du format, testées contre la CI de llama.cpp, et hébergées nativement sur le Hub.

Architecture technique

Exécution par graphe de calcul

GGML utilise une approche basée sur les graphes de calcul (computation graphs). Les opérations sont définies une fois sous forme de graphe (les tenseurs sont les nœuds, les opérations sont les arêtes), puis le graphe est exécuté. Cette approche permet d’optimiser l’ordonnancement des opérations, de réutiliser la mémoire entre opérations non concurrentes, et d’exécuter le même graphe plusieurs fois avec des entrées différentes sans le reconstruire.

Voici un exemple minimaliste avec le binding Python :

import ggml import ctypes # Créer un contexte avec 16 Mo de mémoire params = ggml.ggml_init_params(mem_size=16 * 1024 * 1024, mem_buffer=None) ctx = ggml.ggml_init(params) # Créer des tenseurs x = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1) a = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1) b = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1) # Construire le graphe de calcul : f(x) = a*x² + b x2 = ggml.ggml_mul(ctx, x, x) f = ggml.ggml_add(ctx, ggml.ggml_mul(ctx, a, x2), b) # Définir les valeurs et exécuter ggml.ggml_set_f32(x, 2.0) ggml.ggml_set_f32(a, 3.0) ggml.ggml_set_f32(b, 4.0) gf = ggml.ggml_new_graph(ctx) ggml.ggml_build_forward_expand(gf, f) ggml.ggml_graph_compute_with_ctx(ctx, gf, 1) output = ggml.ggml_get_f32_1d(f, 0) # 3*4 + 4 = 16.0 ggml.ggml_free(ctx)

Gestion mémoire sans allocation dynamique

Une des caractéristiques les plus distinctives de GGML : la bibliothèque n’alloue pas de mémoire à l’exécution. Toute la mémoire est pré-allouée dans des « contextes » (ggml_context), qui sont des arènes de mémoire contiguë dans lesquelles les tenseurs sont alloués séquentiellement. Cela élimine les overhead du garbage collector et de l’allocateur dynamique, et rend le comportement mémoire parfaitement prédictible, un avantage crucial pour le déploiement embarqué et edge.

Quantification native

GGML intègre les types de quantification directement dans son système de types. Les opérations clés (notamment vec_dot, utilisée pour les multiplications matricielles) disposent d’implémentations optimisées pour chaque type de quantification : Q4_0, Q4_K, Q5_K, Q6_K, Q8_0, et les I-quants. Cela signifie que les calculs sur des poids quantifiés ne sont pas simplement des opérations flottantes sur des poids déquantifiés : ce sont des opérations natives en précision réduite, avec des kernels assembleur optimisés pour chaque architecture matérielle.

Système de backends multi-matériel

GGML utilise une architecture de backends abstraite qui permet d’exécuter les mêmes opérations sur différents accélérateurs matériels. Chaque backend implémente une interface commune (ggml_backend_i) :

Backend Matériel Optimisations
CPU x86 (Intel/AMD), ARM AVX, AVX2, AVX-512, AVX-VNNI, AMX (Intel), NEON, i8MM, SVE, SME (ARM)
Metal Apple Silicon (M1-M4) Accélération GPU via Metal, mémoire unifiée
CUDA NVIDIA (Turing+) Tensor Cores, kernels CUDA personnalisés
HIP AMD (ROCm) Compute shaders AMD
Vulkan Cross-platform GPU Compute shaders Vulkan 1.2+
SYCL Intel (oneAPI) GPU Intel Arc/Data Center Max
MUSA Moore Threads GPU Moore Threads
CANN Huawei Ascend NPU Huawei
OpenCL Cross-platform Compute générique
RPC Réseau Inférence distribuée sur plusieurs machines

Quand GGML est compilé avec GGML_CPU_ALL_VARIANTS=ON, toutes les variantes CPU sont construites comme des bibliothèques dynamiques, et le backend sélectionne automatiquement la meilleure variante à l’exécution en fonction des fonctionnalités CPU détectées. Sur un Intel récent avec AMX, par exemple, GGML activera les instructions de multiplication matricielle matérielle pour maximiser le throughput.

Performances d’inférence

Les performances de GGML via llama.cpp varient considérablement selon le matériel, la taille du modèle et le schéma de quantification. Voici des ordres de grandeur pour un modèle 7-8B en Q4_K_M :

CPU x86 seul (Intel/AMD récent) : 8 à 15 tokens/seconde en génération, selon le CPU et la mémoire. Suffisant pour de la conversation interactive mais lent pour du batch processing. L’utilisation d’AVX-512 ou AMX (Intel 13ème gen+) améliore sensiblement les résultats.

Apple Silicon (M2/M3/M4) : 30 à 50+ tokens/seconde grâce à la mémoire unifiée et l’accélération Metal. Un MacBook Pro M3 avec 36 Go de RAM peut faire tourner un modèle 32B en Q4_K_M de manière fluide. C’est l’une des meilleures plateformes pour l’inférence locale GGML.

GPU NVIDIA (RTX 4090, full offload) : 60 à 120+ tokens/seconde selon le modèle. La bande passante mémoire GDDR6X (1 To/s) est le facteur limitant en génération token par token. Sur les modèles plus gros (70B), le split CPU+GPU est possible mais ralentit proportionnellement.

Pour les modèles plus gros, les performances chutent proportionnellement à la taille. Un 70B en Q4_K_M sur CPU seul génère 1 à 3 tokens/seconde, ce qui est utilisable pour du batch mais pas pour du temps réel. L’offloading GPU partiel ou total est fortement recommandé pour les modèles au-delà de 13B.

Bandwidth-bound, pas compute-bound L’inférence LLM en génération (un token à la fois) est limitée par la bande passante mémoire, pas par la puissance de calcul. C’est pourquoi la quantification accélère l’inférence : des poids plus petits (4 bits vs 16 bits) transitent 4× plus vite à travers le bus mémoire. C’est aussi pourquoi Apple Silicon, avec sa mémoire unifiée haute bande passante, est si performant pour l’inférence locale.

Offloading hybride CPU+GPU

L’une des fonctionnalités les plus pratiques de GGML est l’offloading partiel. Le paramètre -ngl (number of GPU layers) dans llama.cpp contrôle combien de couches du modèle sont chargées sur le GPU. Les couches restantes restent sur CPU. Cela permet de faire tourner des modèles qui ne tiennent pas entièrement dans la VRAM du GPU.

Par exemple, pour un modèle 32B en Q4_K_M (~19 Go) sur un GPU de 12 Go : vous pouvez offloader environ 20 couches sur le GPU (qui consomment ~12 Go de VRAM) et laisser les ~15 couches restantes sur CPU. L’inférence sera plus lente qu’en GPU complet, mais nettement plus rapide qu’en CPU pur. C’est un compromis que ni GPTQ ni AWQ natifs ne permettent.

GGML vs PyTorch / TensorFlow

GGML et PyTorch ciblent des cas d’usage fondamentalement différents :

Critère GGML PyTorch
Focus Inférence optimisée Entraînement + inférence
Langage C/C++ pur C++ avec API Python
Dépendances Aucune Python, CUDA, nombreuses libs
Allocation mémoire Statique (pré-allouée) Dynamique
Taille du binaire Quelques Mo Plusieurs Go
Quantification Native (1,5 à 8 bits) Via bibliothèques externes (bitsandbytes, TorchAO)
CPU performance Excellent (optimisations assembleur) Correct mais pas le focus
GPU performance Bon (kernels CUDA custom) Excellent (écosystème mature)
Portabilité Fonctionne partout (Raspberry Pi, mobile, navigateur) Principalement serveur/desktop
Entraînement Support basique (différentiation automatique expérimentale) Complet

En résumé : GGML est un moteur d’inférence minimaliste et portable. PyTorch est un framework complet de machine learning. On ne choisit pas entre les deux, on les utilise dans des contextes différents : PyTorch pour entraîner et fine-tuner, GGML (via llama.cpp) pour déployer et inférer localement.

Les projets construits sur GGML

llama.cpp : le projet phare. Moteur d’inférence pour les LLM, support de 50+ architectures, format GGUF, serveur OpenAI-compatible. C’est le projet qui a démocratisé l’inférence LLM locale. Il alimente indirectement Ollama, LM Studio et Jan.

whisper.cpp : implémentation de Whisper (modèle de speech-to-text d’OpenAI) en C++. Permet la transcription audio en temps réel sur du matériel grand public, sans Python ni GPU.

llama.vim / llama.vscode : extensions pour la complétion de code/texte assistée par LLM, directement intégrées dans Vim et VS Code, alimentées par GGML.

ggml-python : binding Python pour GGML, permettant d’utiliser la bibliothèque depuis Python pour le prototypage et la recherche.

L’acquisition par Hugging Face (février 2026)

L’acquisition de GGML.ai par Hugging Face en février 2026 est un événement structurant pour l’écosystème IA locale. Concrètement, elle signifie :

Quantifications GGUF de première main sur le Hub. Les mainteneurs du format GGUF produiront directement les quantifications officielles, testées contre la CI de llama.cpp. Fini la dépendance aux re-quantifications tierces de qualité variable.

Pipeline unifié de bout en bout. La découverte de modèles (Hugging Face Hub), la quantification, et le déploiement local partageront un seul pipeline, un seul système d’authentification, et un seul jeu d’outils. Le chemin de « je cherche un modèle » à « il tourne sur mon PC » se simplifie radicalement.

Intégration GGUF dans Transformers. À terme, la bibliothèque Transformers pourrait charger nativement des fichiers GGUF et router vers le backend GGML pour l’inférence, sans passer par un outil externe.

Ce que ça change pour vous Si vous faites de l’inférence locale, standardisez-vous sur GGUF et tirez directement depuis le Hub Hugging Face plutôt que de chercher des re-quantifications tierces. Suivez les notes de release de llama.cpp et de huggingface_hub dans les mois qui viennent : l’intégration GGUF native dans Transformers sera le premier jalon visible.

GGML (la bibliothèque) vs GGUF (le format)

La confusion entre GGML et GGUF est fréquente. Clarifions :

GGML = la bibliothèque tensor en C/C++. C’est le moteur de calcul qui effectue les multiplications matricielles, les opérations d’attention, etc. Elle existe depuis septembre 2022 et continue d’évoluer.

GGUF = le format de fichier binaire qui stocke les poids quantifiés et les métadonnées d’un modèle. Introduit en août 2023, il remplace l’ancien format de fichier (aussi appelé « GGML format ») qui était moins extensible.

L’ancien « format GGML » = un format de fichier aujourd’hui obsolète, remplacé par GGUF. Si vous rencontrez des fichiers .bin étiquetés « GGML format », ils ne sont plus supportés par les versions récentes de llama.cpp. Reconvertissez depuis les poids FP16 originaux.

En résumé : GGML (la bibliothèque) charge et exécute des fichiers GGUF (le format). Les deux portent le nom de leur créateur (Georgi Gerganov) mais désignent des choses différentes.

Limites de GGML

Pas conçu pour l’entraînement. GGML dispose d’un support basique de la différentiation automatique, mais il n’est pas adapté à l’entraînement de gros modèles. Pour l’entraînement et le fine-tuning, utilisez PyTorch (avec bitsandbytes pour le fine-tuning quantifié).

Throughput GPU pur inférieur aux solutions spécialisées. Sur GPU NVIDIA pur, vLLM avec des kernels Marlin (pour GPTQ/AWQ) offre un throughput significativement supérieur à llama.cpp/GGML. GGML excelle sur CPU, sur Apple Silicon, et en configuration hybride CPU+GPU, mais n’est pas le meilleur choix pour le serving haute concurrence sur GPU datacenter.

Écosystème C/C++. Le développement de plugins ou d’extensions pour GGML requiert des compétences en C/C++, ce qui limite l’accessibilité par rapport à l’écosystème Python de PyTorch. Les bindings Python existent mais restent moins matures.

Support Windows partiel. Bien que llama.cpp compile sous Windows, certaines fonctionnalités (notamment les modules fusionnés et certains backends GPU) sont plus stables sous Linux et macOS.


Questions fréquentes sur GGML

GGML et llama.cpp, c’est la même chose ?

Non. GGML est la bibliothèque tensor de bas niveau (les maths, la gestion mémoire, les backends matériels). llama.cpp est le moteur d’inférence de haut niveau construit au-dessus de GGML, spécifiquement pour les LLM. llama.cpp gère le chargement des modèles GGUF, le sampling, le cache KV, le serveur API, etc. GGML est aussi utilisé par d’autres projets (whisper.cpp, par exemple) qui n’ont rien à voir avec les LLM.

Pourquoi GGML est-il si rapide sur CPU ?

Parce qu’il est écrit en C/C++ pur avec des kernels assembleur optimisés pour chaque architecture CPU. Les multiplications matricielles (l’opération dominante dans l’inférence LLM) utilisent les instructions SIMD les plus récentes disponibles : AVX-512 et AMX sur Intel, NEON et SME sur ARM/Apple Silicon. La gestion mémoire statique élimine les overhead d’allocation, et la quantification native permet de travailler directement en précision réduite sans déquantification coûteuse.

Faut-il un GPU pour utiliser GGML / llama.cpp ?

Non. GGML fonctionne parfaitement en mode CPU seul. Un processeur moderne x86 ou Apple Silicon peut générer 8 à 15 tokens/seconde avec un modèle 7B en Q4_K_M, ce qui est suffisant pour de la conversation interactive. Un GPU accélère considérablement les choses (40+ tok/s sur Apple M2 Ultra, encore plus sur RTX 4090), mais n’est pas obligatoire. C’est l’un des avantages distinctifs de GGML par rapport aux solutions GPU-only comme vLLM.

L’acquisition par Hugging Face va-t-elle changer quelque chose pour les utilisateurs ?

À court terme, rien ne change : llama.cpp reste open source (MIT), GGUF reste le format standard, et Ollama/LM Studio continuent de fonctionner exactement comme avant. À moyen terme, attendez-vous à une intégration plus étroite entre le Hub Hugging Face et l’inférence locale : des quantifications GGUF officielles produites par les mainteneurs du format, et potentiellement un chargement natif de GGUF dans la bibliothèque Transformers. La communauté reste vigilante sur le maintien de l’ouverture du projet.

Peut-on utiliser GGML pour autre chose que des LLM ?

Oui. GGML est une bibliothèque tensor généraliste. whisper.cpp l’utilise pour la transcription audio (modèle Whisper). Des projets communautaires l’utilisent pour des embeddings (CLIP), de la classification d’images, et d’autres tâches de machine learning. Cependant, l’écosystème est bien plus mature pour les LLM (via llama.cpp) que pour les autres cas d’usage.

Polydesk.ai — Footer