Snake-Geschwindigkeit und -Stabilität: M3 Max
Die abschließende Truecolor-Kampagne absolvierte 8,160 Züge mit null Toden und 4 Sicherheitseingriffen. Das Standardmodell war aac6fef/laya-multilingual-mlx in FP16, mit kompakten Planner-Beschreibungen, einem 24 × 16-Board und Anfangslänge 6. Diese Messungen verwenden die Standard-Eager-Runtime; die opt-in Kompilierung wird separat in Snake-Optimierung bewertet.
Anhaltender ungedrosselter Durchsatz: 63.61 Züge/Sekunde insgesamt über 2,400 Schritte. Jeder von vier Seeds absolvierte 600 Züge. Ihre Raten reichten von 46.32 bis 76.37 Züge/Sekunde. Jedes Spiel überlebte, behielt die Körper-Zyklusreihenfolge bei und erreichte weiterhin Futter. Die Sicherheitsschicht korrigierte in diesen Episoden 2 rohe Modellvorschläge.
Höchstes bestandenes getestetes getaktetes Rechenbudget: 20 FPS. Alle vier Seeds erfüllten die Anforderung, dass mindestens 99% der aktiven Ticks innerhalb von 50 ms liegen. Die tatsächliche Echtzeitrate, einschließlich OS-Schlaf-Überschreitung, betrug 18.69–18.94 Züge/Sekunde. Dies ist eine Budgeteinstellung, keine Behauptung von exakt 20 gerenderten Frames pro Sekunde.
Anhaltende Maximalgeschwindigkeit
| Seed | Schritte | Tatsächliche Schritte/s | Aktiver Tick p50 / p99 (ms) | Punktzahl / Länge | Eingriffe |
|---|---|---|---|---|---|
| 101 | 600 | 46.32 | 15.52 / 39.67 | 20 / 26 | 1 |
| 102 | 600 | 67.91 | 13.84 / 22.96 | 24 / 30 | 0 |
| 103 | 600 | 74.20 | 12.27 / 21.42 | 23 / 29 | 1 |
| 104 | 600 | 76.37 | 11.98 / 21.00 | 16 / 22 | 0 |
Kombiniert betrug die ungedrosselte Modellinferenz-p50/p95/p99 10.08 / 31.68 / 33.61 ms. Vollständiger aktiver Tick p50/p99 war 12.70 / 37.21 ms. Ein aktiver Tick umfasst Planung, synchronisierte Inferenz, Rich-Komposition, Truecolor-ANSI-Serialisierung und das Spiel-Update. Es wird keine Taktungsverzögerung eingefügt.
Stabilität bei festem Budget
| Seed | Ziel-FPS | Schritte | Tatsächliche Schritte/s | Aktiver Tick p99 (ms) | Budget-Fehltreffer |
|---|---|---|---|---|---|
| 101 | 20.0 | 600 | 18.69 | 39.93 | 0 (0.00%) |
| 102 | 20.0 | 600 | 18.86 | 45.09 | 0 (0.00%) |
| 103 | 20.0 | 600 | 18.94 | 48.66 | 6 (1.00%) |
| 104 | 20.0 | 600 | 18.85 | 44.53 | 0 (0.00%) |
Der bestandene Test hatte 6 späte aktive Ticks von 2,400 (insgesamt 99.75% innerhalb des Budgets). Der schlechteste Seed hatte 6/600 späte Ticks, genau die vordefinierte 1%-Grenze. Alle Züge warten auf ein frisches Modellergebnis, sodass langsame Inferenz die Spielrate reduziert, statt veraltete Aktionen auszuführen.
Kurzer Sweep
Jeder Kandidat unten lief 120 Züge mit Seed 7. Eine kurze bestandene Probe wählt einen Kandidaten für den längeren Vier-Seed-Test aus; sie allein reicht nicht aus, um Stabilität zu behaupten. Alle Spiele überlebten, einschließlich der Timing-Fehler.
| Ziel-FPS | Tatsächliche Schritte/s | Aktiver Tick p99 (ms) | Budget-Fehltreffer | Kurzer Sweep |
|---|---|---|---|---|
| 10.0 | 9.60 | 52.13 | 0.00% | bestanden |
| 12.0 | 11.39 | 42.07 | 0.00% | bestanden |
| 15.0 | 14.10 | 48.69 | 0.00% | bestanden |
| 18.0 | 16.95 | 58.10 | 2.50% | fehlgeschlagen |
| 20.0 | 18.84 | 43.84 | 0.00% | bestanden |
| 25.0 | 24.23 | 45.66 | 5.83% | fehlgeschlagen |
| 30.0 | 28.60 | 40.04 | 97.50% | fehlgeschlagen |
| 35.0 | 28.69 | 40.12 | 100.00% | fehlgeschlagen |
| 40.0 | 28.16 | 44.15 | 100.00% | fehlgeschlagen |
| 45.0 | 26.70 | 45.56 | 100.00% | fehlgeschlagen |
| 50.0 | 28.67 | 40.23 | 100.00% | fehlgeschlagen |
| 60.0 | 28.89 | 40.97 | 100.00% | fehlgeschlagen |
Der kurze Sweep ist nicht monoton, und die gemessene Latenz ändert sich über die Zeit erheblich. Getaktete und ungedrosselte Läufe unterscheiden sich in Geräte-Leerlaufphasen; normale Desktop-Aktivität, Scheduling und Taktverhalten wurden experimentell nicht isoliert. Die Daten identifizieren keine einzelne Ursache und keine universelle Geschwindigkeitsobergrenze. Wir berichten die erreichte Rate, alle Stichproben und die höchste bestandene getestete Einstellung.
Was das Stabilitätsergebnis umfasst
Laya erhält Planner-Features, darunter legale Richtungen und den besten zulässigen Fortschritt zum Futter. Es berechnet echte Wahrscheinlichkeiten. Die Zyklus-Sicherheitsschicht kann die Ausführung korrigieren, während sie die rohen Wahrscheinlichkeitsbalken beibehält und jeden Eingriff zählt. Der Checkpoint wurde hier nicht auf Snake trainiert. Genaue Bedeutung der UI-Metriken und Policy-Verhalten.
Eine separate rohe Top-1-Kontrolle lief Seeds 101–103 für jeweils 600 Züge mit deaktiviertem Ausführungsschild. Alle drei überlebten; die Punktzahlen waren 9, 24 und 19, verglichen mit 20, 24 und 23 bei den geschildeten Gegenstücken. Die rohe Kontrolle liefert weiterhin Planner-Features. Ihr Überleben über diesen Horizont belegt kein unbegrenztes ungeschildertes Überleben oder Board-Reasoning ohne Unterstützung.
Die veröffentlichte Showcase ist ein separater 100.005-sekündiger tatsächlicher TTY-Lauf, bei einem 12-FPS-Ziel: 1,144 Züge, Punktzahl 40, Länge 46, null Tode und null Eingriffe. Der erreichte Durchsatz betrug 11.44 Züge/Sekunde. Jedes aufgezeichnete Board und jede Aktion wird durch deterministisches Replay in der Testsuite geprüft. Die sichtbaren Inferenzzahlen stammen aus diesem Lauf, statt durch günstige Benchmark-Zahlen ersetzt zu werden.
Eine separate optimierte Maximalgeschwindigkeits-TTY-Aufzeichnung absolvierte 1,296 Züge in 20.01 Sekunden (64.77 Züge/Sekunde), mit Punktzahl 44, Länge 50, null Toden und null Eingriffen. Dies umfasst die tatsächlichen Terminal-Stream-Schreibvorgänge. Ihr 15-sekündiges Video in Originalgeschwindigkeit und die vollständige Aufzeichnung sind neben dem langsameren Präsentationsclip enthalten.
Messgrenzen und Herkunft
- Apple M3 Max, 40 GPU-Kerne, 128 GiB Unified Memory; macOS 27.2, Python 3.12.13.
- MLX 0.32.2, NumPy 2.5.3, Rich 15.0.0, tokenizers 0.23.2, huggingface-hub 1.32.0.
- Originale FP16-Gewichte, ohne Quantisierung oder eigenen Kernel. Upstream-Modellrevision:
052592a15d198d9ad47da779604259b10b47b7aa. - Gewichts-SHA-256 aus dem zuvor verifizierten veröffentlichten Manifest:
7fc5834af4d8fdfb268d272a9d1a66e5819a0daac98241651c4c888cc43adff1. - Jeder Zug ruft
Agent.predicteinmal mit drei gebatchten Fragen auf. Das Inferenz-Timing umfasst Tokenisierung, synchronisierte MLX-Auswertung und Ausgabekonvertierung. - Der Benchmark aktiviert explizit True Color, unabhängig von
NO_COLOR, und serialisiert die Rich-Ausgabe in einen In-Memory-Stream. Das Bildschirmzeichnen des Terminal-Emulators, Modellladen und Warmup sind ausgeschlossen. Tatsächliche Terminal-Steuerung und -Bereinigung wurden separat getestet. - Der Bericht speichert Konfiguration, Umgebung, Quell-Fingerabdruck und jede Pro-Schritt-Wahrscheinlichkeit, Ausführungsentscheidung und Zeitmessung. Das spätere Hinzufügen eines Ausgabe-Token-Labels und der opt-in Optimierung ändert weder das Baseline-Modell noch die Spiel-Policy.
Frühere Läufe bleiben erhalten
Die ersten Detailed-Prompt- und Compact-Prompt-Kampagnen erbten NO_COLOR=1 aus der Tool-Umgebung. Sie maßen die Monochrom-Serialisierung und bleiben als explorative Ergebnisse erhalten, statt für den finalen Farb-Benchmark eingesetzt zu werden. Die frühere Compact-Kampagne absolvierte 12,360 Züge ohne einen Tod und maß insgesamt 52.55 ungedrosselte Züge/Sekunde; ihr höchstes bestandenes getestetes Budget war 18 FPS. Der Unterschied zum finalen Lauf wird nicht dem Aktivieren von Farbe zugeschrieben: Die Zeitmessungen der Maschine variieren erheblich.
Der Detailed-Prompt-20-FPS-Soak scheiterte an seinem Timing-Kriterium bei allen vier Seeds, während jedes Spiel überlebte. Die Fehler bei höheren Raten der früheren Compact-Kampagne bleiben ebenfalls erhalten. Keine fehlgeschlagene abgeschlossene Episode wurde aus diesen Dateien entfernt.
Dateien und Reproduktion
- Finale Truecolor-Traces
- Frühere kompakte Monochrom-Kampagne
- Frühere Monochrom-Kampagne mit detailliertem Prompt
- Tatsächliche TTY-Steuerung und Offline-Inferenzprüfung
- Originale Showcase-Aufzeichnung
- Video-Herkunft
- Kompilierungs-, Prefix- und Prompt-Experimente
uv run --extra demo laya-snake benchmark \
--rates 10,12,15,18,20,25,30,35,40,45,50,60 \
--raw-steps 600 --sweep-steps 120 --soak-steps 600 \
--seeds 101,102,103,104 --output artifacts/snake/benchmark.json
Verwende --resume mit demselben Ausgabepfad nach einer Unterbrechung. Die Live-Präsentation verwendet standardmäßig ein lesbares 12-FPS-Ziel; --max-speed misst die aktuelle kontinuierliche Entscheidungsrate.