3 Punkte von GN⁺ 2025-02-17 | 1 Kommentare | Auf WhatsApp teilen
  • Beim Ausführen des Modells deepseek_r1_distill_llama_8b_q40 mit distributed-llama v0.12.2 auf vier Raspberry Pi 5 8GB lagen sowohl Evaluation- als auch Generierungsgeschwindigkeit höher als bei einer Konfiguration mit zwei Geräten
  • Die 2-Geräte-Konfiguration erreichte Evaluation 7,70 tok/s und Prediction 3,54 tok/s, die 4-Geräte-Konfiguration kam auf Evaluation 11,68 tok/s und Prediction 6,43 tok/s
  • Die Prediction-Logs der 4-Geräte-Konfiguration zeigen etwa 155,60 ms pro Token, die 2-Geräte-Konfiguration etwa 282,22 ms pro Token; damit wird der Geschwindigkeitsunterschied durch mehr Nodes beim selben Modell sichtbar
  • Ein anderer Nutzer teilte Ergebnisse mit 8 Nodes unter v0.12.7, 2.5G-LAN und einer Konfiguration auf Basis älterer Intel-CPUs: Evaluation 33,64 tok/s und Prediction 16,63 tok/s
  • Zu Fällen, in denen der Prozess auf zwei Raspberry Pi 5 8GB wegen Speichermangels beendet wurde, kam die Antwort, dass mit --max-seq-len 4096 die Kontextgröße reduziert werden müsse

Ausführungsergebnisse der Raspberry-Pi-5-8GB-Konfiguration

  • Das Testmodell ist deepseek_r1_distill_llama_8b_q40, die Version von distributed-llama ist 0.12.2
  • Verglichen werden Konfigurationen mit 2 x Raspberry Pi 5 8GB und 4 x Raspberry Pi 5 8GB
Konfiguration Evaluation Prediction
2 x Raspberry Pi 5 8GB 7,70 tok/s 3,54 tok/s
4 x Raspberry Pi 5 8GB 11,68 tok/s 6,43 tok/s

Log-Werte der 2-Geräte-Konfiguration

  • Die Konfiguration mit 2 x Raspberry Pi 5 8GB verzeichnete bei der Evaluation folgende Werte
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 7.70
    • 129.89 ms/tok
  • Bei der Prediction wurden folgende Werte verzeichnet
    • nTokens: 77
    • tokens/s: 3.54
    • 282.22 ms/tok
  • Beim Beenden der Ausführung zeigt das Log Network is closed an

Log-Werte der 4-Geräte-Konfiguration

  • Die Konfiguration mit 4 x Raspberry Pi 5 8GB verzeichnete bei der Evaluation folgende Werte
    • nBatches: 32
    • nTokens: 19
    • tokens/s: 11.68
    • 85.63 ms/tok
  • Bei der Prediction wurden folgende Werte verzeichnet
    • nTokens: 77
    • tokens/s: 6.43
    • 155.60 ms/tok
  • Im Log erscheinen während der Token-Generierung wiederholt gesendete 864 kB und empfangene 1191 kB

8-Node-Ergebnisse eines anderen Nutzers

  • Ein Nutzer teilte Ergebnisse mit 8 Nodes unter distributed-llama v0.12.7
    • Überwiegend ältere Intel-CPUs, Konfigurationen mit 4 oder 6 Kernen
    • AVX2-Unterstützung
    • 2.5G-LAN-Verbindung
  • Die Ausführungsergebnisse dieser Konfiguration lauten wie folgt
    • Evaluation: 33.64 tok/s, 29.73 ms/tok
    • Prediction: 16.63 tok/s, 60.13 ms/tok
    • Die Zahl der Prediction-Tokens beträgt 245
  • Der verwendete Befehl hat die Form ./dllama inference mit Angabe von Modell, Tokenizer, --buffer-float-type q80, --nthreads 6, --max-seq-len 4096, mehreren --workers und --steps 256

Ausführungsprobleme und Antworten

  • Es wurde ein Fall geteilt, in dem bei einer Konfiguration mit zwei Raspberry Pi 5 8GB während der Ausführung RequiredMemory: 20474 MB angezeigt wurde und der Prozess anschließend mit Killed beendet wurde
    • Der Befehl des Root-Nodes enthält --buffer-float-type q80, --steps 16, --nthreads 4 und eine Worker-Adresse
    • Die Antwort lautete, dass mit --max-seq-len 4096 die Kontextgröße reduziert werden müsse
  • Ein anderer Nutzer berichtete von einem Verhalten, bei dem nach der Verbindung mit mehreren Workern auf den Prompt what is 99+12 nur Leerzeichen und Punkte ausgegeben wurden
    • Im Log erscheinen RopeScaling: f=8.0, l=1.0, h=4.0, o=8192, RequiredMemory: 3310 MB, Chat template: deepSeek3
    • Der Maintainer fragte nach der verwendeten Version und bat zu prüfen, ob die letzten Änderungen gepullt wurden und auf welcher CPU die Ausführung erfolgt

1 Kommentare

 
GN⁺ 2025-02-17
Meinungen auf Hacker News
  • Ankündigungen, Deepseek R1 auf einem Raspberry Pi laufen zu lassen, folgen meist demselben Muster: Tatsächlich läuft eher Llama oder Qwen, modifiziert mit DeepSeeks Distillation-Technik

    • Ein typischer Fehlermodus bei destillierten DeepSeek-Modellen ist, dass sie nicht merken, dass sie auf der Stelle treten.
      DeepSeek bringt destillierte große Sprachmodelle dazu, die eigene Ausgabe mit „Wait.“ zu unterbrechen, um bis zu einem gewissen Grad Schlussfolgern zu erzeugen; das ist aber deutlich schwächer als die Reasoning-Fähigkeit des vollständigen Modells und kann in eine Schleife aus endlosem „Wait.“ und Selbstzweifeln geraten, statt eine bereits gezogene Schlussfolgerung mit neuer Nuance weiterzuentwickeln
    • Ich weiß nicht, ob der Einreichungstitel geändert wurde, aber inzwischen steht dort ausdrücklich Deepseek R1 Distill 8B Q40, daher ist es tatsächlich eine falsche Darstellung, es einfach „Deepseek R1“ zu nennen.
      Allerdings ist DeepSeek-R1-Distill-Llama-8B laut Abschnitt Distilled Model Evaluation[1] im offiziellen R1-Repository ziemlich ordentlich und soll in einigen Benchmarks besser sein als 4o-0513 und Sonnet-1022.
      Man sollte auch im Hinterkopf behalten, dass aus formalen Grammatiken gesampelt werden kann. llama.cpp hat GBNF, und mit lazy grammar[2] gibt es inzwischen ebenfalls eine Konfiguration, wodurch es für manche Zwecke recht brauchbar geworden ist. Das bedeutet, dass die Grammatik nachgelagert eingreift.
      Außerdem gibt es Spielraum für zusätzliches Fine-Tuning. Mehrere Anbieter bieten inzwischen „RFT“-Dienste an, bei denen ein gewöhnlicher Datensatz für supervised Fine-Tuning mit synthetischen Reasoning-Daten angereichert wird, die ein großes R1 erzeugt hat. Deshalb könnten diese Ergebnisse als Vorabresultate deutlich wertvoller sein, als man zunächst denkt.
      6 tok/s beim Decoding sind nicht schnell, aber Raspberry-Pi-Nutzern ist so etwas meist nicht besonders wichtig.
      [1] https://github.com/deepseek-ai/DeepSeek-R1#distilled-model-e...
      [2] https://github.com/ggerganov/llama.cpp/pull/9639
    • Ich würde mir wünschen, dass jemand einem Software Engineer, dessen Hauptgebiet nicht Machine Learning ist, erklärt, was diese Distillation-Methode bedeutet.
      Mich interessiert, was es heißt, dass R1 ein Llama-Modell trainiert, und was an DeepSeeks Distillation-Methode besonders ist
    • Das ist lediglich LLaMa, das per Fine-Tuning darauf getrimmt wurde, eine DeepSeek-ähnliche Gedankenkette zu erzeugen.
      Ein echtes „destilliertes“ Modell müsste von Grund auf darauf trainiert werden, ein größeres Modell vollständig nachzuahmen; das passiert hier nicht
    • Mir gefällt wirklich nicht, dass solche Modelle unter dem Namen Deepseek R1 gebrandet werden können
  • Wie immer sollte man tok/s-Werte mit sehr großer Vorsicht betrachten.
    In der Demo wird eine Frage mit weniger als 500 Tokens „gelöst“. Dass das überhaupt möglich ist, ist weiterhin erstaunlich, aber bei realen Problemen und realistisch nützlichen Kontextlängen für ein „denkendes“ Modell, also 8–16k Tokens, kommt man kaum in die Nähe dieser Geschwindigkeit. Selbst ein Epyc mit vielen Channels fällt ab einer Kontextlänge von etwa 4096 auf 2–4 tok/s zurück

    • Ich habe auf vier Raspberry Pi 5 einen längeren Lauf, also die Vorhersage, geprüft.
      pos=0 => P 138 ms S 864 kB R 1191 kB Connect
      pos=2000 => P 215 ms S 864 kB R 1191 kB .
      pos=4000 => P 256 ms S 864 kB R 1191 kB manager
      pos=6000 => P 335 ms S 864 kB R 1191 kB the
    • Kleine Roboter kümmern sich normalerweise um kleine Probleme.
      Wenn das Modell nur ein wenig hilft, können sie schon deutlich fähiger werden als heute
  • Kein schlechtes Ergebnis, aber wenn man 320 £ für vier Pi 5 ausgibt, könnte man auch eine gebrauchte 12-GB-3080 bekommen, und die Token-Geschwindigkeit wäre vermutlich mehr als 10-mal höher

    • Oder man schließt eine 12-GB- oder 16-GB-GPU direkt an einen einzelnen Pi 5 an und erreicht auch bei größeren Modellen über 20 tok/s.
      https://github.com/geerlingguy/ollama-benchmark?tab=readme-o...
    • „Deepseek R1 Distill 8B Q40 on 1x 3080, 60.43 tok/s (eval 110.68 tok/s)“ wäre wohl nicht auf Hacker News gelandet
    • Dafür steht der Stromverbrauch bei 48 W gegen 320 W
    • Man könnte auch etwa zwei 12-GB-3060 verwenden
  • Interessant ist hier, dass man Llama-Inferenz verteilt über mehrere Computer ausführen kann

    • Dann fragt man sich, wo das Äquivalent zu verteilten GPUs bleibt.
      Könnte man nicht wie bei Seti@HOME ein über die ganze Welt verteiltes, langsames vollständiges R1-Modell mit Tools verbinden und öffentlich tiefgehende, komplexe Aufgaben schlussfolgern lassen?
  • Das ist ein moderner Beowulf-Cluster

    • Das Raspberry-Pi-Cluster-Meme verstehe ich ehrlich gesagt nicht besonders gut.
      Für etwas mehr Geld als vier Pi 5 findet man bei eBay einen 1U-Dell-Server mit 32-Core-Epyc-CPU und 64 GB RAM, der mindestens um eine Größenordnung mehr Leistung bringt.
      Wenn man im Homelab von einem Beowulf-Cluster sprechen will, sollte man meiner Meinung nach zumindest auf Compute-Nodes mit einem sehr günstigen FDR-Infiniband-Netzwerk Konfigurationen wie Slurm+Lustre oder k8s+OpenStack+Ceph laufen lassen. So etwas mit vier langsamen Nodes, das nicht einmal linear skaliert, ist schwer ernst zu nehmen
  • Ich habe nicht gesehen oder verstanden, wie mehrere Raspberry Pis parallel genutzt werden.
    Es wäre gut, wenn jemand einen Hinweis geben könnte

  • Wann werden wir diese tollen neuen AI-Tools wohl per apt-get install installieren können?

    • Auf dem Mac könnte brew install ollama ein guter Ausgangspunkt sein
    • Möglich wird das, wenn die Distribution, die man derzeit nutzt, anfängt, Tools für große Sprachmodelle zu paketieren – oder wenn man zu einer solchen Distribution wechselt
    • ollama pull kommt dem schon ziemlich nahe
    • Streng genommen ist es nicht apt-get, aber die meisten Infrastrukturkomponenten unter „AI-Tools“ lassen sich per conda install installieren
    • Man kann auch die hübsche GUI-Version lm-studio herunterladen
      Sie speichert Unterhaltungen und erleichtert auch das Herunterladen von Modellen
  • Wenn man dieses Modell auf dem Mac ausprobieren möchte: Das verwendete Modell sieht nach etwas wie DeepSeek-R1-Distill-Llama-8B aus, und mit dem neuen llm-mlx-Plugin kann man es so ausführen
    brew install llm # or pipx install llm or uv tool install llm
    llm install llm-mlx
    llm mlx download-model mlx-community/DeepSeek-R1-Distill-Llama-8B
    llm -m mlx-community/DeepSeek-R1-Distill-Llama-8B 'poem about an otter'
    Die Performance ist ebenfalls ziemlich gut; gerade eben kam ich beim Ausführen auf 22 Tokens/Sekunde: https://gist.github.com/simonw/dada46d027602d6e46ba9e4f48477...

  • Würde zusätzlicher Speicher helfen? Kürzlich ist ein RPi 5 mit 16 GB RAM erschienen

    • Die Inferenzgeschwindigkeit hängt deutlich stärker von der Lese-/Schreibgeschwindigkeit ab als von der Speichergröße
      Solange das Modell in den Speicher passt, entscheidet in der Praxis die Speicherbandbreite über den Betrieb
    • Solange Modell und Kontext in den Speicher passen, hilft die Speicherkapazität an sich nicht
      Ein 8B-Parameter-Q4-Modell sollte auch auf einem einzelnen Pi mit 8 GB Platz finden
    • Der Pi 5 mit 16 GB war kurz verfügbar und dann schnell wieder weg
      Als Adafruit kürzlich Bestand hatte, habe ich gerade so einen bekommen, aber kurz darauf war er wieder ausverkauft
      Trotzdem gibt es unabhängig von der Performance Modelle, die mehr als 8 GB zum Ausführen verlangen und deshalb mit Ollama gar nicht laufen
  • Es braucht ein Produkt wie Alexa oder Google Home
    Allerdings sollte es statt einer Cloud-Anbindung ein lokales großes Sprachmodell ausführen. Ich verstehe nicht, warum es so etwas noch nicht gibt oder niemand daran arbeitet

    • Ich vermute, es liegt am Preis
      Gute große Sprachmodelle sind teuer; die eigentliche Frage ist also, ob man ein Modell einbauen kann, das nützlich genug ist, damit Leute es kaufen, und das Gerät trotzdem günstig genug bleibt, um Marge zu lassen
    • Mit Home Assistant kommt man dem ein Stück weit nahe
      Ich bin nicht sicher, ob Tool-Nutzung möglich ist, aber Dinge, nach denen man fragen würde, wie das Wetter, lassen sich verfügbar machen
    • Meinst du mit lokalem großen Sprachmodell so etwas wie Ollama + llamacpp?