Documentación

Benchmark de la versión de Core ML Snake

La demo ANE FP16 sostuvo 49.1–50.0 decisiones nuevas/s en tres episodios de 600 pasos sin límite, con cero muertes. Su rendimiento agrupado fue de 49.66/s. Cada movimiento incluye tres preguntas secuenciales al modelo, trabajo del planificador y serialización de terminal en truecolor. Este es el bucle de juego activo completo, no el microbenchmark aparte de ~5 ms por pregunta.

Para la operación pautada, 20 decisiones/s solicitadas fue el ajuste probado más alto que superó el criterio de plazo de cómputo activo. El ritmo de reloj observado fue de 18.39–18.42/s, incluidos los sleeps reales y el overhead de planificación. Este resultado no demuestra una pantalla de 20 FPS perfectamente sincronizada. La grabación del README usa 12 decisiones/s solicitadas por legibilidad, y observa 11.39/s en su terminal real.

Entorno y método

  • Apple M3 Max, GPU de 40 núcleos, 128 GiB, macOS 27.2, Python 3.12.13.
  • Wheel laya-coreml==0.1.0 instalada en un entorno nuevo; Core ML Tools 9.0, NumPy 2.1.3, Rich 15.0.0; sin Torch, MLX ni Transformers instalados.
  • Paquete público ANE FP16 en la revisión 39d6a9b3d0f67f06da74fbade6121ea134cbdb21, descargado antes de la ejecución.
  • B1/L96/K32, tres preguntas secuenciales por decisión de juego, prompt compacto, tablero de 24×16, seis celdas iniciales de serpiente. Veinte decisiones de calentamiento excluidas.
  • Capa de seguridad de ciclo visible por defecto; el top-1 bruto también se mide por separado.
  • Se incluyen predict síncrono, características del juego, composición Rich, serialización ANSI en truecolor y actualización del juego. La carga, el calentamiento y el pintado del emulador de terminal quedan excluidos. Las ejecuciones pautadas incluyen llamadas sleep reales.

Para pasar se exige salidas finitas, cero muertes, orden de ciclo y progreso de comida preservados, y además como máximo un 1% de ticks activos que superen el presupuesto de tiempo solicitado en cada episodio pautado. El modo sin límite espera una predicción nueva en cada movimiento y no tiene plazo fijo. Ningún otro benchmark de modelo se ejecutó de forma concurrente.

El runtime, el checkpoint, el hash del paquete, el hash del prompt y las mediciones por tick se registran en coreml-snake.json.

Estabilidad sin límite

Semilla Movimientos Decisiones/s observadas Puntuación / longitud final Muertes Intervenciones de seguridad
101 600 49.10 20 / 26 0 1
102 600 49.89 24 / 30 0 0
103 600 49.99 23 / 29 0 1

En estas 1,800 decisiones, la latencia de la API de tres preguntas fue de 16.32 ms P50 / 21.33 ms P95. La latencia del tick activo completo fue de 19.07 ms P50 / 25.96 ms P95. Es evidencia de supervivencia acotada con asistencia explícita, no una afirmación de que el modelo pueda jugar indefinidamente sin una capa de seguridad.

Barrido pautado y confirmación

Cada barrido usa la semilla 7 durante 120 movimientos. Los ritmos fallidos se conservan:

Decisiones/s solicitadas Decisiones/s observadas Incumplimientos del plazo activo Resultado
20 18.55 0.83% Pasa; confirmado abajo
30 28.67 10.83% Falla
40 37.22 37.50% Falla
50 44.21 53.33% Falla
60 50.68 100.00% Falla

Confirmación más larga con el ajuste de 20/s:

Semilla Movimientos Decisiones/s observadas Incumplimientos del plazo activo Puntuación Resultado
101 600 18.39 4 / 600, 0.67% 20 Pasa
102 600 18.42 4 / 600, 0.67% 24 Pasa
103 600 18.42 3 / 600, 0.50% 23 Pasa

La API de tres preguntas fue de aproximadamente 26.3 ms P50 en estos episodios pautados, frente a 16.3 ms durante los episodios sin límite. El experimento establece una diferencia dependiente del ritmo, pero no aísla su causa. La planificación y las transiciones de estado de energía del dispositivo son explicaciones posibles que necesitan un perfilado aparte; este informe no las demuestra. Por tanto, un resultado de rendimiento sostenido no debe anunciarse como garantía de plazo de fotograma fijo.

Top-1 bruto y la grabación compartible

Con la anulación de seguridad desactivada, las semillas 101/102/103 completaron 200 movimientos cada una, con puntuaciones 7/6/7 y cero muertes. El modelo sigue recibiendo las mismas características exactas del planificador, así que estas ejecuciones no prueban el razonamiento a partir de un tablero sin procesar. Tampoco demuestran supervivencia en partidas largas.

En todos los modos de benchmark hubo 4,920 decisiones, cero muertes y cuatro intervenciones de seguridad. Por separado, la demostración en terminal real grabó 855 decisiones en 75.034 segundos, puntuación final 26, longitud 32, cero muertes y cero intervenciones. Sus marcas de tiempo, estados y acciones originales se prueban mediante repetición determinista exacta. Consulta LAUNCH.md para el GIF, el MP4 y la procedencia.

Reproducir

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

Para jugar al ritmo sin restricciones observado, usa laya-coreml-snake --model ./models/ane --max-speed. El pintado real del terminal puede reducir el ritmo en relación con el benchmark de serialización. El paquete Snake GPU aparte procesa las tres preguntas por lotes; este informe de la versión mide solo el paquete ANE FP16. Las comparaciones históricas emparejadas de modelos siguen en ANE_BENCHMARKS.md y BENCHMARKS.md.