Documentação

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.0 instalada 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.
  • predict sí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 chamadas sleep reais.

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.