Qu'est-ce que GGML?

by Stephen M. Walker II, Co-Fondateur / PDG

GGML est conçu pour être utilisé en conjonction avec la bibliothèque llama.cpp, également créée par Georgi Gerganov, qui est écrite en C/C++ pour une inférence efficace des modèles Llama. Il peut charger des modèles GGML et les exécuter sur un CPU. Le format de fichier GGML a été remplacé par le format de fichier GGUF.

Qu'est-ce que GGML?

GGML est une bibliothèque C axée sur l'apprentissage automatique, créée par Georgi Gerganov. Elle fournit des éléments fondamentaux pour l'apprentissage automatique, tels que les tenseurs, et un format binaire unique pour distribuer de grands modèles de langage (LLM) pour des opérations de tenseur rapides et flexibles et des tâches d'apprentissage automatique.

Comment puis-je commencer avec GGML?

Pour commencer avec GGML, vous devrez installer la bibliothèque ggml-python, qui est une interface Python pour la bibliothèque de tenseurs GGML développée par Georgi Gerganov. GGML est conçu pour l'apprentissage automatique et est écrit en C/C++, ce qui le rend rapide, portable et facilement intégrable. Il prend en charge divers systèmes d'accélération matérielle comme BLAS, CUDA, OpenCL et Metal, et il prend également en charge l'inférence quantifiée pour une empreinte mémoire réduite et une inférence plus rapide.

Voici les étapes pour commencer :

  1. Exigences d'installation : Vous aurez besoin de Python 3.7+ et d'un compilateur C (gcc, clang, msvc, etc).

  2. Installation : Vous pouvez installer ggml-python en utilisant pip. Cela compilera ggml en utilisant cmake, ce qui nécessite un compilateur C installé sur votre système.

  3. Exemple de base : Voici un exemple simple d'utilisation de l'API de bas niveau de ggml-python pour calculer la valeur d'une fonction :

import ggml
import ctypes

# Allouer un nouveau 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=params)

# Instancier 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)

# Libérer le contexte
ggml.ggml_free(ctx)
  1. Prochaines étapes : Pour en savoir plus sur ggml-python, consultez la référence de l'API, les exemples et le serveur de complétion de code. Vous pouvez également consulter l'exemple d'incrustations CLIP, qui montre comment implémenter des incrustations de texte/image CLIP en utilisant ggml-python.

  2. Développement : Si vous souhaitez contribuer au développement de ggml-python, vous pouvez cloner le dépôt depuis GitHub.

N'oubliez pas, GGML est conçu pour être utilisé avec CPU, et si vous voulez utiliser GPU, vous devrez l'exécuter avec PyTorch. Vous pouvez également utiliser llama.cpp avec BLAS pour décharger les couches sur le GPU. Si vous êtes intéressé par l'entraînement de votre propre modèle GGML à partir de zéro, vous pouvez vous référer à ce tutoriel.

Qu'est-ce que llama.cpp et whisper.cpp?

llama.cpp et whisper.cpp sont des implémentations C++ de deux modèles d'IA différents.

llama.cpp est une bibliothèque C++ pour exécuter de grands modèles de langage (LLM). Elle fournit des liaisons Python, permettant aux programmes Python d'accéder à l'API C++. Cette bibliothèque est connue pour son inférence rapide et sa facilité d'intégration en tant que bibliothèque ou en utilisant les binaires d'exemple. Elle prend en charge l'inférence pour de nombreux modèles LLM, qui peuvent être accessibles sur Hugging Face. La bibliothèque est optimisée pour l'utilisation du CPU, mais prend également en charge l'accélération GPU en utilisant divers backends BLAS, et a même des optimisations spécifiques pour MacOS avec Apple Silicon Chip. La simplicité de son installation et de son utilisation, ainsi que sa capacité à exécuter de grands modèles avec plus de 1B de paramètres, l'ont rendue populaire parmi les développeurs.

whisper.cpp, en revanche, est un port C++ du modèle de reconnaissance automatique de la parole (ASR) Whisper d'OpenAI. Whisper est un système ASR formé sur une grande quantité de données supervisées multilingues et multitâches. L'implémentation whisper.cpp est légère et n'a pas de dépendances, ce qui la rend facile à utiliser dans divers projets. Elle a été utilisée pour des tâches telles que la transcription audio dans les applications iOS. Ce projet est également connu pour sa portabilité, avec des exemples d'exécution du modèle sur divers appareils comme un iPhone, un Raspberry Pi 4, et même dans une page web via WebAssembly.

llama.cpp et whisper.cpp ont été salués pour leur simplicité et leur facilité d'utilisation, abaissant la barrière pour les développeurs de travailler avec de grands modèles de langage et des modèles de reconnaissance de la parole respectivement.

Comment puis-je commencer avec llama.cpp et whisper.cpp?

Pour commencer avec llama.cpp et whisper.cpp, vous devrez configurer votre environnement de développement, cloner les dépôts respectifs, et acquérir les modèles nécessaires. Voici un guide étape par étape pour chacun :

Commencer avec llama.cpp

  1. Installer les packages requis : Si vous utilisez MacOS, vous pouvez utiliser Homebrew pour installer les packages nécessaires. Ouvrez Terminal et exécutez les commandes suivantes :
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install cmake [email protected] git wget
  1. Cloner le dépôt llama.cpp : Dans Terminal, exécutez les commandes suivantes :
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
  1. Télécharger le modèle LLaMA 2 : Meta a rendu le modèle public. Vous pouvez demander l'accès et télécharger Llama 2 via un site fourni par Meta. Une fois approuvé, vous recevrez un lien de téléchargement. Placez le modèle téléchargé dans le dossier models à l'intérieur du dossier llama.cpp.

  2. Installer les dépendances Python : Assurez-vous que vous utilisez Python 3.10. Dans le dossier llama.cpp dans Terminal, créez un environnement virtuel et installez les packages Python nécessaires :

python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio sentencepiece numpy
  1. Exécuter le modèle : Vous pouvez utiliser un script pratique pour exécuter le modèle 7B dans un environnement Python.

Comment utiliser une variante communautaire de Llama 2?

Les principaux modèles de variantes communautaires de Llama 2 sont :

  1. MythoMax-L2-13B : Il s'agit d'une variante communautaire populaire du modèle Llama 2 13B. Il est connu pour ses capacités de narration intelligentes et de bonne qualité.

  2. Nous-Hermes-Llama2 : Il s'agit d'une autre variante communautaire du modèle Llama 2 13B. Il est également reconnu pour ses impressionnantes capacités de narration.

  3. Zephyr 7b : Ce modèle n'est pas basé sur Llama 2, mais plutôt sur le modèle Mistral 7b comme fondation. Le modèle est optimisé pour les capacités, et non pour les générations de sortie sûres.

Ces variantes communautaires ont été développées par des chercheurs et des développeurs qui ont profité de la nature open source des modèles Llama 2. Ils ont affiné les modèles de base pour créer des variantes mieux adaptées à des tâches ou des cas d'utilisation spécifiques. La licence open source de Llama 2 a été un facteur important pour permettre ce type d'innovation et de personnalisation.

Commencer avec Whisper.cpp

  1. Cloner le dépôt Whisper.cpp : Cela vous fournira le code source.

  2. Acquérir le modèle Whisper : Vous devrez récupérer un modèle Whisper. Les spécificités de cette étape peuvent varier en fonction de la source du modèle.

  3. Installer et déployer Whisper.cpp : Les instructions détaillées pour cette étape peuvent varier en fonction de votre cas d'utilisation spécifique et de votre environnement de déploiement. Vous pouvez trouver des ressources supplémentaires sur des plateformes comme GitHub, Reddit, ou des tutoriels spécifiques en ligne.

N'oubliez pas, llama.cpp et whisper.cpp sont écrits en C/C++, donc vous aurez besoin d'un compilateur C/C++ installé sur votre système. Si vous utilisez MacOS, vous pouvez installer les compilateurs nécessaires via Homebrew. Si vous rencontrez des problèmes, pensez à consulter la documentation officielle ou les forums de discussion pertinents pour des conseils de dépannage.

Comment GGML gère-t-il les grands modèles de langage (LLM) ?

GGML est utilisé par llama.cpp et whisper.cpp, et est écrit en C. Il prend en charge la quantification en float et en entier de 16 bits (par exemple, 4 bits, 5 bits, 8 bits), la différenciation automatique, les algorithmes d'optimisation intégrés (par exemple, ADAM, L-BFGS), et est optimisé pour Apple Silicon.

En ce qui concerne la gestion des grands modèles de langage (LLM), GGML est conçu pour équilibrer l'utilisation du GPU et du CPU. Cela est particulièrement utile lorsque la taille du modèle dépasse la VRAM disponible, car GGML peut surpasser d'autres méthodes en utilisant la RAM système au lieu de la VRAM. Par exemple, un modèle GGML 33B peut toujours être plus rapide qu'un modèle GPTQ 13B avec plusieurs couches échangées vers la RAM système.

Cependant, il est important de noter que les modèles GGML peuvent être plus lents que d'autres modèles lorsqu'ils sont exécutés sur un GPU, car ils sont conçus pour utiliser également le CPU. Cela peut entraîner une génération de tokens plus lente et des temps de démarrage plus longs pour la génération de tokens. Les performances des modèles GGML peuvent être améliorées en attribuant correctement le nombre de threads au chargeur GGML, qui doit être égal ou inférieur au nombre réel de cœurs de CPU.

GGML est également optimisé pour différentes architectures, y compris les architectures x86 utilisant les intrinsèques AVX / AVX2, et offre un support web via WebAssembly et WASM SIMD. Il n'a pas de dépendances tierces et aucune allocation de mémoire pendant l'exécution, ce qui peut contribuer à ses performances.

En termes de statistiques de performance spécifiques sur Apple Silicon, un modèle LLaMA 7B avec une quantification de 4 bits et une taille de 3,5 Go peut générer des tokens à un taux de 43 ms par token sur un M1 Pro avec 8 threads CPU, tandis qu'un modèle LLaMA 13B avec une quantification de 4 bits et une taille de 6,8 Go peut générer des tokens à un taux de 73 ms par token sur le même matériel.

GGML équilibre l'utilisation du GPU et du CPU, et optimise les performances en fonction du matériel disponible. Cependant, il est important de configurer correctement le chargeur GGML pour assurer des performances optimales.

Comment GGML fonctionne-t-il avec d'autres bibliothèques?

GGML est une bibliothèque de tenseurs pour l'apprentissage automatique développée par Georgi Gerganov. Elle est écrite en C/C++ et est conçue pour être rapide, portable et facilement intégrable, en utilisant divers systèmes d'accélération matérielle comme BLAS, CUDA, OpenCL et Metal. Elle prend en charge l'inférence quantifiée pour une empreinte mémoire réduite et une inférence plus rapide. GGML fonctionne de manière transparente sur diverses plateformes, y compris Mac, Windows, Linux, iOS, Android, les navigateurs web, et même Raspberry Pi.

Par rapport à d'autres bibliothèques d'apprentissage automatique, GGML a plusieurs caractéristiques et avantages uniques. Elle ne nécessite pas un format spécifique pour le fichier de modèle, ce qui signifie que vous pouvez convertir le fichier de modèle de n'importe quel autre framework (comme TensorFlow, Pytorch, etc.) en un fichier binaire dans n'importe quel format qui est facile pour vous à gérer plus tard. Elle prend également en charge une large gamme de modèles comme Whisper et LLaMa.

Cependant, GGML a également certaines limites. Il est encore en phase de développement et manque actuellement de documentation complète, ce qui peut rendre difficile pour les nouveaux utilisateurs de commencer à l'utiliser rapidement. La réutilisation du code source à travers différents modèles peut être difficile en raison de la structure unique de chaque modèle.

En termes de performance, on a constaté que GGML a une vitesse d'inférence stable, un utilisateur rapportant environ 82 tokens par seconde sur un GPU avec un 4090 et 24 Go de RAM. Cependant, les performances peuvent varier en fonction du modèle spécifique et du matériel utilisé. Par exemple, lors de la comparaison de GGML avec GPTQ, si vous pouvez adapter le modèle entier dans VRAM + contexte, alors GPTQ sera nettement plus rapide. Sinon, GGML est plus rapide à nettement plus rapide en fonction du nombre de couches que vous devez décharger.

GGML est une bibliothèque d'apprentissage automatique polyvalente et portable qui offre plusieurs avantages par rapport à d'autres bibliothèques, en particulier en termes de flexibilité avec les formats de fichiers de modèles et de son support pour une large gamme de modèles. Cependant, ses performances peuvent varier en fonction du modèle spécifique et du matériel utilisé, et il manque actuellement de documentation complète, ce qui peut poser des défis pour les nouveaux utilisateurs.

Qu'est-ce que le format de fichier GGUF ?

Le format de fichier GGUF est un nouveau format binaire extensible pour les modèles d'IA, spécialement conçu pour les modèles développés dans des frameworks comme PyTorch. Il a été introduit en août 2023 et se concentre sur le chargement rapide, la flexibilité et la commodité d'un seul fichier. Le format de fichier GGUF est utilisé avec les modèles d'IA LLaMA et Llama-2 et fonctionne sur llama.cpp.

Le format de fichier GGUF améliore les formats précédents comme GGML et GGJT en offrant une meilleure tokenisation, un support pour les tokens spéciaux, des métadonnées et une extensibilité. Il utilise une structure clé-valeur pour des choses comme les hyperparamètres au lieu d'une simple liste de valeurs, ce qui le rend plus flexible et extensible pour les changements futurs. De nouvelles informations peuvent être ajoutées sans rompre la compatibilité avec les modèles GGUF existants.

Le format de fichier GGUF est conçu pour être facile à utiliser, nécessitant juste une petite quantité de code pour charger les modèles. Il n'y a pas besoin de bibliothèques externes car le fichier contient toutes les informations du modèle. Il succède aux formats de fichiers GGML, GGMF et GGJT et est conçu pour être sans ambiguïté en contenant toutes les informations nécessaires pour charger un modèle. Il est également conçu pour être extensible, de sorte que de nouvelles fonctionnalités peuvent être ajoutées à GGML sans rompre la compatibilité avec les anciens modèles.

En termes d'utilisation, GGUF est destiné aux modèles que vous souhaitez utiliser pour l'inférence avec llama.cpp ou des systèmes connexes. Le fichier GGUF contient toutes les informations nécessaires pour charger et exécuter le modèle.

Quels sont les avantages associés à l'utilisation de GGML ?

GGML (Generic Graph Machine Learning) est une bibliothèque de tenseurs pour l'apprentissage automatique qui offre plusieurs avantages pour l'entraînement de modèles à grande échelle et le calcul haute performance sur du matériel grand public. Voici quelques-uns des principaux avantages :

  1. Compatibilité multiplateforme : GGML est écrit en C, ce qui lui permet de fonctionner de manière transparente sur diverses plateformes, y compris Mac, Windows, Linux, iOS, Android, les navigateurs web, et même Raspberry Pi.

  2. Informatique de bord : GGML est conçu avec une fonctionnalité qui garantit qu'il n'y a pas d'allocation de mémoire pendant l'exécution. Il prend en charge la quantification en demi-taille flottante et entière, ce qui permet aux développeurs d'avoir un meilleur contrôle sur l'utilisation de la mémoire et la gestion des performances. C'est crucial pour faire fonctionner les modèles d'apprentissage automatique sur les appareils de bord où l'utilisation efficace des ressources est importante.

  3. Flexibilité du format de modèle : Contrairement à d'autres frameworks d'inférence d'apprentissage automatique, GGML n'exige pas un format spécifique pour le fichier de modèle. Cela signifie que vous pouvez convertir le fichier de modèle de n'importe quel autre framework (comme TensorFlow, Pytorch, etc.) en un fichier binaire dans n'importe quel format qui est facile pour vous à gérer plus tard.

  4. Entraînement de modèles à grande échelle : GGML est conçu pour répondre aux besoins des experts en apprentissage automatique, en fournissant une gamme complète de fonctionnalités et d'optimisations pour l'entraînement de modèles à grande échelle et le calcul haute performance sur n'importe quel matériel grand public.

  5. Support de la quantification : GGML prend en charge un certain nombre de stratégies de quantification différentes (par exemple, la quantification à 4 bits, 5 bits et 8 bits), chacune offrant différents compromis entre l'efficacité et les performances.

  6. Inférence CPU : GGML permet une inférence CPU, ce qui peut être bénéfique lorsque les ressources GPU sont limitées. Cela rend possible l'exécution de grands modèles de langage sur du matériel grand public avec une inférence CPU efficace.

  7. Meilleure qualité de réponse : Les modèles GGML peuvent fournir une meilleure qualité de réponse par rapport à d'autres modèles. Par exemple, un modèle GGML 33B peut fournir une meilleure qualité de sortie qu'un modèle 7B, même si ce dernier a une inférence plus rapide.

Cependant, il est important de noter que GGML est encore en phase de développement et manque actuellement de documentation complète, ce qui peut rendre difficile pour les nouveaux utilisateurs de commencer à l'utiliser rapidement. De plus, la réutilisation du code source à travers différents modèles peut être difficile en raison de la structure unique de chaque modèle. Malgré ces défis, les avantages de GGML en font un outil prometteur pour les applications d'apprentissage automatique.

Quels sont les inconvénients de l'utilisation de GGML ?

GGML est une bibliothèque de tenseurs pour l'apprentissage automatique qui est connue pour son fonctionnement efficace sur les CPU et sa capacité à gérer de grands modèles sur du matériel grand public. Il est écrit en C et prend en charge la différenciation automatique, ce qui le rend adapté à l'entraînement et à l'inférence de modèles dans des applications multiplateformes. Cependant, malgré ses avantages, GGML a plusieurs limites par rapport à d'autres bibliothèques d'apprentissage automatique.

  1. Documentation : GGML est encore en phase de développement et manque actuellement de documentation complète. Cela peut rendre difficile pour les nouveaux utilisateurs de commencer à l'utiliser rapidement.

  2. Réutilisabilité du code : La réutilisation du code source à travers différents modèles peut être difficile en raison de la structure unique de chaque modèle. GGML ne fournit pas de guide universel pour cela, donc les utilisateurs ont souvent besoin de créer leur propre code d'inférence, en particulier lorsqu'ils travaillent avec des modèles personnalisés développés en interne. Ce processus nécessite une compréhension approfondie de la façon de travailler avec les matrices mathématiques et la structure des modèles ML.

  3. Quantification : Les fichiers GGML contiennent une représentation quantifiée des poids du modèle, ce qui entraîne une qualité inférieure. L'avantage est des exigences de RAM moindres et une inférence plus rapide sur le CPU, mais cela signifie moins de précision car il nécessite moins de bits.

  4. Support GPU : Bien que GGML soit efficace sur les CPU, ses performances sur les GPU ne sont pas encore entièrement explorées. Certaines discussions suggèrent que le code d'inférence basé sur GGML pourrait ne pas surpasser les bibliothèques établies comme PyTorch ou Triton en termes de performances GPU. Cependant, des efforts sont en cours pour ajouter le support GPU à GGML, et on s'attend à ce que cela améliore ses performances.

  5. Format de modèle : GGML n'exige pas un format spécifique pour le fichier de modèle, ce qui signifie que vous pouvez convertir le fichier de modèle de n'importe quel autre framework (comme TensorFlow, Pytorch, etc.) en un fichier binaire dans n'importe quel format qui est facile pour vous à gérer plus tard. Bien que cela offre de la flexibilité, cela pourrait également introduire des étapes supplémentaires dans le processus de déploiement du modèle, en particulier pour les utilisateurs habitués aux formats standard comme ONNX ou SavedModel de TensorFlow.

Bien que GGML ait plusieurs avantages, comme son fonctionnement efficace sur les CPU et sa flexibilité pour gérer différents formats de modèles, il a également des limites, notamment un manque de documentation complète, des défis dans la réutilisabilité du code et un support GPU limité. Ces facteurs doivent être pris en compte lors du choix d'une bibliothèque d'apprentissage automatique pour un cas d'utilisation spécifique.

More terms

AlpacaEval

AlpacaEval is a benchmarking tool designed to evaluate the performance of language models by testing their ability to follow instructions and generate appropriate responses. It provides a standardized way to measure and compare the capabilities of different models, ensuring that developers and researchers can understand the strengths and weaknesses of their AI systems in a consistent and reliable manner.

Read more

What is combinatorial optimization?

Combinatorial optimization is a subfield of mathematical optimization that focuses on finding the optimal solution from a finite set of objects. The set of feasible solutions is discrete or can be reduced to a discrete set.

Read more

It's time to build

Collaborate with your team on reliable Generative AI features.
Want expert guidance? Book a 1:1 onboarding session from your dashboard.

Start for free