- Leichte, eigenständig ausführbare C++-Inference-Engine für Googles Gemma-Modelle
- Für wen ist dieses Projekt gedacht?
- Moderne Inference-Engines für Large Language Models (LLMs) sind komplexe Systeme mit spezialisierten Funktionen, die über traditionelle Neural-Network-Runtimes hinausgehen
- Es gibt Chancen für Forschung und Innovation durch das Co-Design von High-Level-Algorithmen und Low-Level-Berechnungen, aber es besteht eine Lücke zwischen C++-Inference-Runtimes, die nicht für Experimente konzipiert sind, und Python-zentrierten ML-Forschungs-Frameworks, die Low-Level-Berechnungen abstrahieren
- gemma.cpp bietet eine minimale Implementierung der Modelle Gemma 2B und 7B und legt den Schwerpunkt eher auf Einfachheit und Direktheit als auf Allgemeingültigkeit
- gemma.cpp zielt auf Experimente und Forschungsanwendungen ab, lässt sich mit minimalen Abhängigkeiten leicht in andere Projekte integrieren und mit rund 2K LoC Kernimplementierung und 4K LoC unterstützenden Utilities einfach anpassen
- Nutzt portables SIMD der Google Highway Library für CPU-Inference
- Für produktive Deployments wird der Standard-Deployment-Pfad mit Python-Frameworks wie JAX, Keras, PyTorch und Transformers empfohlen
Schnellstart
Systemanforderungen
- Vor dem Start sollten CMake, der Clang-C++-Compiler (mit Unterstützung für C++17 oder höher) sowie
tar zum Entpacken des Archivs von Kaggle installiert sein
Schritt 1: Modellgewichte und Tokenizer von Kaggle beziehen
- Besuche die Gemma-Modellseite auf Kaggle und wähle
Model Variations |> Gemma C++
- Das Dropdown
Variation enthält Optionen für bfloat16-Gewichte (höhere Genauigkeit) und in 8 Bit umgewandelte Gleitkommagewichte (schnellere Inference)
- Im Allgemeinen wird empfohlen, mit dem
-sfp-Checkpoint zu starten
Schritt 2: Dateien entpacken
- Nach dem Ausfüllen der Einverständniserklärung die Datei
archive.tar.gz herunterladen und entpacken
- Die entpackten Dateien enthalten Modellgewichte (z. B.
2b-it-sfp.sbs) und die Tokenizer-Datei (tokenizer.spm)
- Diese Dateien können an einen passenden Verzeichnisort verschoben werden, etwa in das
build/-Verzeichnis dieses Repositorys
Schritt 3: Build
- Das Build-System verwendet CMake
- Um die gemma-Inference-Runtime zu bauen, ein Build-Verzeichnis erstellen und im obersten Projektverzeichnis mit
cmake die Build-Dateien erzeugen
- Für in 8 Bit umgewandelte Gleitkommagewichte (sfp)
cmake ohne zusätzliche Optionen ausführen
- Wenn bfloat16-Gewichte heruntergeladen wurden, statt
cmake wie oben ohne Optionen auszuführen, cmake mit WEIGHT_TYPE, gesetzt auf den Typ hwy::bfloat16_t von Highway, ausführen
- Nach dem Ausführen des passenden
cmake-Befehls in das Verzeichnis build/ wechseln und make ausführen, um die ausführbare Datei ./gemma zu bauen
Schritt 4: Ausführen
- Innerhalb des Verzeichnisses
build/ kann gemma ausgeführt werden
gemma hat Pflichtargumente und kann beispielsweise mit der Gewichtedatei 2b-it-sfp.sbs und der Tokenizer-Datei tokenizer.spm ausgeführt werden
Verwendung
gemma verfügt über verschiedene Nutzungsmodi, die über ein Verbosity-Flag gesteuert werden
- Alle Nutzungsmodi sind derzeit interaktiv; die Eingabe einer neuen Zeile löst die Textgenerierung aus
Interaktive Terminal-App
- Standardmäßig ist die Verbosity auf 1 gesetzt, und beim Aufruf von
gemma wird eine terminalbasierte interaktive Oberfläche bereitgestellt
Verwendung als Kommandozeilen-Tool
- Um die ausführbare Datei
gemma als Kommandozeilen-Tool zu verwenden, kann es hilfreich sein, einen Alias mit vollständig angegebenen Argumenten für gemma.cpp zu erstellen
Einbinden der gemma.cpp-Bibliothek in ein Projekt
- Der einfachste Weg, gemma.cpp in das eigene Projekt einzubinden, ist die Verwendung von
FetchContent, um gemma.cpp samt Abhängigkeiten zu holen
- Dazu kann Folgendes zur CMakeLists.txt hinzugefügt werden
gemma.cpp als Bibliothek bauen
- gemma.cpp kann im eigenen Projekt als Bibliotheksabhängigkeit verwendet werden; durch den Build des Ziels
libgemma kann ein Shared-Library-Artefakt erzeugt werden
Danksagung und Kontakt
- gemma.cpp wurde im Herbst 2023 von Austin Huang und Jan Wassenberg gestartet und im Februar 2024 mit Beiträgen von Phil Culliton, Paul Chang und Dan Zheng veröffentlicht
- Dies ist kein offiziell unterstütztes Google-Produkt.
Meinung von GN⁺:
- gemma.cpp ist ein nützliches Werkzeug für Experimente und Forschung mit Large Language Models, da es eine leichtgewichtige, C++-basierte Inference-Engine bereitstellt und so hilft, die Lücke zu bestehenden Python-zentrierten Frameworks zu schließen
- Das Projekt bietet die Möglichkeit, zur Open-Source-Community beizutragen, und betont, wie wichtig es ist, die Open-Source-Richtlinien von Google einzuhalten
- gemma.cpp ist so konzipiert, dass Entwickler und Forschende es dank verschiedener Nutzungsmodi leicht in eigene Projekte integrieren und verwenden können, was das Potenzial hat, Innovationen im Bereich AI und ML zu fördern
1 Kommentare
Hacker-News-Kommentare
Vorstellung und Projektbeschreibung durch Austin:
Meinungen zu Googles Wettbewerbsfähigkeit bei LLMs:
Frage zum Build-System:
Lob für Gemmas Leistung:
Bewunderung für das Entwicklungstempo des Open-Source-LLM-Ökosystems:
Frage zu Modellformaten:
Diskussion über die mathematischen Fähigkeiten von LLMs:
Frage zu Inhaltsbeschränkungen bei Gemma:
Dank an gemma.cpp und Erwartung zukünftiger Funktionen:
Frage zur Größe der ausführbaren Datei des Gemma-Modells: