Комментарии 1
Отличная статья и монументальный объём низкоуровневой работы! Читать про реверс-инжиниринг ANE, работу с XPC и сборку пайплайна через MIL-код - одно удовольствие.
Пара мыслей по прочитанному:
1. Трюки с KV-кэшем и ограничениями MIL: Решение с эмуляцией обновления кэша через комбинацию gather + select по маске вместо отсутствующего slice_update - это изящный костыль, который реально работает в условиях жестких ограничений компилятора ANE.
2. Асинхронность и Overhead: Замена синхронного вызова на completionHandler с atomic-wait и плотная набивка очереди ANE — ключевой момент всей оптимизации. Взаимодействие процессов через XPC в macOS всегда славилось конским оверхедом на контекст-свитчах, и сокращение простоя NPU на 10-15% дает ощутимый буст к TTFT.
3. Перспективы Qwen 3.5 & DeltaNet: С появлением рекуррентных архитектур и гибридных слоев (как в Qwen 3.5) нагрузка на память действительно падает, но отсутствие нативной поддержки depthwise-сверток на ANE «из коробки» — неприятный блокер. Будет интересно посмотреть, удастся ли разложить их на цепочку из батчевых matmul или эмулировать через групповые операции.
Спасибо за открытый репозиторий и подробный разбор системных логов! Буду следить за обновлениями по части OpenAI API и квантизации.

Внутри Apple Neural Engine, часть 2: запускаем модель