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