11 Punkte von GN⁺ 2024-02-24 | 1 Kommentare | Auf WhatsApp teilen
  • 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⁺:

  1. 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
  2. Das Projekt bietet die Möglichkeit, zur Open-Source-Community beizutragen, und betont, wie wichtig es ist, die Open-Source-Richtlinien von Google einzuhalten
  3. 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

 
GN⁺ 2024-02-24
Hacker-News-Kommentare
  • Zusammenfassung der Hacker-News-Kommentare:
    • Vorstellung und Projektbeschreibung durch Austin:

      • Austin ist Mitautor des Projekts und erklärte, dass er Fragen beantworten werde.
      • gemma.cpp ist unabhängig von llama.cpp/ggml und wurde vom llama.cpp-Projekt inspiriert.
      • gemma.cpp ist eine direkte Implementierung von Gemma mit Fokus auf Experimente und Forschung sowie auf Portabilität und einfache Modifizierbarkeit.
      • Die erste Implementierung ist auf CPU-SIMD ausgerichtet; Optionen für GPU-Unterstützung werden geprüft.
      • Fragen zum Gemma-Modell selbst würden von anderen Kollegen beantwortet, da dies zwar eine C++-Implementierung ist, aber relativ unabhängig vom Trainingsprozess des Modells.
      • Daran arbeitete ein kleines Team bei Google, und sie hoffen, dass andere es nützlich verwenden werden.
      • Ein Link zu einem Twitter-Thread über das Projekt wurde geteilt.
    • Meinungen zu Googles Wettbewerbsfähigkeit bei LLMs:

      • Es gibt Kritik, dass Google bei kommerziellen Produkten hinter OpenAI zurückliegt, im LLM-Bereich sei das Unternehmen jedoch sehr kompetent.
      • Es wurde die Ansicht geäußert, dass Google beeindruckende Ergebnisse liefern wird, sobald es richtig loslegt.
      • Es wurde gehofft, dass dank Facebook und Llama der Open-Source-Wettbewerb weitergeht; zugleich solle man nicht vergessen, dass OpenAIs ursprüngliche Vision wichtig war, auch wenn sich das Unternehmen inzwischen von seiner ursprünglichen Mission entfernt hat.
    • Frage zum Build-System:

      • Ein Kommentar fragte, warum Google nicht Bazel als Build-System verwendet hat.
    • Lob für Gemmas Leistung:

      • Gemma wurde dem HHEM-Leaderboard hinzugefügt und zeigt unter den kleineren Modellen eine niedrige Halluzinationsrate.
    • Bewunderung für das Entwicklungstempo des Open-Source-LLM-Ökosystems:

      • Das Open-Source-LLM-Ökosystem entwickelt sich extrem schnell, und ständig erscheinen neue Informationen und neuer Code.
    • Frage zu Modellformaten:

      • Ein Kommentar bat um eine Erklärung der Unterschiede zwischen verschiedenen Modellformaten wie GGUF und GGML und wie diese verwaltet werden.
    • Diskussion über die mathematischen Fähigkeiten von LLMs:

      • Es wurde erläutert, dass LLMs mathematische Probleme nicht besonders gut lösen, und es gab eine Diskussion darüber, warum ChatGPT dennoch so wirkt, als könne es Mathematik gut lösen.
      • Außerdem wurde gefragt, ob LLM-Projekte Plugin-Modelle unterstützen und ob sich ein Plugin-Ansatz auf ein mit llama.cpp entwickeltes System anwenden lässt.
    • Frage zu Inhaltsbeschränkungen bei Gemma:

      • Es wurde gefragt, ob Gemma wie Gemini eingebaute Inhaltsbeschränkungen hat oder ob dies eine Eigenschaft der Gemini-Anwendung ist.
    • Dank an gemma.cpp und Erwartung zukünftiger Funktionen:

      • Es wurde dem gemma.cpp-Repository gedankt, und jemand erklärte, einen Python-Wrapper entwickelt zu haben.
      • Der Python-Wrapper wurde entwickelt, damit neue Techniken, die das gemma.cpp-Team aktualisiert, jeweils leicht genutzt werden können.
    • Frage zur Größe der ausführbaren Datei des Gemma-Modells:

      • Es wurde gefragt, wie groß die endgültige ausführbare Datei wäre, wenn man das Gemma-Modell mit einer minimalen Kommandozeilenoberfläche baut und als offline ausführbare Standalone-Datei bereitstellt.