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

Бенчмарк выпуска 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.