Dokumentation

Core ML Snake: Live-Wahrscheinlichkeiten, lokale Inferenz

Die Terminal-Demo lässt bei jedem Zug ein echtes Laya-Modell laufen. Das linke Panel zeigt das Spielfeld, die Punktzahl und die Snake-Länge; das rechte Panel zeigt Richtungswahrscheinlichkeiten, geschätztes Sackgassen-Risiko, Futter-Erreichbarkeit, gemessene Vorhersagezeit, Engine, null Ausgabe-Tokens und Offline-Inferenzstatus.

Start auf einem Apple-Silicon-Mac

pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake --fps 12

Verwende ein Terminal mit mindestens 104 Spalten × 35 Zeilen, einer Monospace-Schrift und Truecolor-Unterstützung. Das Laden des Modells und die erste Core ML-Kompilierung erfolgen vor Spielbeginn und können beim ersten Lauf Dutzende Sekunden dauern. Zwölf Entscheidungen pro Sekunde sind eine lesbare Darstellungsgeschwindigkeit, kein Hardware-Maximum.

Der Modellpfad ist nach dem expliziten Download vollständig lokal. Startet man das Spiel mit einer nicht gecachten Hub-ID, schlägt es mit Anweisungen fehl, statt während der Anzeige von OFFLINE herunterzuladen. Die Laufzeit benötigt kein MLX, PyTorch oder Transformers.

Steuerung Aktion
Leertaste Pause oder Fortsetzen
↑ / ↓ oder + / - Entscheidungsrate erhöhen oder verringern
R Die nächste Runde mit Seed starten
Q / Ctrl-C Beenden und das Terminal wiederherstellen

Die UI wartet, wenn das Terminal zu klein ist. --no-alt-screen belässt den letzten Frame im Scrollback; --headless führt dasselbe Modell/Spiel ohne Anzeige aus.

Zwei Deployment-Optionen

Das Standard-ANE-Bundle hat Batch eins und Länge 96. Jeder Spielschritt beantwortet drei Fragen nacheinander. Sein Benchmark für eine einzelne Frage mit ~5 ms ist keine vollständige Spiel-Frame-Zeit. Das gewöhnliche Snake-GPU-Bundle verwendet B3/L64/K4 und bündelt diese drei Fragen:

hf download aac6fef/laya-multilingual-coreml-snake --local-dir models/snake-gpu
laya-coreml-snake --model ./models/snake-gpu --fps 12

Das Engine-Label beschreibt die ausgewählten Core ML-Compute-Units. Der dedizierte ANE-Graph hat separate Belege durch Ausführungsplan und Hardware-Trace im ANE-Bericht; CPU+ANE erlaubt weiterhin Host-Arbeit.

Was das Modell steuert

Code berechnet legale Züge, sicheren Fortschritt entlang eines Hamiltonian-Zyklus und ob das Futter durch leere Zellen erreichbar ist. Laya erhält diese Features und gibt Richtungs- und boolesche Wahrscheinlichkeiten zurück. Das angezeigte Risiko ist 1 - P(safe route); es ist eine Modellschätzung, keine kalibrierte Wahrscheinlichkeit, im nächsten Zug zu sterben.

Das standardmäßige Sicherheitsschild beschränkt ausgeführte Züge auf zyklussicheren Fortschritt. Die UI hält die ursprünglichen Modellwahrscheinlichkeiten sichtbar, zeigt die vorgeschlagene und die ausgeführte Richtung und erhöht einen sichtbaren Eingriffszähler, wenn sie sich unterscheiden. --unassisted führt die rohe Top-1 des Modells ohne dieses Schild aus. Null Tode mit dem Schild belegen keine Snake-Intelligenz ohne Unterstützung oder unbegrenztes Überleben.

Einen echten Lauf aufzeichnen und teilbare Medien exportieren

laya-coreml-snake --model ./models/snake --fps 12 --seed 7 \
  --duration 75 --record snake.jsonl

# Requires ffmpeg: brew install ffmpeg
laya-coreml-snake export snake.jsonl --start 45 --seconds 20 \
  --output snake.mp4 --gif snake.gif --gif-seconds 15
laya-coreml-snake export snake.jsonl --start 55 --output snake.png

Aufzeichnungen enthalten die Modellherkunft, jedes Board vor der angekündigten Aktion, echte Wahrscheinlichkeiten, Inferenzlatenz, verstrichene Zeitstempel und eine abschließende Zusammenfassung. Der Exporter verwendet die Live-Terminal-Komposition wieder und bewahrt 1× Echtzeit-Timing. Das auf dem Bildschirm sichtbare RECORDED RUN · 1× kennzeichnet ein Replay. Die Sidecar-Datei zeichnet Quell- und Renderer-Hashes auf. Die Video-FPS entnehmen Stichproben der Aufzeichnung; sie ändern weder die Anzahl der Modellentscheidungen noch beschleunigen sie die Wiedergabe.

Ausgabedateien müssen neue Pfade sein. --max-speed deaktiviert die Taktung und wartet vor jedem Zug auf eine frische Vorhersage. Es werden keine Modellaufrufe übersprungen:

laya-coreml-snake --model ./models/snake --max-speed \
  --duration 20 --record snake-fast.jsonl

Eine stabile Entscheidungsrate messen

laya-coreml-snake benchmark --model ./models/snake \
  --rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
  --seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json

Der Benchmark misst zuerst das Verhalten ohne Schild und den ungedrosselten Betrieb, sweept Zielraten und testet dann bestandene Raten auf längeren Episoden mit mehreren Seeds. Bestehen erfordert null Tode, endliche Ausgaben, erhaltene Zyklusreihenfolge und Futterfortschritt sowie höchstens 1% der Ticks, die das aktive Rechenbudget überschreiten.

Das Timing umfasst Modellvorhersage, Planner-Arbeit, Truecolor-Rich-Komposition, ANSI-Serialisierung und Spiel-Updates. Getaktete Tests enthalten echte Sleeps. Das Zeichnen des Terminal-Emulators ist von diesem In-Memory-Rendering-Test ausgeschlossen. Das Ergebnis ist die höchste bestandene getestete Rate auf dieser Maschine und mit diesen Seeds, kein universelles Maximum. Siehe SNAKE_BENCHMARKS.md für den Release-Lauf.