- Moteur d’inférence C++ léger et autonome pour les modèles Gemma de Google
- À qui s’adresse ce projet ?
- Les moteurs d’inférence modernes pour grands modèles de langage (LLM) sont des systèmes complexes dotés de fonctionnalités spécialisées qui vont au-delà des runtimes traditionnels de réseaux neuronaux
- Il existe des opportunités de recherche et d’innovation grâce à la co-conception d’algorithmes de haut niveau et de calcul bas niveau, mais un fossé subsiste entre les runtimes d’inférence C++ non conçus pour l’expérimentation et les frameworks de recherche ML centrés sur Python qui abstraient les calculs bas niveau
- gemma.cpp fournit une implémentation minimale des modèles Gemma 2B et 7B, en mettant l’accent sur la simplicité et le caractère direct plutôt que sur la généralité
- gemma.cpp vise les cas d’usage d’expérimentation et de recherche, peut être facilement intégré à d’autres projets avec un minimum de dépendances, et se modifie aisément grâce à environ 2K LoC d’implémentation principale et 4K LoC d’utilitaires de support
- Utilise le SIMD portable de Google Highway Library pour l’inférence sur CPU
- Pour un déploiement en production, il est recommandé d’emprunter les voies de déploiement standard utilisant des frameworks Python comme JAX, Keras, PyTorch et Transformers
Démarrage rapide
Configuration système requise
- Avant de commencer, CMake, le compilateur C++ Clang (avec prise en charge de C++17 ou supérieur) et
tar pour extraire les archives depuis Kaggle doivent être installés
Étape 1 : obtenir les poids du modèle et le tokenizer depuis Kaggle
- Rendez-vous sur la page du modèle Gemma sur Kaggle puis sélectionnez
Model Variations |> Gemma C++
- Le menu déroulant
Variation propose des poids en bfloat16 (fidélité plus élevée) et des poids en virgule flottante convertis en 8 bits (inférence plus rapide)
- Il est généralement recommandé de commencer avec le checkpoint
-sfp
Étape 2 : extraire les fichiers
- Après avoir rempli le formulaire de consentement, téléchargez puis extrayez le fichier
archive.tar.gz
- Les fichiers extraits incluent les poids du modèle (par exemple
2b-it-sfp.sbs) et le fichier de tokenizer (tokenizer.spm)
- Vous pouvez déplacer ces fichiers vers un répertoire pratique (par exemple le répertoire
build/ de ce dépôt)
Étape 3 : compilation
- Le système de build utilise CMake
- Pour compiler le runtime d’inférence gemma, créez un répertoire de build puis générez les fichiers de build avec
cmake depuis le répertoire racine du projet
- Pour les poids en virgule flottante convertis en 8 bits (sfp), exécutez cmake sans option
- Si vous avez téléchargé des poids en bfloat16, au lieu d’exécuter cmake sans option comme ci-dessus, lancez cmake en définissant WEIGHT_TYPE sur le type
hwy::bfloat16_t de highway
- Après avoir exécuté la commande
cmake appropriée, placez-vous dans le répertoire build/ puis exécutez make pour compiler l’exécutable ./gemma
Étape 4 : exécution
- Vous pouvez exécuter
gemma depuis le répertoire build/
gemma nécessite des arguments obligatoires et peut par exemple être lancé avec le fichier de poids 2b-it-sfp.sbs et le fichier de tokenizer tokenizer.spm
Utilisation
gemma propose différents modes d’utilisation, contrôlés par le drapeau de verbosité
- Tous les modes d’utilisation sont actuellement interactifs, la génération de texte étant déclenchée à chaque saisie d’une nouvelle ligne
Application terminal interactive
- Par défaut, la verbosité est définie sur 1, et
gemma fournit une interface interactive en terminal lors de son exécution
Utilisation comme outil en ligne de commande
- Pour utiliser l’exécutable
gemma comme outil en ligne de commande, il peut être utile de créer un alias avec des arguments entièrement spécifiés pour gemma.cpp
Inclure la bibliothèque gemma.cpp dans un projet
- La façon la plus simple d’inclure gemma.cpp dans votre propre projet est d’utiliser
FetchContent pour récupérer gemma.cpp et ses dépendances
- Vous pouvez ajouter ce qui suit à votre CMakeLists.txt
Compiler gemma.cpp comme bibliothèque
- gemma.cpp peut être utilisé comme dépendance de bibliothèque dans votre propre projet, et vous pouvez générer un artefact de bibliothèque partagée en compilant la cible
libgemma
Remerciements et contact
- gemma.cpp a été lancé à l’automne 2023 par Austin Huang et Jan Wassenberg, puis publié en février 2024 avec les contributions de Phil Culliton, Paul Chang et Dan Zheng
- Ce n’est pas un produit Google officiellement pris en charge.
Avis de GN⁺ :
- gemma.cpp est un outil utile pour l’expérimentation et la recherche sur les grands modèles de langage, en fournissant un moteur d’inférence allégé basé sur C++ qui contribue à combler le fossé avec les frameworks existants centrés sur Python
- Ce projet offre l’opportunité de contribuer à la communauté open source et souligne l’importance de respecter les directives open source de Google
- gemma.cpp est conçu pour être facilement intégré et utilisé par les développeurs et les chercheurs dans leurs propres projets grâce à ses divers modes d’utilisation, avec un potentiel pour stimuler l’innovation dans les domaines de l’IA et du ML
1 commentaires
Avis Hacker News
Présentation d’Austin et description du projet :
Avis sur la compétitivité de Google dans les LLM :
Question sur le système de build :
Éloges sur les performances de Gemma :
Admiration pour la vitesse d’évolution de l’écosystème open source des LLM :
Question sur les formats de modèle :
Discussion sur les capacités mathématiques des LLM :
Question sur d’éventuelles restrictions de contenu dans Gemma :
Remerciements envers gemma.cpp et attente de nouvelles fonctionnalités :
Question sur la taille de l’exécutable du modèle Gemma :