Snake на Core ML: живые вероятности, локальный инференс
Терминальное демо прогоняет настоящую модель Laya на каждом ходу. Левая панель показывает поле, счёт и длину змейки; правая панель показывает вероятности направлений, оценку риска тупика, достижимость еды, измеренное время предсказания, движок, ноль выходных токенов и статус офлайн-инференса.
Запуск на 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
Используйте терминал не меньше 104 столбцов × 35 строк с моноширинным шрифтом и поддержкой truecolor. Загрузка модели и начальная компиляция Core ML происходят до начала игры и могут занять десятки секунд при первом запуске. Двенадцать решений в секунду — это разборчивая скорость показа, а не максимум оборудования.
Путь к модели полностью локальный после явного скачивания. Запуск игры с некешированным ID из Hub
завершается с инструкциями, а не скачиванием во время отображения OFFLINE. Рантайму не нужны
MLX, PyTorch или Transformers.
| Управление | Действие |
|---|---|
| Пробел | Пауза или продолжение |
Вверх / Вниз, или + / - |
Увеличить или уменьшить частоту решений |
| R | Начать следующий раунд с заданным seed |
| Q / Ctrl-C | Выйти и восстановить терминал |
Интерфейс ждёт, когда терминал слишком мал. --no-alt-screen оставляет финальный кадр в истории
прокрутки; --headless прогоняет ту же модель/игру без дисплея.
Два варианта развёртывания
Пакет ANE по умолчанию имеет батч один и длину 96. Каждый шаг игры отвечает на три вопроса последовательно. Его бенчмарк одного вопроса ~5 мс — это не время полного кадра игры. Обычный пакет Snake GPU использует B3/L64/K4 и батчит эти три вопроса:
hf download aac6fef/laya-multilingual-coreml-snake --local-dir models/snake-gpu
laya-coreml-snake --model ./models/snake-gpu --fps 12
Метка движка описывает выбранные единицы вычислений Core ML. Выделенный граф ANE имеет отдельные
свидетельства плана исполнения и трассы оборудования в
отчёте ANE; CPU+ANE всё ещё допускает работу хоста.
Чем управляет модель
Код вычисляет допустимые ходы, безопасное продвижение по гамильтонову циклу и то, достижима ли еда
через пустые клетки. Laya получает эти признаки и возвращает вероятности направления и булевы
вероятности. Показанный риск — это 1 - P(safe route); это оценка модели, а не калиброванная
вероятность погибнуть на следующем ходу.
Щит безопасности по умолчанию ограничивает выполняемые ходы безопасным относительно цикла
продвижением. Интерфейс сохраняет видимыми исходные вероятности модели, показывает предложенное и
выполненное направление и увеличивает видимый счётчик вмешательств, когда они различаются.
--unassisted выполняет сырой top-1 модели без этого щита. Ноль смертей со щитом не доказывает
интеллект Snake без помощи или неограниченное выживание.
Запишите реальный прогон и экспортируйте медиа для публикации
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
Записи включают происхождение модели, каждое поле перед объявленным действием, реальные
вероятности, задержку инференса, прошедшие метки времени и итоговую сводку. Экспортёр переиспользует
живую композицию терминала и сохраняет тайминг 1× реального времени. Надпись на экране
RECORDED RUN · 1× обозначает повтор. Боковой файл записывает хеши исходников и рендерера. FPS
видео дискретизирует запись; он не меняет число решений модели и не ускоряет воспроизведение.
Выходные файлы должны быть новыми путями. --max-speed отключает темп и ждёт каждое новое
предсказание перед ходом. Он не пропускает вызовы модели:
laya-coreml-snake --model ./models/snake --max-speed \
--duration 20 --record snake-fast.jsonl
Измерьте стабильную частоту решений
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
Бенчмарк сначала измеряет поведение без щита и работу без ограничения, затем перебирает целевые частоты, а после проверяет проходные частоты на более длинных эпизодах с несколькими seed. Прохождение требует нуля смертей, конечных выходов, сохранённого порядка цикла и продвижения к еде, а также не более 1% тиков, превышающих активный бюджет вычислений.
Тайминг включает предсказание модели, работу планировщика, композицию Rich в truecolor, ANSI-сериализацию и обновления игры. Темповые тесты включают реальные sleep. Отрисовка эмулятором терминала исключена из этого теста рендеринга в памяти. Результат — наибольшая проходная проверенная частота на этой машине и этих seed, а не универсальный максимум. Прогон выпуска см. в SNAKE_BENCHMARKS.md.