Вскрытие Apple Neural Engine: почему GPU обгоняет NPU на трансформерах

· Технологии
Разработчица Эйлин Юн вернулась к заброшенному три года назад проекту и до конца разобрала архитектуру нейромодуля Apple на чипе M1 — как раз к моменту, когда Apple, похоже, хоронит отдельный NPU.

cover.svg

Три года назад Эйлин Юн бросила работу над открытым драйвером для 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

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.