Вскрытие Apple Neural Engine: почему GPU обгоняет NPU на трансформерах
Три года назад Эйлин Юн бросила работу над открытым драйвером для Apple Neural Engine (ANE), придя к печальному выводу: этот блок попросту мало на что годится. Архитектура оказалась слишком «мнениевой», чтобы строить вокруг неё универсальный ускоритель, а даже macOS использует ANE в основном для генерации уменьшенных превью в Finder. Теперь автор возвращается к теме — не чтобы сделать ускоритель полезным, а чтобы полностью описать его внутреннее устройство, пока стандартный NPU не исчез окончательно.
Повод символичен: главной фишкой чипа M5 (2025) Apple назвала «производительность в LLM», а ядра ANE переселила внутрь ядер GPU. По мнению Юн, это начало конца автономного нейромодуля, дебютировавшего ещё в A11 Bionic в 2017 году.
Заточен под свёрточные сети
ANE проектировался под плотные свёрточные сети эпохи обработки изображений — с предсказуемыми паттернами повторного использования данных. Именно это предположение и сломали трансформеры, особенно авторегрессионное декодирование. Вычислительное ядро при этом универсально: 16 ядер по 128 FP16-линий умножения-накопления (или 256 INT8), итого 2048 параллельных линий. Само по себе перемножение с накоплением ничего не говорит о задаче — характер операции (свёртка, матричное умножение, скалярное произведение) задаётся тем, как операнды раскладываются и планируются на массиве. Нелинейные активации вроде tanh реализованы кусочно-линейной таблицей на 33 значения.
У ANE нет системы команд: все операции заранее компилируются в поток дескрипторов задач, а драйвер лишь загружает их в память и «звонит в дверной звонок». По сути дескриптор — это сериализованный дамп конфигурационных регистров одного прохода по фиксированному тракту данных. Схема подачи задач напоминает pushbuffer у GPU NVIDIA. Вывод автора: ANE — это функционально жёсткий потоковый движок, а не процессор, исполняющий произвольные инструкции.
Всё упирается в память
Ключевое ограничение — не вычисления, а движение данных. При 11 TOP/s и 68 ГБ/с пропускной способности DRAM «точка перелома» roofline-модели требует не менее 162 операций на каждый прочитанный из памяти байт. Ниже этого порога ускорение вычислений не даёт ни одного лишнего токена в секунду. У ANE своя иерархия локальной памяти: приватная память ядер под ядра свёртки (16×64 КиБ), общий L2 на 2 МиБ и три DMA-движка. Причём путь для весов — односторонний, только загрузка, и веса нельзя подгружать из L2, лишь из DRAM: Apple явно не рассчитывала, что тензоры-веса придётся часто перекачивать.
Замеры расставляют точки: чтение весов у ANE даёт лишь 38 ГБ/с, чтение тайлов — 59 ГБ/с, тогда как GPU выдаёт 77,7 ГБ/с. Хуже того, запросы к весам и тайлам идут строго по очереди, а их времена складываются. Для декодирования одного токена трансформера, где нужно прогнать все веса модели ради единственного токена, побеждает тот, у кого выше пропускная способность чтения, — и это GPU. Отсюда и решение Apple свести ANE внутрь графического ядра.
Источник: Hacker News
Комментарии
Войдите, чтобы комментировать.