Documentação

Benchmark da versão do Snake em Core ML

A demonstração ANE FP16 sustentou 49.1–50.0 decisões novas/s em três episódios sem limite de 600 passos, com zero mortes. O seu débito agrupado foi 49.66/s. Cada movimento inclui três perguntas sequenciais ao modelo, trabalho do planeador e serialização de terminal em cores verdadeiras. Este é o ciclo de jogo ativo completo, não o microbenchmark separado de ~5 ms para uma única pergunta.

Para funcionamento a ritmo fixo, 20 decisões/s pedidas foi a definição testada mais alta a passar o critério de prazo de computação ativa. A taxa de relógio de parede observada foi 18.39–18.42/s, incluindo pausas (sleep) reais e custos de escalonamento. Este resultado não estabelece uma apresentação perfeitamente sincronizada a 20 FPS. A gravação do README usa 12 decisões/s pedidas por legibilidade, observando 11.39/s no 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 instalado num ambiente novo; Core ML Tools 9.0, NumPy 2.1.3, Rich 15.0.0; sem Torch, MLX nem Transformers instalados.
  • Pacote ANE FP16 público na revisão 39d6a9b3d0f67f06da74fbade6121ea134cbdb21, descarregado 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 de snake. Vinte decisões de aquecimento excluídas.
  • Camada de segurança de ciclo visível por predefinição; o top-1 em bruto também é medido em separado.
  • predict síncrono, características do jogo, composição Rich, serialização ANSI em cores verdadeiras e atualização do jogo incluídos. Carregamento, aquecimento e pintura do emulador de terminal excluídos. As execuções a ritmo fixo 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 a exceder o orçamento de tempo pedido em cada episódio a ritmo fixo. O modo sem limite espera por uma predição nova em cada movimento e não tem prazo fixo. Não correu nenhum outro benchmark de modelo em simultâneo.

O runtime, o checkpoint, o hash do pacote, o hash do prompt e as medições por tick são registados 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 destas 1,800 decisões, a latência da API de três perguntas foi 16.32 ms P50 / 21.33 ms P95. A latência completa do tick ativo foi 19.07 ms P50 / 25.96 ms P95. Esta é uma evidência limitada de sobrevivência com assistência explícita, não uma afirmação de que o modelo consegue jogar indefinidamente sem uma camada de segurança.

Varrimento a ritmo fixo e confirmação

Cada varrimento usa a semente 7 durante 120 movimentos. As taxas falhadas são mantidas:

Decisões/s pedidas Decisões/s observadas Incumprimentos do prazo ativo 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 definição de 20/s:

Semente Movimentos Decisões/s observadas Incumprimentos do prazo ativo 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 aproximadamente 26.3 ms P50 nestes episódios a ritmo fixo, em comparação com 16.3 ms durante os episódios sem limite. A experiência estabelece uma diferença dependente do ritmo, mas não isola a sua causa. O escalonamento e as transições de estado de potência do dispositivo são explicações possíveis que precisam de perfilagem separada; não são provadas por este relatório. Um resultado de débito sustentado não deve, portanto, ser publicitado como uma garantia de prazo a fotograma fixo.

Top-1 em bruto e a gravação partilhável

Com a substituição de segurança desativada, as sementes 101/102/103 completaram cada uma 200 movimentos, com pontuações 7/6/7 e zero mortes. O modelo continua a receber as mesmas características exatas do planeador, por isso estas execuções não testam o raciocínio a partir de um tabuleiro não processado. 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. Em separado, a demonstração em terminal real registou 855 decisões ao longo de 75.034 segundos, pontuação final 26, comprimento 32, zero mortes e zero intervenções. Os seus timestamps, estados e ações originais são testados por replay determinístico exato. Vê LAUNCH.md para o GIF, o MP4 e a proveniência.

Reproduzir

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 à taxa sem restrições observada, usa 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 agrupa as três perguntas; este relatório de versão mede apenas o pacote ANE FP16. As comparações históricas pareadas de modelos permanecem em ANE_BENCHMARKS.md e BENCHMARKS.md.