Gemma.cpp: Leichte & eigenständige C++-Inference-Engine für Gemma-Modelle
(github.com/google)- 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
tarzum 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
Variationenthä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.gzherunterladen 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
cmakedie Build-Dateien erzeugen - Für in 8 Bit umgewandelte Gleitkommagewichte (sfp)
cmakeohne zusätzliche Optionen ausführen - Wenn bfloat16-Gewichte heruntergeladen wurden, statt
cmakewie oben ohne Optionen auszuführen,cmakemitWEIGHT_TYPE, gesetzt auf den Typhwy::bfloat16_tvon Highway, ausführen - Nach dem Ausführen des passenden
cmake-Befehls in das Verzeichnisbuild/wechseln undmakeausführen, um die ausführbare Datei./gemmazu bauen
Schritt 4: Ausführen
- Innerhalb des Verzeichnisses
build/kanngemmaausgeführt werden gemmahat Pflichtargumente und kann beispielsweise mit der Gewichtedatei2b-it-sfp.sbsund der Tokenizer-Dateitokenizer.spmausgeführt werden
Verwendung
gemmaverfü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
gemmawird eine terminalbasierte interaktive Oberfläche bereitgestellt
Verwendung als Kommandozeilen-Tool
- Um die ausführbare Datei
gemmaals 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
libgemmakann 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: