Хакеры вскрыли Apple Neural Engine в M4: 38 TOPS оказались маркетингом
Apple не документирует систему команд Neural Engine, не раскрывает его архитектуру и не позволяет обращаться к нему в обход Core ML (фреймворка, через который macOS направляет задачи машинного обучения на ускоритель), но группа исследователей за несколько дней разобрала весь программный стек M4 и запустила обучение нейросети на чипе, который Apple проектировала только для инференса (выполнения уже обученной модели, без возможности учиться на новых данных).

Исследователи впервые получили прямой доступ к API ускорителя Apple Neural Engine на чипе M4 без Core ML, измерили реальную пропускную способность и показали, что заявленные Apple «38 TOPS» (триллионов операций в секунду) не отражают практической картины.
Материал основан на первой из трёх статей команды, которая провела реверс-инжиниринг (восстановление внутреннего устройства закрытой системы по её поведению) полного стека Apple Neural Engine в процессоре M4. До этой работы никто публично не демонстрировал ни компиляцию моделей напрямую в памяти ANE на M4, ни замеры производительности без накладных расходов Core ML, ни обучение на ускорителе, рассчитанном только на выполнение. Ниже собраны конкретные шаги, чтобы повторить ключевую часть этого маршрута на своём Mac с чипом M4.
Что понадобится
- Mac с процессором M4 (MacBook Pro, iMac, Mac Mini на M4, M4 Pro или M4 Max)
- macOS последней версии с установленным Xcode и инструментами командной строки (
xcode-select --install) - Базовое знание Objective-C или Swift, умение работать с терминалом
- Python 3.10+ и библиотека
coremltoolsот Apple (для подготовки моделей) - Примерно 3 часа на первый запуск, включая чтение документации из открытых репозиториев
Пошаговая инструкция
-
Изучите открытые наработки сообщества. Начните с репозитория
hollance/neural-engineна GitHub. Это самый полный на сегодня источник по поведению ANE, поддерживаемым операциям и формату данных. Параллельно посмотритеeiln/ane, драйвер ANE для Linux из проекта Asahi Linux, он помогает понять интерфейс на уровне ядра. -
Обнаружьте закрытые классы фреймворка. В терминале выполните команду, которая покажет все классы и методы Objective-C внутри
AppleNeuralEngine.framework:
dyld_info -objc /System/Library/PrivateFrameworks/AppleNeuralEngine.framework/AppleNeuralEngine
Исследователи нашли более 40 закрытых классов, среди которых ANEClient, ANEModel, ANERequest, ANEIOSurfaceObject, _ANEInMemoryModel.
-
Перехватите обращения Core ML к ANE. Используйте технику method swizzling (подмена реализации метода в рантайме Objective-C), чтобы увидеть, какие вызовы Core ML делает к закрытым фреймворкам ANE. Это покажет реальный конвейер: компиляция, загрузка, выполнение.
-
Подготовьте модель в формате MIL. Создайте простую модель (например, умножение матриц) с помощью
coremltoolsв Python и сохраните её в формате MIL (промежуточное представление модели, которое Apple использует внутри Core ML). -
Скомпилируйте и запустите модель напрямую через
_ANEClient. Вот сокращённая последовательность на Objective-C, которую описали исследователи:
// Получаем подключение к ANE
id client = [_ANEClient sharedConnection];
// Указываем на скомпилированную модель
id model = [_ANEModel modelAtURL:compiledURL key:@"mykey"];
// Компилируем MIL в бинарный формат E5
[client compileModel:model options:@{
@"kANEFModelType": @"kANEFModelMIL",
@"kANEFNetPlistFilenameKey": @"model.mil"
} qos:21 error:&err];
// Загружаем программу на ANE
[client loadModel:model options:@{} qos:21 error:&err];
// Создаём буферы IOSurface для ввода-вывода
IOSurfaceRef surface = IOSurfaceCreate(props);
id wrapped = [_ANEIOSurfaceObject objectWithIOSurface:surface];
// Формируем и выполняем запрос
id req = [_ANERequest requestWithInputs:@[wA, wB]
inputIndices:@[@0, @1]
outputs:@[wOut] outputIndices:@[@0]
weightsBuffer:nil perfStats:nil procedureIndex:@0];
[client evaluateWithModel:model options:@{} request:req qos:21 error:&err];
// Читаем результат
IOSurfaceLock(outSurface, kIOSurfaceLockReadOnly, NULL);
float *data = IOSurfaceGetBaseAddress(outSurface);
- Измерьте реальную производительность. Меняйте размеры матриц, глубину вычислительных графов и количество каналов. Исследователи именно так восстановили аппаратную топологию ANE в M4. Сравните полученные цифры с заявленными Apple «38 TOPS»: по данным авторов, маркетинговое число не отражает реальной пиковой пропускной способности при практических нагрузках.
Что внутри Apple Neural Engine на M4?
ANE (Apple Neural Engine) не похож ни на GPU, ни на CPU. Это ускоритель с фиксированным набором функций: вы передаёте ему скомпилированный вычислительный граф (описание всей нейросети целиком), и он выполняет его как единую операцию. Нельзя послать отдельную команду «умножь эти числа». Только готовую программу от начала до конца.
Apple впервые добавила Neural Engine в процессор A11 в 2017 году, тогда с двумя ядрами. В M4 (кодовое имя H16G) их уже 16. У него глубина очереди 127 запросов, независимое динамическое масштабирование напряжения и частоты (DVFS, чип сам регулирует энергопотребление под нагрузку), а в простое потребление падает до 0 мВт благодаря аппаратному отключению неактивных блоков.
Core ML оказался лишь удобной обёрткой. Класс _ANEClient из AppleNeuralEngine.framework даёт прямой доступ к конвейеру «компиляция, загрузка, выполнение». Для передачи данных используются IOSurface, тот же механизм разделяемой памяти, что и для текстур GPU. Теоретически это позволяет гонять данные между GPU и ANE без лишнего копирования.
Исследователи взяли простую операцию умножения матриц, скомпилировали её в формат E5 через _ANEClient (минуя Core ML) и запустили на ANE чипа M4. Затем меняли размеры входных данных и число каналов, замеряя пропускную способность на каждом шаге. Результат: реальная пиковая производительность отличается от маркетинговых «38 TOPS», которые Apple указывает в характеристиках. Конкретные цифры авторы обещают раскрыть в следующих частях серии. Главное: они подтвердили, что обучение нейросети на ANE возможно, хотя Apple проектировала этот блок исключительно для инференса.
- Пытаться начать без изучения открытых репозиториев. Без
hollance/neural-engineиeiln/aneвы потратите недели на то, что уже описано. Эти проекты экономят десятки часов. - Ожидать стабильного API.
_ANEClientи все связанные классы не документированы Apple. Они могут измениться или исчезнуть в любом обновлении macOS. Это исследовательская работа, а не продакшн-инструмент. - Путать «38 TOPS» с реальной скоростью ваших задач. Маркетинговое число описывает теоретический пик при идеальных условиях. На практике результат зависит от формата данных, размера графа и архитектуры модели.
- Забывать про формат «каналы на первом месте». Apple в своей эталонной реализации трансформеров (
apple/ml-ane-transformers) использует именно такой порядок данных и свёртки 1×1. Игнорирование этого формата резко снижает производительность на ANE. - Работать на чипах старше M4 и ждать тех же результатов. Конкретный код и поведение API описаны для M4 (H16G). На более ранних чипах набор классов и поведение могут отличаться.
Что делать с этим прямо сейчас, по ролям
Автору на Дзене, который пишет про технологии. Тема Apple Neural Engine почти не раскрыта на русском языке. Если у вас Mac на M4, попробуйте воспроизвести хотя бы первый шаг (обнаружение классов через dyld_info) и напишите об этом: такой контент собирает техническую аудиторию, которая привыкла читать только на английском.
Разработчику на Swift или Python, который работает с Core ML. Понимание того, что Core ML является обёрткой над _ANEClient, меняет подход к оптимизации. Вместо подбора параметров вслепую можно замерять реальную производительность на уровне железа и точнее понимать, почему одна модель летает, а другая тормозит.
Предпринимателю в РФ. Mac с M4 продаётся в России, железо доступно. Но вся работа идёт через недокументированные API, это подходит для исследований и прототипов, не для продакшна. Для коммерческих задач машинного обучения в РФ по-прежнему проще опираться на GPU-кластеры или облака с доступными картами.
Эта работа показывает, насколько закрытой остаётся экосистема Apple в области ИИ-железа. Компания продаёт чипы с мощными ускорителями, но не даёт к ним прямого доступа. Энтузиасты вскрывают стек за несколько дней, а Apple молчит. На мой взгляд, это создаёт странную ситуацию: покупатель Mac платит за 16 ядер Apple Neural Engine, но может использовать их только так, как разрешает Core ML. Для тех, кто готов копать, серия из трёх статей (это была первая) станет редким практическим ресурсом. Но честная оговорка: всё, что описано, работает через реверс-инжиниринг закрытых API. Apple может закрыть эти лазейки в следующем обновлении macOS, и весь код перестанет работать.
Следите за выходом второй и третьей частей серии: авторы обещают конкретные цифры производительности и детали обучения модели на ускорителе, который для этого не предназначен. Если у вас M4, команда dyld_info -objc в терминале займёт десять секунд и покажет то, что Apple предпочла бы оставить невидимым.
Хотите больше практических разборов ИИ-инструментов?
Подписывайтесь на dzen.guru, чтобы получать гайды, которые помогают работать с нейросетями на практике, а не в теории.
Подписаться
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
Claude получит невидимые водяные знаки в тексте, но пока неясно, ИИ убирает их или нет
Anthropic объявила о встраивании невидимых водяных знаков в тексты и изображения, которые генерирует Claude, выполняя требования европейского закона об ИИ,…

Нейросети расшифровывают древние языки: как восстановить надпись за минуты вместо месяцев
Нейросети уже восстанавливают утраченные фрагменты древних надписей и проверяют гипотезы учёных за минуты вместо месяцев ручной работы, и этими инструментами…

Ревью кода ИИ от $12 в месяц: какие сервисы снимают 20% нагрузки с команды
Источник содержит обзорную статью об инструментах ИИ-ревью кода, а не новость о раунде финансирования. Формат funding-новости требует конкретной сделки (кто…
Комментарии