Чипы Apple M5 аппаратно поддерживают INT8-активации, но популярные бэкенды инференса - MLX и llama.cpp - по умолчанию используют 16-битные активации. Это значит, что формат w4a8 (4-битные веса, 8-битные активации) остаётся невостребованным, а железо недополучает нагрузку. Экспериментальные w8a8-ядра, собранные разработчиком, дают ускорение предзаполнения до 1.4x на задачах Gemma4: на MacBook Air M5 скорость обработки 130 173 токенов выросла с 2193 до 3029 токенов в секунду. На малых контекстах показатель приближается к 10 000 tps.
Разрыв между аппаратными возможностями и софтом - главная тема этого разбора. Мы детально пройдём по архитектурным предпосылкам, техническим причинам отставания бэкендов и практическим результатам кастомной оптимизации. Материал опирается на цифры, конфигурации и воспроизводимые тесты - без маркетинговой воды.
Аппаратный потенциал Apple M5: что скрыто под капотом
Apple M5 - это система на кристалле с интегрированным нейроускорителем, который на уровне железа поддерживает операции с 8-битными целочисленными активациями (INT8). В синтетическом бенчмарке Geekbench 7 чип набирает около 3753 баллов в одноядерном тесте и 18722 балла в многоядерном. Эти цифры - отправная точка для понимания вычислительной базы, но они слабо отражают потенциал в AI-нагрузках.
Предыдущие поколения M-чипов уже включали нейроускорители, однако M5 делает шаг вперёд по пропускной способности и поддержке смешанной точности. Конфигурация MacBook Air 13 2026 M5 - 10C CPU, 16 ГБ унифицированной памяти, 8C GPU, SSD 512 ГБ - становится минимальным порогом для экспериментов с INT8-инференсом. Память здесь общая для CPU и GPU, а это критично для форматов w4a8 и w8a8: снижение разрядности активаций уменьшает объём передаваемых данных и разгружает шину.
Аппаратный потенциал упирается в софтверную реализацию. Чип способен перемножать матрицы с INT8-активациями, но ядра, которые задействуют эту возможность, отсутствуют в стабильных сборках популярных фреймворков. Результат - M5 работает вполсилы на задачах, где INT8 мог бы дать кратный прирост.
Почему MLX и llama.cpp игнорируют INT8: технические и исторические причины
Оба бэкенда - MLX от Apple и llama.cpp с открытым исходным кодом - по умолчанию оперируют 16-битными активациями. Причины разные, но итог общий: формат w4a8, потенциально выгодный для M5, остаётся за бортом. Разберём каждый случай отдельно.
MLX: фокус на универсальность, а не на предельную скорость
MLX проектировался как исследовательский фреймворк с приоритетом гибкости. Он оптимизирован под быструю итерацию экспериментов, а не под выжимание максимума из железа на продакшен-инференсе. Встроенной поддержки INT8-активаций в стабильной версии нет - команда Apple пока не форсирует переход на низкую точность, поскольку это требует переработки значительной части вычислительного графа и валидации точности на широком спектре моделей.
Для исследователя важнее возможность быстро переключаться между моделями и прецизионностями, чем получить 10 000 tps на одном специфичном сценарии. Поэтому MLX продолжает использовать 16-битные активации как компромисс между скоростью и универсальностью. Стоит ожидать, что поддержка INT8 появится сначала в экспериментальных ветках и лишь затем - в мейнстриме.
llama.cpp: сообщество ждёт стабильных INT8-ядер
llama.cpp - главный движок для локального инференса LLM - также по умолчанию держится за 16-битные активации. В сообществе идут обсуждения INT8-ядер, появляются экспериментальные пул-реквесты, но до стабильной поддержки дело не дошло. Причины: консервативный подход к точности, опасения деградации на отдельных архитектурах и нехватка ресурсов на всестороннее тестирование.
Разработчики llama.cpp хорошо понимают ценность w4a8: 4-битные веса уже работают через GGUF-квантование, а 8-битные активации могли бы удвоить пропускную способность матричных умножений. Однако переход требует не просто новых ядер, а пересмотра стратегии управления памятью и диспетчеризации операций. Пока сообщество тестирует кастомные сборки, мейнстрим остаётся на 16 битах.
Экспериментальные w8a8-ядра: как разработчик разогнал предзаполнение Gemma4
Практическое подтверждение потенциала INT8 пришло от независимого разработчика, который собрал кастомные w8a8-ядра и прогнал тесты на MacBook Air M5. Модель - Gemma4, задача - предзаполнение (prefill) контекста из 130 173 токенов. Результат: скорость выросла с 2193 до 3029 токенов в секунду, ускорение составило ~1.38x. На малых контекстах скорость приближалась к 10 000 tps.
Методика тестирования и конфигурация
Тестовая среда - MacBook Air 13 2026 M5 с 10-ядерным CPU, 16 ГБ унифицированной памяти и 8-ядерным GPU. Бэкенд - кастомная сборка с экспериментальными w8a8-ядрами, модель Gemma4. Использовался формат w8a8 (8-битные веса и 8-битные активации), а не w4a8. Это промежуточный шаг: w8a8 проще реализовать и отладить, он даёт значительный прирост без экстремального сжатия весов, которое могло бы сильнее ударить по точности.
Замеры проводились на операции предзаполнения - начальной фазе обработки входного контекста, когда модель «проглатывает» весь промпт перед генерацией первого токена. Именно здесь матричные умножения доминируют над операциями с памятью, и снижение разрядности активаций даёт максимальный эффект.
Почему ускорение заметно именно на предзаполнении
Предзаполнение интенсивно использует матричные умножения - основную операцию, где INT8 даёт двукратное снижение объёма данных по сравнению с FP16. Каждый байт активации теперь несёт 8 бит информации вместо 16, а пропускная способность памяти и вычислительных блоков используется эффективнее. Генерация токенов (decode) упирается в последовательный доступ к памяти и извлечение весов, поэтому эффект от INT8-активаций там скромнее.
Цифры подтверждают теорию: 1.38x на 130K токенов и до 10 000 tps на коротких контекстах. Это практический ориентир для тех, кто оценивает выгоду от перехода на INT8-инференс. Если ваша задача - обработка больших промптов, документов или системных инструкций, выигрыш будет ощутимым.
Что это значит для практиков: когда ждать w4a8 в продакшене
Дорожная карта выглядит так: сначала экспериментальные w8a8-ядра, затем стабилизация и включение в основные ветки MLX и llama.cpp, и только потом - переход к w4a8. Официальных сроков нет, но активность в репозиториях указывает на то, что поддержка INT8-активаций - вопрос месяцев, а не лет.
Для тех, кто хочет поэкспериментировать уже сейчас, путь лежит через форки и кастомные сборки. Нужно быть готовым к нестабильности и ручной настройке. Главное предостережение - возможная потеря точности. INT8-активации чувствительны к распределению значений, и на некоторых моделях деградация перплексии может быть заметной. Перед внедрением в продакшен обязательна валидация на целевых задачах.
Практическая рекомендация: отслеживайте пул-реквесты в llama.cpp, тестируйте экспериментальные ветки MLX и делитесь результатами. Сообщество движется быстрее, когда есть обратная связь с реальных железок. Если вы работаете с большими контекстами - например, обрабатываете документы или логи, - прирост от INT8 окупит усилия по настройке.
Выводы: скрытый резерв Apple Silicon для AI-нагрузок
Apple M5 аппаратно готов к INT8-активациям, а текущие бэкенды инференса - нет. Кастомные w8a8-ядра доказывают: ускорение предзаполнения достигает 1.4x, а на малых контекстах скорость подбирается к 10 000 tps. Это скрытый резерв, который ждёт своего часа в стабильных сборках MLX и llama.cpp.
Следите за обновлениями бэкендов, тестируйте новые возможности и не полагайтесь на стандартные настройки, если задача чувствительна к скорости обработки контекста. Другие материалы AI-MANUAL по оптимизации инференса помогут выжать максимум из доступного железа: от CPU-only инференса на Project Zero до тестов Strix Halo под нагрузкой и разбора узких мест DeepSeek-V4-Flash на B300.