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.0instalada 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
predictsí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 llamadassleepreales.
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.