Benchmark de lançamento do Snake em Core ML
A demonstração ANE FP16 sustentou 49.1–50.0 decisões novas/s em três episódios de 600 passos sem limite, com zero mortes. Seu throughput agrupado foi 49.66/s. Cada movimento inclui três perguntas sequenciais ao modelo, trabalho do planejador e serialização truecolor do terminal. Este é o laço de jogo ativo completo, não o microbenchmark separado de ~5 ms para uma única pergunta.
Para operação cadenciada, 20 decisões/s solicitadas foi a maior configuração testada a passar no critério de prazo de computação ativo. A taxa de relógio de parede observada foi 18.39–18.42/s, incluindo sleep real e sobrecarga de escalonamento. Este resultado não estabelece uma exibição de 20 FPS com tempo perfeito. A gravação do README usa 12 decisões/s solicitadas para legibilidade, observando 11.39/s em seu terminal real.
Ambiente e 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 em um ambiente novo; Core ML Tools 9.0, NumPy 2.1.3, Rich 15.0.0; sem Torch, MLX ou Transformers instalados. - Pacote público ANE FP16 na revisão
39d6a9b3d0f67f06da74fbade6121ea134cbdb21, baixado antes da execução. - B1/L96/K32, três perguntas sequenciais por decisão de jogo, prompt compacto, tabuleiro 24×16, seis células iniciais da cobra. Vinte decisões de aquecimento excluídas.
- Camada de segurança de ciclo visível padrão; o top-1 bruto também é medido separadamente.
predictsíncrono, recursos do jogo, composição com Rich, serialização ANSI truecolor e atualização do jogo incluídos. Carregamento, aquecimento e pintura do emulador de terminal excluídos. As execuções cadenciadas incluem chamadassleepreais.
Passar exige saídas finitas, zero mortes, ordem de ciclo e progresso da comida preservados, além de no máximo 1% dos ticks ativos excedendo o orçamento de tempo solicitado em cada episódio cadenciado. O modo sem limite espera por uma predição nova a cada movimento e não tem prazo fixo. Nenhum outro benchmark de modelo rodou em paralelo.
O runtime, o checkpoint, o hash do pacote, o hash do prompt e as medições por tick estão registrados em coreml-snake.json.
Estabilidade sem limite
| Semente | Movimentos | Decisões/s observadas | Pontuação / comprimento final | Mortes | Intervenções de segurança |
|---|---|---|---|---|---|
| 101 | 600 | 49.10 | 20 / 26 | 0 | 1 |
| 102 | 600 | 49.89 | 24 / 30 | 0 | 0 |
| 103 | 600 | 49.99 | 23 / 29 | 0 | 1 |
Ao longo dessas 1,800 decisões, a latência da API de três perguntas foi 16.32 ms de P50 / 21.33 ms de P95. A latência completa do tick ativo foi 19.07 ms de P50 / 25.96 ms de P95. Esta é uma evidência limitada de sobrevivência com assistência explícita, não uma afirmação de que o modelo pode jogar indefinidamente sem uma camada de segurança.
Varredura cadenciada e confirmação
Cada varredura usa a semente 7 por 120 movimentos. As taxas com falha são mantidas:
| Decisões/s solicitadas | Decisões/s observadas | Prazos ativos perdidos | Resultado |
|---|---|---|---|
| 20 | 18.55 | 0.83% | Passa; confirmado abaixo |
| 30 | 28.67 | 10.83% | Falha |
| 40 | 37.22 | 37.50% | Falha |
| 50 | 44.21 | 53.33% | Falha |
| 60 | 50.68 | 100.00% | Falha |
Confirmação mais longa na configuração de 20/s:
| Semente | Movimentos | Decisões/s observadas | Prazos ativos perdidos | Pontuação | Resultado |
|---|---|---|---|---|---|
| 101 | 600 | 18.39 | 4 / 600, 0.67% | 20 | Passa |
| 102 | 600 | 18.42 | 4 / 600, 0.67% | 24 | Passa |
| 103 | 600 | 18.42 | 3 / 600, 0.50% | 23 | Passa |
A API de três perguntas foi de aproximadamente 26.3 ms de P50 nesses episódios cadenciados, em comparação com 16.3 ms durante os episódios sem limite. O experimento estabelece uma diferença dependente da cadência, mas não isola sua causa. Escalonamento e transições de estado de energia do dispositivo são explicações possíveis que precisam de profiling separado; elas não são comprovadas por este relatório. Um resultado de throughput sustentado portanto não deve ser anunciado como garantia de prazo de quadro fixo.
Top-1 bruto e a gravação compartilhável
Com a substituição de segurança desabilitada, as sementes 101/102/103 completaram 200 movimentos cada, pontuando 7/6/7 com zero mortes. O modelo ainda recebe os mesmos recursos exatos do planejador, então essas execuções não testam raciocínio a partir de um tabuleiro não processado. Elas também não estabelecem sobrevivência em jogos longos.
Em todos os modos de benchmark houve 4,920 decisões, zero mortes e quatro intervenções de segurança. Separadamente, a demonstração em terminal real gravou 855 decisões ao longo de 75.034 segundos, pontuação final 26, comprimento 32, zero mortes e zero intervenções. Seus carimbos de tempo, estados e ações originais são testados por replay determinístico exato. Veja LAUNCH.md para o GIF, o MP4 e a proveniência.
Reproduza
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 jogar na taxa sem restrição observada, use
laya-coreml-snake --model ./models/ane --max-speed. A pintura real do terminal pode
reduzir a taxa em relação ao benchmark de serialização. O pacote Snake GPU separado
faz batching das três perguntas; este relatório de lançamento mede apenas o pacote ANE FP16.
Comparações históricas pareadas de modelos permanecem em
ANE_BENCHMARKS.md e BENCHMARKS.md.