Dokumentation

Core ML Snake Release-Benchmark

Die ANE FP16-Demo hielt 49.1–50.0 frische Entscheidungen/s über drei ungedrosselte 600-Schritt-Episoden, mit null Toden. Ihr gepoolter Durchsatz betrug 49.66/s. Jeder Zug umfasst drei sequenzielle Modellfragen, Planner-Arbeit und Truecolor-Terminal-Serialisierung. Das ist die vollständige aktive Spielschleife, nicht der separate Mikrobenchmark für eine einzelne Frage mit ~5 ms.

Für den getakteten Betrieb war 20 angeforderte Entscheidungen/s die höchste getestete Einstellung, die das Kriterium für die Frist der aktiven Berechnung bestand. Die beobachtete Echtzeitrate war 18.39–18.42/s, einschließlich echtem Sleep und Scheduling-Overhead. Dieses Ergebnis belegt keine perfekt getaktete 20 FPS-Anzeige. Die README-Aufzeichnung verwendet 12 angeforderte Entscheidungen/s für die Lesbarkeit und beobachtet 11.39/s in ihrem echten Terminal.

Umgebung und Methode

  • Apple M3 Max, 40-Kern-GPU, 128 GiB, macOS 27.2, Python 3.12.13.
  • Installiertes laya-coreml==0.1.0-Wheel in einer frischen Umgebung; Core ML Tools 9.0, NumPy 2.1.3, Rich 15.0.0; kein Torch, MLX oder Transformers installiert.
  • Öffentliches ANE-FP16-Bundle bei Revision 39d6a9b3d0f67f06da74fbade6121ea134cbdb21, vor der Ausführung heruntergeladen.
  • B1/L96/K32, drei sequenzielle Fragen pro Spielentscheidung, kompakter Prompt, 24×16-Board, sechs anfängliche Snake-Zellen. Zwanzig Warmup-Entscheidungen ausgeschlossen.
  • Standardmäßig sichtbare Zyklus-Sicherheitsschicht; rohe Top-1 wird ebenfalls separat gemessen.
  • Synchrones predict, Spiel-Features, Rich-Komposition, Truecolor-ANSI-Serialisierung und Spiel-Update enthalten. Laden, Warmup und Terminal-Emulator-Zeichnen ausgeschlossen. Getaktete Läufe enthalten echte sleep-Aufrufe.

Bestehen erfordert endliche Ausgaben, null Tode, erhaltene Zyklusreihenfolge und Futterfortschritt sowie höchstens 1% der aktiven Ticks, die das angeforderte Zeitbudget überschreiten in jeder getakteten Episode. Der ungedrosselte Modus wartet bei jedem Zug auf eine frische Vorhersage und hat keine feste Frist. Es lief kein anderes Modell-Benchmark gleichzeitig.

Die Laufzeit, der Checkpoint, der Paket-Hash, der Prompt-Hash und die Messungen pro Tick sind in coreml-snake.json festgehalten.

Stabilität ohne Drosselung

Seed Züge Beobachtete Entscheidungen/s Punktzahl / Endlänge Tode Sicherheitseingriffe
101 600 49.10 20 / 26 0 1
102 600 49.89 24 / 30 0 0
103 600 49.99 23 / 29 0 1

Über diese 1,800 Entscheidungen betrug die Latenz der Drei-Fragen-API 16.32 ms P50 / 21.33 ms P95. Die vollständige Latenz des aktiven Ticks betrug 19.07 ms P50 / 25.96 ms P95. Das ist begrenzter Überlebensbeleg mit expliziter Unterstützung, keine Behauptung, dass das Modell ohne Sicherheitsschicht unbegrenzt spielen kann.

Getakteter Sweep und Bestätigung

Jeder Sweep verwendet Seed 7 für 120 Züge. Fehlgeschlagene Raten bleiben erhalten:

Angeforderte Entscheidungen/s Beobachtete Entscheidungen/s Fehltreffer der aktiven Frist Ergebnis
20 18.55 0.83% bestanden; unten bestätigt
30 28.67 10.83% fehlgeschlagen
40 37.22 37.50% fehlgeschlagen
50 44.21 53.33% fehlgeschlagen
60 50.68 100.00% fehlgeschlagen

Längere Bestätigung bei der 20/s-Einstellung:

Seed Züge Beobachtete Entscheidungen/s Fehltreffer der aktiven Frist Punktzahl Ergebnis
101 600 18.39 4 / 600, 0.67% 20 bestanden
102 600 18.42 4 / 600, 0.67% 24 bestanden
103 600 18.42 3 / 600, 0.50% 23 bestanden

Die Drei-Fragen-API lag in diesen getakteten Episoden bei etwa 26.3 ms P50, verglichen mit 16.3 ms während der ungedrosselten Episoden. Das Experiment belegt einen taktungsabhängigen Unterschied, isoliert aber nicht seine Ursache. Scheduling und Übergänge des Geräte-Energiezustands sind mögliche Erklärungen, die ein separates Profiling erfordern; sie werden von diesem Bericht nicht belegt. Ein anhaltendes Durchsatzergebnis darf daher nicht als Garantie einer festen Frame-Frist beworben werden.

Rohe Top-1 und die teilbare Aufzeichnung

Mit deaktivierter Sicherheitsüberschreibung absolvierten die Seeds 101/102/103 jeweils 200 Züge und erzielten 7/6/7 mit null Toden. Das Modell erhält weiterhin dieselben exakten Planner-Features, sodass diese Läufe kein Reasoning von einem unverarbeiteten Board testen. Sie belegen auch kein Überleben in langen Spielen.

Über alle Benchmark-Modi hinweg gab es 4,920 Entscheidungen, null Tode und vier Sicherheitseingriffe. Separat zeichnete die Echtterminal-Showcase 855 Entscheidungen über 75.034 Sekunden auf, Endpunktzahl 26, Länge 32, null Tode und null Eingriffe. Ihre ursprünglichen Zeitstempel, Zustände und Aktionen werden durch exaktes deterministisches Replay getestet. Siehe LAUNCH.md für das GIF, das MP4 und die Herkunft.

Reproduzieren

pip install 'laya-coreml[demo]==0.1.0'
hf download aac6fef/laya-multilingual-coreml-ane \
  --revision 39d6a9b3d0f67f06da74fbade6121ea134cbdb21 \
  --local-dir models/ane
laya-coreml-snake benchmark --model ./models/ane \
  --rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
  --seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json

Um mit der beobachteten uneingeschränkten Rate zu spielen, verwende laya-coreml-snake --model ./models/ane --max-speed. Das tatsächliche Terminal-Zeichnen kann die Rate relativ zum Serialisierungs-Benchmark reduzieren. Das separate Snake-GPU-Bundle bündelt alle drei Fragen; dieser Release-Bericht misst nur das ANE-FP16-Bundle. Historische gepaarte Modellvergleiche bleiben in ANE_BENCHMARKS.md und BENCHMARKS.md.