2 Punkte von GN⁺ 2023-11-14 | 1 Kommentare | Auf WhatsApp teilen

Rust+Wasm-Stack: eine starke Alternative zu Python

  • Rust+Wasm-Anwendungen sind im Vergleich zu Python nur 1/100 so groß, 100-mal schneller und können überall sicher ausgeführt werden, ohne die Hardwarebeschleunigung überhaupt zu ändern.
  • Rust ist die Sprache für AGI (Artificial General Intelligence), und es wurde ein einfaches Rust-Programm erstellt, das mit dem llama2-Modell Inferenz mit der ursprünglichen Geschwindigkeit durchführt.
  • Eine zu Wasm kompilierte binäre Anwendung (2 MB) ist vollständig portabel und läuft auf Geräten mit unterschiedlichen Hardwarebeschleunigern.
  • Die Wasm-Laufzeitumgebung (WasmEdge) bietet in Cloud-Umgebungen eine sichere und geschützte Ausführungsumgebung.

Installation und Ausführung des Rust-Programms

  • Schritt 1. WasmEdge und das GGML-Plugin installieren: Auf Linux- oder Mac-Geräten erfolgt die Installation mit den folgenden Befehlen.
  • Schritt 2. Vorgebaute Wasm-App und Modell herunterladen: Das llama2-Modell im GGUF-Format herunterladen; im Beispiel wird eine mit 5-Bit-Gewichten quantisierte Version des für Chats feinabgestimmten llama2-7B-Modells verwendet.
  • Schritt 3. Ausführen: Die Wasm-Inferenzanwendung mit WasmEdge starten, das GGUF-Modell übergeben und eine Frage eingeben, um mit dem Modell zu chatten.

Konfiguration des Modellverhaltens

  • Mit Kommandozeilenoptionen lässt sich festlegen, wie mit dem Modell interagiert werden soll.
  • So können beispielsweise eine bestimmte Kontextlänge, die maximale Zahl der pro Antwort vorherzusagenden Tokens, die Ausgabe von Statistiken und das Streamen der Modellantwort nach stdout eingestellt werden.
  • Das Programm erzeugt auf einem günstigen M2 MacBook etwa 25 Tokens pro Sekunde.

LLM-Agenten und Apps

  • Mit Rust und WasmEdge wird ein OpenAI-kompatibler API-Server erstellt.
  • Dadurch können mit OpenAI-kompatiblen Entwicklerwerkzeugen LLM-Agenten und Apps erstellt werden.

Vorteile von Rust+Wasm gegenüber Python

  • Der Rust+Wasm-Stack ist eine starke Alternative zum Python-Stack für AI-Inferenzanwendungen und stellt Cloud-Computing-Infrastruktur bereit.
  • Extrem leichtgewichtig: Die Inferenzanwendung ist einschließlich aller Abhängigkeiten nur 2 MB groß.
  • Sehr schnell: Sie bietet in allen Teilen der Inferenzanwendung native C-/Rust-Geschwindigkeit.
  • Portabilität: Dieselbe Wasm-Bytecode-Anwendung kann auf allen wichtigen Computing-Plattformen ausgeführt werden, die heterogene Hardwarebeschleunigung unterstützen.
  • Einfache Installation, Entwicklung und Bereitstellung: Es gibt keine komplexen Abhängigkeiten; eine einzelne Wasm-Datei kann mit Standardwerkzeugen auf dem Laptop gebaut und überall bereitgestellt werden.
  • Sicher und Cloud-ready: Die Wasm-Laufzeit wurde dafür entwickelt, nicht vertrauenswürdigen Benutzercode zu isolieren, kann von Container-Werkzeugen verwaltet und einfach auf Cloud-native Plattformen ausgerollt werden.

Rust-Inferenzprogramm

  • Das Demo-Inferenzprogramm ist in Rust geschrieben und zu Wasm kompiliert.
  • Der Rust-Quellcode ist sehr einfach und umfasst nur 40 Zeilen.
  • Das Rust-Programm verwaltet Benutzereingaben, verfolgt den Chatverlauf, wandelt Text in das Chat-Template von llama2 um und führt den Inferenz-Task mit der WASI-NN-API aus.

Ausführung in der Cloud oder am Edge

  • Sobald die Wasm-Bytecode-Datei vorliegt, kann sie auf jedem Gerät bereitgestellt werden, das die WasmEdge-Laufzeit unterstützt.
  • WasmEdge wird zusammen mit dem GGML-Plugin installiert und nutzt automatisch unterschiedliche Hardwarebeschleuniger, um das llama2-Modell auszuführen.

Nächste Schritte

  • Die WasmEdge-GGML-Werkzeuge sind derzeit verfügbar und werden bereits von Cloud-native-Kunden genutzt, befinden sich aber noch in einem frühen Stadium.
  • Wer daran interessiert ist, zum Open-Source-Projekt beizutragen und die Richtung der zukünftigen LLM-Inferenzinfrastruktur mitzugestalten, findet einige Low-Level-Aufgaben, zu denen man beitragen kann.

Andere AI-Modelle

  • Mit WasmEdge und WASI NN lassen sich als Python-Alternative leichtgewichtige, schnelle, portable und sichere Inferenzanwendungen erstellen.
  • Das Projekt mediapipe-rs bietet beispielsweise eine Rust+Wasm-API für Googles mediapipe-Tensorflow-Modelle.

Meinung von GN⁺

Das Wichtigste an diesem Beitrag ist, dass er mit Rust und WebAssembly (Wasm) eine Alternative zu Python für AI-Inferenz aufzeigt, die deutliche Vorteile bei Größe, Geschwindigkeit, Portabilität und Sicherheit bietet. Dieser Technologie-Stack integriert Cloud-Computing-Infrastruktur, verbessert die Leistung auf verschiedenen Geräten und in Cloud-Umgebungen, löst Probleme mit komplexen Abhängigkeiten und zeigt, wie sich Entwicklung und Bereitstellung vereinfachen lassen. Dieser Ansatz könnte insbesondere für die Zukunft von Edge Computing und AI-Inferenz erhebliche Auswirkungen haben und ist daher ein sehr spannendes Thema für technikinteressierte Leser.

1 Kommentare

 
GN⁺ 2023-11-14
Hacker-News-Kommentare
  • Es wird zwar Unterstützung für Rust und WASM signalisiert, der tatsächliche Code ist jedoch nur ein einfaches in Rust geschriebenes Kommandozeilen-Skript, und die Hauptverarbeitung hängt von einer einzigen Codezeile ab, die das WASI-NN-Backend aufruft. Dabei wird darauf hingewiesen, dass dieses in diesem Fall von der WasmEdge-Runtime bereitgestellt wird, die in C++ geschrieben ist.
  • Für Anwendungsentwickler bietet dieses Projekt den einfachsten Weg, eine Inferenz-Engine als verteilbare Datei zu paketieren. Die Modellgewichte sind bereits portabel und können bei Bedarf heruntergeladen werden.
  • Es wird die Frage aufgeworfen, ob das Projekt nicht einfach nur llama.cpp verpackt, und es werden Erfahrungen aus der Entwicklung eines ML-Frameworks mit Rust und WebGPU geteilt.
  • Es wird darauf hingewiesen, dass ein von wasm-nn abhängiges Projekt in Wirklichkeit nicht portabel ist und unter Umständen nicht ausgeführt werden kann, wenn Unterstützung für bestimmte Hardware fehlt. Das steht im Widerspruch zum Zweck von WASI.
  • Es werden Zweifel an der Aussage geäußert, dass der Mac-OS-Build des GGML-Plugins Inferenz über die Metal API auf der GPU ausführt und nicht über die Neural Engine von M1/M2/M3.
  • Es wird die Sorge geäußert, dass zwar Methoden entwickelt werden dürften, um Transformer-Architekturen am Edge effizienter und schneller auszuführen, die VRAM-Anforderungen jedoch zum Hauptengpass werden und beim Laden großer Modelle an Grenzen stoßen könnten.
  • Es wird gefragt, ob das Projekt offline auf dem iPhone laufen kann. Das könnte in Situationen ohne Internetzugang nützlich sein.
  • Es wird kritisiert, dass das Projekt mit einem in einer anderen Sprache geschriebenen Wrapper so vermarktet wird, als sei es bei Größe oder Geschwindigkeit innovativ. Tatsächlich basiert es auf llama.cpp, und weder Inferenzgeschwindigkeit noch Binärgröße werden durch die Wahl des Wrappers begrenzt.
  • Es wird gefragt, wie sich die Größe verringern lässt, ohne an Genauigkeit zu verlieren, wenn die trainierten Modellgewichte einen erheblichen Teil der Gesamtgröße ausmachen.
  • Der Kern des Rust-Quellcodes ist sehr einfach und besteht aus 40 Zeilen Code, die Benutzereingaben verwalten, den Gesprächsverlauf nachverfolgen, Text in das Chat-Template von llama2 umwandeln und mithilfe der WASI-NN-API Inferenz ausführen.