Бенчмарк выпуска Snake на Core ML
Демо ANE FP16 выдержало 49.1–50.0 новых решений/с в трёх неограниченных эпизодах по 600 шагов, без смертей. Его сводная пропускная способность составила 49.66/с. Каждый ход включает три последовательных вопроса к модели, работу планировщика и сериализацию терминала в truecolor. Это полный активный игровой цикл, а не отдельный микробенчмарк одного вопроса на ~5 мс.
Для темпового режима 20 запрошенных решений/с были наибольшей проверенной настройкой, проходящей критерий дедлайна активных вычислений. Наблюдаемая частота по реальному времени составила 18.39–18.42/с, включая реальный sleep и накладные расходы планирования. Этот результат не устанавливает идеально выдержанный показ на 20 FPS. В записи README используется 12 запрошенных решений/с ради разборчивости, с наблюдением 11.39/с в её настоящем терминале.
Окружение и метод
- Apple M3 Max, 40-ядерный GPU, 128 ГиБ, macOS 27.2, Python 3.12.13.
- Установленное колесо
laya-coreml==0.1.0в свежем окружении; Core ML Tools 9.0, NumPy 2.1.3, Rich 15.0.0; Torch, MLX и Transformers не установлены. - Публичный пакет ANE FP16 на ревизии
39d6a9b3d0f67f06da74fbade6121ea134cbdb21, скачанный до запуска. - B1/L96/K32, три последовательных вопроса на игровое решение, компактный промпт, поле 24×16, шесть начальных клеток змейки. Двадцать прогревных решений исключены.
- Видимый слой защиты от циклов по умолчанию; сырой top-1 также измеряется отдельно.
- Синхронный
predict, игровые признаки, композиция Rich, ANSI-сериализация в truecolor и обновление игры включены. Загрузка, прогрев и отрисовка эмулятором терминала исключены. Темповые прогоны включают реальные вызовыsleep.
Прохождение требует конечных выходов, нуля смертей, сохранённого порядка цикла и продвижения к еде, плюс не более 1% активных тиков, превышающих запрошенный бюджет времени в каждом темповом эпизоде. Неограниченный режим ждёт новое предсказание на каждом ходу и не имеет фиксированного дедлайна. Никакой другой бенчмарк модели не выполнялся одновременно.
Рантайм, контрольная точка, хеш пакета, хеш промпта и измерения по тикам записаны в coreml-snake.json.
Стабильность без ограничения
| Seed | Ходы | Наблюдаемые решения/с | Счёт / итоговая длина | Смерти | Вмешательства системы безопасности |
|---|---|---|---|---|---|
| 101 | 600 | 49.10 | 20 / 26 | 0 | 1 |
| 102 | 600 | 49.89 | 24 / 30 | 0 | 0 |
| 103 | 600 | 49.99 | 23 / 29 | 0 | 1 |
На этих 1 800 решениях задержка API с тремя вопросами составила 16.32 мс P50 / 21.33 мс P95. Полная задержка активного тика составила 19.07 мс P50 / 25.96 мс P95. Это свидетельство ограниченного выживания с явной помощью, а не утверждение, что модель может играть бесконечно без слоя защиты.
Темповый перебор и подтверждение
Каждый перебор использует seed 7 на 120 ходов. Неудачные частоты сохранены:
| Запрошенные решения/с | Наблюдаемые решения/с | Пропуски активного дедлайна | Результат |
|---|---|---|---|
| 20 | 18.55 | 0.83% | Проходит; подтверждение ниже |
| 30 | 28.67 | 10.83% | Не проходит |
| 40 | 37.22 | 37.50% | Не проходит |
| 50 | 44.21 | 53.33% | Не проходит |
| 60 | 50.68 | 100.00% | Не проходит |
Более длинное подтверждение на настройке 20/с:
| Seed | Ходы | Наблюдаемые решения/с | Пропуски активного дедлайна | Счёт | Результат |
|---|---|---|---|---|---|
| 101 | 600 | 18.39 | 4 / 600, 0.67% | 20 | Проходит |
| 102 | 600 | 18.42 | 4 / 600, 0.67% | 24 | Проходит |
| 103 | 600 | 18.42 | 3 / 600, 0.50% | 23 | Проходит |
API с тремя вопросами дал примерно 26.3 мс P50 в этих темповых эпизодах против 16.3 мс в неограниченных эпизодах. Эксперимент устанавливает зависимость от темпа, но не изолирует её причину. Планирование и переходы состояния питания устройства — возможные объяснения, требующие отдельного профилирования; этот отчёт их не доказывает. Поэтому результат устойчивой пропускной способности нельзя рекламировать как гарантию дедлайна с фиксированным кадром.
Сырой top-1 и запись для публикации
С отключённым переопределением безопасности seed 101/102/103 завершили по 200 ходов, набрав 7/6/7 при нуле смертей. Модель по-прежнему получает те же точные признаки планировщика, поэтому эти прогоны не проверяют рассуждение по необработанному полю. Они также не устанавливают выживание в длинной игре.
По всем режимам бенчмарка было 4 920 решений, ноль смертей и четыре вмешательства системы безопасности. Отдельно витрина в настоящем терминале записала 855 решений за 75.034 секунды, итоговый счёт 26, длину 32, ноль смертей и ноль вмешательств. Её исходные метки времени, состояния и действия проверяются точным детерминированным повтором. GIF, MP4 и происхождение см. в LAUNCH.md.
Воспроизведение
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
Чтобы играть с наблюдаемой неограниченной частотой, используйте
laya-coreml-snake --model ./models/ane --max-speed. Реальная отрисовка терминала может
снизить частоту относительно бенчмарка сериализации. Отдельный пакет Snake GPU батчит все три
вопроса; этот отчёт о выпуске измеряет только пакет ANE FP16. Исторические парные сравнения
моделей остаются в ANE_BENCHMARKS.md и BENCHMARKS.md.