Documentação

Snake em Core ML: probabilidades ao vivo, inferência local

A demonstração de terminal roda um modelo Laya real a cada movimento. O painel esquerdo mostra o tabuleiro, a pontuação e o comprimento da cobra; o painel direito mostra as probabilidades de direção, o risco estimado de beco sem saída, a alcançabilidade da comida, o tempo de predição medido, o engine, zero tokens de saída e o status de inferência offline.

Inicie em um Mac Apple Silicon

pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake --fps 12

Use um terminal de pelo menos 104 colunas × 35 linhas com uma fonte monoespaçada e suporte a truecolor. O carregamento do modelo e a compilação inicial do Core ML acontecem antes de o jogo começar e podem levar dezenas de segundos na primeira execução. Doze decisões por segundo é uma velocidade de apresentação legível, não um máximo de hardware.

O caminho do modelo é totalmente local após o download explícito. Iniciar o jogo com um ID do Hub não armazenado em cache falha com instruções em vez de baixar enquanto exibe OFFLINE. O runtime não precisa de MLX, PyTorch nem Transformers.

Controle Ação
Espaço Pausa ou retoma
Cima / Baixo, ou + / - Aumenta ou diminui a taxa de decisão
R Inicia a próxima rodada com semente
Q / Ctrl-C Sai e restaura o terminal

A interface espera quando o terminal é pequeno demais. --no-alt-screen deixa o quadro final no scrollback; --headless roda o mesmo modelo/jogo sem a exibição.

Duas opções de implantação

O pacote ANE padrão tem batch um e comprimento 96. Cada passo do jogo responde a três perguntas sequencialmente. Seu benchmark de ~5 ms para uma única pergunta não é um tempo de quadro de jogo completo. O pacote Snake GPU comum usa B3/L64/K4 e faz batching dessas três perguntas:

hf download aac6fef/laya-multilingual-coreml-snake --local-dir models/snake-gpu
laya-coreml-snake --model ./models/snake-gpu --fps 12

O rótulo do engine descreve as compute units do Core ML selecionadas. O grafo ANE dedicado tem evidência separada de plano de execução e de trace de hardware no relatório do ANE; CPU+ANE ainda permite trabalho no host.

O que o modelo controla

O código calcula os movimentos legais, o progresso seguro ao longo de um ciclo hamiltoniano e se a comida é alcançável por células vazias. O Laya recebe esses recursos e retorna probabilidades de direção e booleanas. O risco exibido é 1 - P(safe route); é uma estimativa do modelo, não uma probabilidade calibrada de morrer no próximo movimento.

O escudo de segurança padrão restringe os movimentos executados ao progresso seguro no ciclo. A interface mantém as probabilidades originais do modelo visíveis, mostra a direção proposta e executada e incrementa um contador de intervenções visível quando elas diferem. --unassisted executa o top-1 bruto do modelo sem esse escudo. Zero mortes com o escudo não estabelece inteligência de Snake sem auxílio nem sobrevivência ilimitada.

Grave uma execução real e exporte mídia compartilhável

laya-coreml-snake --model ./models/snake --fps 12 --seed 7 \
  --duration 75 --record snake.jsonl

# Requires ffmpeg: brew install ffmpeg
laya-coreml-snake export snake.jsonl --start 45 --seconds 20 \
  --output snake.mp4 --gif snake.gif --gif-seconds 15
laya-coreml-snake export snake.jsonl --start 55 --output snake.png

As gravações incluem a proveniência do modelo, cada tabuleiro antes da ação anunciada, probabilidades reais, latência de inferência, carimbos de tempo decorridos e um resumo final. O exportador reutiliza a composição do terminal ao vivo e preserva o tempo de relógio de parede de 1×. O RECORDED RUN · 1× na tela identifica um replay. O sidecar registra hashes da origem e do renderizador. O FPS do vídeo amostra a gravação; ele não muda o número de decisões do modelo nem acelera a reprodução.

Os arquivos de saída devem ser caminhos novos. --max-speed desativa a cadência e espera por cada predição nova antes de se mover. Ele não pula chamadas ao modelo:

laya-coreml-snake --model ./models/snake --max-speed \
  --duration 20 --record snake-fast.jsonl

Meça uma taxa de decisão estável

laya-coreml-snake benchmark --model ./models/snake \
  --rates 20,30,40,50,60 --sweep-steps 120 --soak-steps 600 \
  --seeds 101,102,103 --raw-steps 200 --output snake-benchmark.json

O benchmark primeiro mede o comportamento sem escudo e a operação sem limite, varre taxas-alvo e depois testa as taxas aprovadas em episódios mais longos com várias sementes. Passar exige zero mortes, saídas finitas, ordem de ciclo e progresso da comida preservados e no máximo 1% dos ticks excedendo o orçamento de computação ativo.

A medição inclui predição do modelo, trabalho do planejador, composição truecolor com Rich, serialização ANSI e atualizações do jogo. Os testes cadenciados incluem sleeps reais. A pintura do emulador de terminal fica de fora deste teste de renderização em memória. O resultado é a maior taxa testada aprovada nesta máquina e com estas sementes, não um máximo universal. Veja SNAKE_BENCHMARKS.md para a execução de lançamento.