Скорость и стабильность 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, при этом каждая игра выжила. Сбои на более высокой частоте у более ранней компактной кампании также сохранены. Ни один проваленный завершённый эпизод не был удалён из этих файлов.
Файлы и воспроизведение
- Финальные трассы истинного цвета
- Более ранняя компактная монохромная кампания
- Более ранняя монохромная кампания с подробным промптом
- Фактические управляющие коды TTY и проверка офлайн-вывода
- Оригинальная запись показа
- Происхождение видео
- Эксперименты с компиляцией, префиксами и промптом
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 измеряет текущую непрерывную частоту решений.