Документация

Скорость и стабильность Snake: M3 Max

Финальная кампания истинного цвета завершила 8 160 ходов с нулём смертей и 4 вмешательствами безопасности. Моделью по умолчанию была aac6fef/laya-multilingual-mlx в FP16, с компактными описаниями планировщика, полем 24 × 16 и начальной длиной 6. Эти измерения используют eager-среду выполнения по умолчанию; опциональная компиляция оценивается отдельно в оптимизации Snake.

Устойчивая пропускная способность без ограничения скорости: 63.61 ходов/секунду в целом на 2 400 шагах. Каждый из четырёх seed завершил 600 ходов. Их частоты варьировались от 46.32 до 76.37 ходов/секунду. Каждая игра выжила, сохранила циклический порядок тела и продолжала достигать еды. Слой безопасности исправил 2 сырых предложения модели в этих эпизодах.

Наибольший прошедший протестированный бюджет вычислений с темпом: 20 FPS. Все четыре seed выполнили требование, что не менее 99% активных тиков укладываются в 50 ms. Фактическая частота реального времени, включая превышение из-за сна ОС, составила 18.69–18.94 ходов/секунду. Это настройка бюджета, а не утверждение о ровно 20 отрисованных кадрах каждую секунду.

Устойчивая максимальная скорость

Seed Шаги Фактические шаги/с Активный тик p50 / p99 (ms) Счёт / длина Вмешательства
101 600 46.32 15.52 / 39.67 20 / 26 1
102 600 67.91 13.84 / 22.96 24 / 30 0
103 600 74.20 12.27 / 21.42 23 / 29 1
104 600 76.37 11.98 / 21.00 16 / 22 0

Совокупный вывод модели без ограничения скорости p50 / p95 / p99 составил 10.08 / 31.68 / 33.61 ms. Полный активный тик p50 / p99 составил 12.70 / 37.21 ms. Активный тик включает планирование, синхронизированный вывод, композицию Rich, сериализацию ANSI истинного цвета и обновление игры. Задержка темпа не вставляется.

Стабильность при фиксированном бюджете

Seed Целевой FPS Шаги Фактические шаги/с Активный тик p99 (ms) Промахи бюджета
101 20.0 600 18.69 39.93 0 (0.00%)
102 20.0 600 18.86 45.09 0 (0.00%)
103 20.0 600 18.94 48.66 6 (1.00%)
104 20.0 600 18.85 44.53 0 (0.00%)

Прошедший тест имел 6 поздних активных тиков из 2 400 (99.75% в рамках бюджета в целом). Худший seed имел 6/600 поздних тиков — ровно предопределённый предел 1%. Все ходы ждут свежий результат модели, поэтому медленный вывод снижает частоту игры, а не выполняет устаревшие действия.

Короткий свип

Каждый кандидат ниже прошёл 120 ходов с seed 7. Короткая прошедшая проба выбирает кандидата для более длинного теста на четырёх seed; её одной недостаточно, чтобы заявлять стабильность. Все игры выжили, включая случаи сбоя по времени.

Целевой FPS Фактические шаги/с Активный тик p99 (ms) Промахи бюджета Короткий свип
10.0 9.60 52.13 0.00% прошёл
12.0 11.39 42.07 0.00% прошёл
15.0 14.10 48.69 0.00% прошёл
18.0 16.95 58.10 2.50% провал
20.0 18.84 43.84 0.00% прошёл
25.0 24.23 45.66 5.83% провал
30.0 28.60 40.04 97.50% провал
35.0 28.69 40.12 100.00% провал
40.0 28.16 44.15 100.00% провал
45.0 26.70 45.56 100.00% провал
50.0 28.67 40.23 100.00% провал
60.0 28.89 40.97 100.00% провал

Короткий свип немонотонен, и измеренная задержка значительно меняется во времени. Запуски с темпом и без ограничения различаются по периодам простоя устройства; обычная активность рабочего стола, планирование и поведение часов не были изолированы экспериментально. Данные не определяют единственную причину или универсальный потолок скорости. Мы сообщаем достигнутую частоту, все выборки и наибольшую прошедшую протестированную настройку.

Что включает результат стабильности

Laya получает признаки планировщика, включая допустимые направления и лучший допустимый прогресс к еде. Она вычисляет реальные вероятности. Слой безопасности цикла может исправить выполнение, сохраняя сырые столбцы вероятностей и считая каждое вмешательство. Чекпойнт здесь не обучался на Snake. Точные значения метрик UI и поведение политики.

Отдельный сырой контроль top-1 прошёл seed 101–103 по 600 ходов каждый с отключённым щитом выполнения. Все три выжили; счета составили 9, 24 и 19 против 20, 24 и 23 в аналогах со щитом. Сырой контроль всё равно предоставляет признаки планировщика. Его выживание на этом горизонте не устанавливает бесконечное выживание без щита или рассуждения о поле без помощи.

Опубликованный показ — это отдельный реальный 100.005-секундный запуск TTY, с целью 12 FPS: 1 144 хода, счёт 40, длина 46, ноль смертей и ноль вмешательств. Достигнутая пропускная способность — 11.44 хода/секунду. Каждое записанное поле и действие проверяются детерминированным воспроизведением в наборе тестов. Видимые числа вывода происходят из того запуска, а не заменены выгодными числами бенчмарка.

Отдельная оптимизированная запись TTY на максимальной скорости завершила 1 296 ходов за 20.01 секунды (64.77 ходов/секунду) со счётом 44, длиной 50, нулём смертей и нулём вмешательств. Сюда входит реальная запись потока терминала. Её 15-секундное видео в оригинальной скорости и полная запись включены наряду с более медленным презентационным клипом.

Границы измерения и происхождение

  • Apple M3 Max, 40 ядер GPU, 128 GiB унифицированной памяти; macOS 27.2, Python 3.12.13.
  • MLX 0.32.2, NumPy 2.5.3, Rich 15.0.0, tokenizers 0.23.2, huggingface-hub 1.32.0.
  • Исходные веса FP16, без квантования или пользовательского ядра. Ревизия модели апстрима: 052592a15d198d9ad47da779604259b10b47b7aa.
  • SHA-256 весов из ранее проверенного опубликованного манифеста: 7fc5834af4d8fdfb268d272a9d1a66e5819a0daac98241651c4c888cc43adff1.
  • Каждый ход вызывает Agent.predict один раз с тремя вопросами в пакете. Хронометраж вывода включает токенизацию, синхронизированное вычисление MLX и преобразование вывода.
  • Бенчмарк явно включает истинный цвет, независимо от NO_COLOR, и сериализует вывод Rich в поток в памяти. Отрисовка экрана эмулятора терминала, загрузка модели и прогрев исключены. Фактические управляющие коды терминала и очистка тестировались отдельно.
  • Отчёт хранит конфигурацию, окружение, отпечаток источника и каждую пошаговую вероятность, решение о выполнении и тайминг. Добавление позже метки выходных токенов и опциональной оптимизации не меняет базовую модель или политику игры.

Более ранние запуски сохранены

Первые кампании с подробным и компактным промптом унаследовали NO_COLOR=1 из окружения инструмента. Они измеряли монохромную сериализацию и сохранены как исследовательские результаты, а не подставлены вместо финального цветного бенчмарка. Более ранняя компактная кампания завершила 12 360 ходов без смерти и измерила 52.55 ходов/секунду без ограничения в целом; её наибольший прошедший протестированный бюджет составил 18 FPS. Разница с финальным запуском не приписывается включению цвета: тайминги машины существенно варьируются.

Подробный soak на 20 FPS с подробным промптом не прошёл свой критерий по времени на всех четырёх seed, при этом каждая игра выжила. Сбои на более высокой частоте у более ранней компактной кампании также сохранены. Ни один проваленный завершённый эпизод не был удалён из этих файлов.

Файлы и воспроизведение

uv run --extra demo laya-snake benchmark \
  --rates 10,12,15,18,20,25,30,35,40,45,50,60 \
  --raw-steps 600 --sweep-steps 120 --soak-steps 600 \
  --seeds 101,102,103,104 --output artifacts/snake/benchmark.json

Используйте --resume с тем же выходным путём после прерывания. Живая презентация по умолчанию использует читаемую цель 12 FPS; --max-speed измеряет текущую непрерывную частоту решений.