2 Punkte von GN⁺ 2023-11-30 | 1 Kommentare | Auf WhatsApp teilen
  • llamafile ist ein Mozilla-Builders-Projekt, das die Bereitstellung und Ausführung von LLMs auf eine einzelne ausführbare Datei reduziert, sodass sie sich ohne Installation lokal auf den meisten Betriebssystemen und CPU-Architekturen ausführen lassen
  • Die Implementierung kombiniert llama.cpp mit Cosmopolitan Libc und kapselt die Komplexität der LLM-Ausführung in einer einzigen ausführbaren „llamafile“-Datei; Mozilla.ai hat das Projekt überarbeitet
  • Das mitgelieferte whisperfile ist ein Einzeldatei-Sprach-zu-Text-Tool auf Basis von whisper.cpp mit demselben Cosmopolitan-Paketierungsansatz und unterstützt die Transkription und Übersetzung von Audiodateien
  • Seit v0.10.0 wird ein neues Build-System verwendet, um leichter mit den neuesten Versionen von llama.cpp Schritt zu halten; dadurch werden neuere Modelle und Funktionen unterstützt, auch wenn einige vertraute Funktionen aus früheren Versionen fehlen könnten
  • Unter Windows muss vor der Ausführung die Erweiterung .exe hinzugefügt werden, und ausführbare Dateien über 4 GB können unter Windows nicht ausgeführt werden, sodass ein separates llamafile-Binary und externe GGUF-Gewichte/Modelle nötig sind

LLMs als einzelne Datei ausführen

  • llamafile ist ein Projekt, mit dem sich LLMs als eine einzige Datei bereitstellen und ausführen lassen
  • Das Ziel ist, die Zugänglichkeit offener LLMs sowohl für Entwickler als auch für Endnutzer zu erhöhen
  • Es kombiniert llama.cpp und Cosmopolitan Libc zu einem Framework
  • Das Ergebnis ist eine einzelne ausführbare Datei namens „llamafile“, die lokal ohne Installation läuft
  • Unterstützt werden die meisten Betriebssysteme und CPU-Architekturen

Überarbeitung durch Mozilla.ai und verwandte Projekte

whisperfile enthalten

  • whisperfile ist ein in llamafile enthaltenes Einzeldatei-Sprach-zu-Text-Tool
  • Es basiert auf derselben Cosmopolitan-Paketierung wie whisper.cpp
  • Es unterstützt die Transkription und Übersetzung von Audiodateien
  • Es lässt sich auf derselben Plattformbreite wie llamafile ohne Installation verwenden
  • Die Dokumentation steht unter Whisperfile

Änderungen am Build-System in v0.10.x

  • Ab 0.10.0 verwendet llamafile ein neues Build-System
  • Das Ziel des neuen Build-Systems ist es, den Code leichter an die neuesten Versionen von llama.cpp anzupassen
  • Diese Änderung bringt Unterstützung für neuere Modelle und Funktionen
  • Gleichzeitig könnten einige Funktionen fehlen, an die Nutzer aus früheren Versionen gewöhnt waren
  • Eine allgemeine Beschreibung der Änderungen steht in README_0.10.0.md
  • Nutzer, die die „classic experience“ bevorzugen, können auf der releases-Seite auf frühere Versionen zugreifen
  • Vorgefertigte llamafiles zeigen an, mit welcher Server-Version sie gebündelt wurden

Schnellstart und Windows-Beschränkungen

  • Das Beispielmodell ist Qwen3.5 0.8B, und die README zeigt einen Ablauf zum Herunterladen und Ausführen in wenigen Minuten
curl -LO https://huggingface.co/mozilla-ai/llamafile_0.10/…
chmod +x Qwen3.5-0.8B-Q8_0.llamafile
./Qwen3.5-0.8B-Q8_0.llamafile
  • Dieses Modell wurde ausgewählt, weil es das kleinste vom Projekt als llamafile gebaute Modell ist und daher mit hoher Wahrscheinlichkeit sofort funktioniert
  • Wer leistungsfähigere Hardware oder eine GPU hat, kann größere und ausdrucksstärkere Modelle wählen, die genauere Antworten liefern können
  • Windows-Nutzer müssen vor der Ausführung die Erweiterung .exe zum Dateinamen hinzufügen
  • Unter Windows sind nur ausführbare Dateien unter 4 GB lauffähig

Dokumentation und Lizenz

1 Kommentare

 
GN⁺ 2023-11-30
Meinungen auf Hacker News
  • Am besten scheint es, das mit einem Text+Bild-Modell wie LLaVA auszuprobieren. Die Anleitung ist für macOS, dürfte aber auf anderen Plattformen ähnlich funktionieren

    1. Die 4,26 GB große Datei llamafile-server-0.1-llava-v1.5-7b-q4 von https://huggingface.co/jartine/llava-v1.5-7B-GGUF/blob/main/... herunterladen
      wget https://huggingface.co/jartine/llava-v1.5-7B-GGUF/…
    2. Im Terminal mit chmod 755 llamafile-server-0.1-llava-v1.5-7b-q4 ausführbar machen
    3. ./llamafile-server-0.1-llava-v1.5-7b-q4 ausführen; dann startet ein Webserver auf Port 8080
    4. http://127.0.0.1:8080/ öffnen, ein Bild hochladen und im Browser mit dem Modell chatten
      Screenshots gibt es unter https://simonwillison.net/2023/Nov/29/llamafile/
    • Es ist fast so gut wie chatgpt-web [0], und es ist erstaunlich, dass es kostenlos offline läuft
      Falls ihr chatgpt-web noch nicht ausprobiert habt: Empfehlung. Mit dem neuen GPT-4-Modell kann man deutlich günstiger chatten als mit ChatGPT Plus, und man kann immer noch auf das ältere, weniger eingeschränkte GPT-4-Modell wechseln, das beim Coden tatsächlich gut ist
      [0]: https://github.com/Niek/chatgpt-web
    • Um noch weniger tippen zu müssen, habe ich es in ein Docker-Setup gepackt: https://github.com/tluyben/llamafile-docker
    • Ich habe llamafile-server-0.1-llava-v1.5-7b-q4 für die Tests laufen lassen, die ich für ein Projekt brauche, und es hat alles bestanden, sogar Vision-Queries. Strategisch dürfte das für ziemlich viele Leute einiges verändern
    • Ich habe kurz etwas gefragt und diese Antwort bekommen
      User: What is the third planet from the sun?
      Llama: The third planet from the sun is called Mars.
  • Die Portabilitätsarbeit von Justine Tunney / jart ist beeindruckend und wirklich cool, aber beim Use Case dieses Tools bin ich mir noch nicht sicher
    Ich baue gerade eine kleine macOS-App https://www.freechat.run, die llama.cpp mit einem SwiftUI-Frontend ausführt. Bei der ersten Version war ich darauf fixiert, dass man sie einmal herunterlädt, sofort chatten kann und sie 0 Netzwerkverbindungen aufbaut. Das Modell in die App zu bündeln machte es einfach: herunterladen, öffnen, direkt nutzen. Als ich dann aber UI-Updates an TestFlight-Beta-Nutzer ausrollen wollte, mussten sie wieder 3 GB herunterladen, und alle drei haben sich beschwert
    Danach habe ich den Download des Standardmodells von der UI getrennt, sodass App-Updates nur noch etwa 5 MB groß sind. Ich vermute, dieses Tool wird ziemlich schnell auf dasselbe Problem stoßen, sobald man aktuelle llama.cpp-Updates haben möchte. In manchen Fällen ist das egal, aber ich frage mich, wofür es wirklich nützlich ist
    https://justine.lol/cosmopolitan/, https://github.com/ggerganov/llama.cpp

    • Ich verstehe diese Besessenheit nicht, alles auf 0 Klicks zu trimmen. Es ist wirklich nervig, wenn man nicht alles auf die Hauptfestplatte installieren will
      Die Modelle hat man schon heruntergeladen, organisiert und einsatzbereit, aber die Apps fragen nicht einmal danach und behandeln die Nutzer wie Idioten, indem sie alles erneut herunterladen
      Makeayo ist inzwischen etwas besser, weil es nach dem Speicherort der Modelle fragt; dass man bei comfy/automatic Symlinks verwenden muss, ist unangenehm. Beim ersten Start einfach nach dem Dateispeicherort fragen und ihn in den Einstellungen änderbar machen – das ist nicht schwer
    • Das Binary selbst kann man separat herunterladen: https://github.com/Mozilla-Ocho/llamafile/releases
    • Das wirkt eher wie ein Problem damit, dass MAS/TestFlight keine Delta-Updates macht
    • Da es nur eine ZIP-Datei ist, sollte man es auf Nicht-Windows-Plattformen wohl sogar im laufenden Betrieb in-place aktualisieren können. Man müsste nur die eine geänderte Datei ersetzen, und im Server-Modus ließe sich das Executable vermutlich sogar ohne Downtime für Nutzer hot-reloaden
    • cosmopolitan libc ist wirklich ein cooler Trick, verdient Lob und hat sicher echte Use Cases, wirkt aber für die meisten Zwecke nicht besonders praktisch
      Wenn es ein Format wie ein sehr fettes ELF gäbe, das beliebig viele Architekturen und Betriebssysteme unterstützt – würden wir es benutzen? Vermutlich eher nicht
      Nachdem ich aber eine Weile zig cc genutzt habe, kommt mir der Ansatz, einmal zu bauen und ein riesiges universelles Binary zu erzeugen, doch ziemlich vernünftig vor. Dispatch nach Mikroarchitektur ist ebenfalls ein Pluspunkt; während ich das schreibe, überzeuge ich mich offenbar gerade selbst vom Gegenteil
  • Egal welches Bild ich hochlade, es scheint es nicht richtig zu erkennen. Diese Antwort war trotzdem witzig
    User: Describe the image in the most detailed way possible
    Llama: The image is a close-up of an empty, dark room with no visible objects or people...
    User: is it just a black square?
    Llama: Yes, it is just a black square.

    • Ich habe ein reinweißes 50x50-PNG hochgeladen, und es antwortete im Wesentlichen, es gebe einen weißen Hintergrund mit einem kleinen grauen Bereich und einem orangefarbenen Punkt rechts
      Als ich fragte, ob es ein weißes Quadrat sei, meinte es, es sei kein einfaches weißes Quadrat, sondern sehe wie abstrakte Kunst mit Grau und Gelbbraun aus
  • Der zugehörige Beitrag von Simon Willison ist gut: https://simonwillison.net/2023/Nov/29/llamafile/

  • Interessant ist, wie dieses Modell halluziniert. Als ihm Albert Bierstadts „In the Mountains“ (https://www.wikiart.org/en/albert-bierstadt/in-the-mountains...) gezeigt wurde, beharrte es darauf, dass überall in der Szene Kühe verstreut seien.
    Selbst als gesagt wurde, es gebe keine Kühe und es habe wohl Felsen mit Kühen verwechselt, antwortete es mit Nein; erst als erneut gesagt wurde: „Es gibt keine Kühe“, beschrieb es die Szene als friedliche Landschaft mit Bergen und See, Bäumen, Vögeln und einem Boot.

  • Zugehörige Materialien: https://hacks.mozilla.org/2023/11/introducing-llamafile/ und https://twitter.com/justinetunney/status/1729940628098969799
    Der Verlauf stammt aus https://news.ycombinator.com/item?id=38463456 und https://news.ycombinator.com/item?id=38464759, aber die Kommentare wurden hier zusammengeführt.

  • Ich probiere gerade mehrere Modelle im GGUF-Format von llama.cpp auf diese Weise aus.
    git clone https://github.com/ggerganov/llama.cpp
    cd llama.cpp
    make
    # M2 Max - 16 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b-16k.Q8_0.gguf -c 16000 -ngl 32
    # M1 - 8 GB RAM
    wget -P ./models https://huggingface.co/TheBloke/OpenHermes-2.5-Mistral-7B-16k-GGUF/…
    ./server -m models/openhermes-2.5-mistral-7b.Q4_K_M.gguf -c 2000 -ngl 32

  • Llaminate wäre als Name für so etwas auch ganz passend. Es ließe sich auch als allgemeines Verb dafür verwenden, ein llama-kompatibles Modell in ein direkt nutzbares Paket einzuhüllen.

    • Llamanate
  • Cool, dass es trotz Build mit Cosmopolitan CUDA-Unterstützung gibt. Es sieht so aus, als hätte Cosmopolitan diesen Monat teilweise Unterstützung für dynamisches Linking hinzugefügt, um GPUs zu ermöglichen: https://github.com/jart/cosmopolitan/commit/5e8c928f1a37349a...
    Leider ist die Installation des CUDA Developer Toolkit nötig. CUDA-Apps, die allein mit dem Nvidia-Treiber ohne zusätzliche Abhängigkeiten laufen, lassen sich durchaus ausliefern; wenn auch das gelöst wird, könnte es ein Game Changer werden.

  • Mir gefällt die Formulierung: „Wenn man die Datei auf einen USB-Stick packt und in der Schublade aufbewahrt, ist das eine Versicherung gegen die Apokalypse der Zukunft. Man muss nie wieder ohne Sprachmodell auskommen.“