Разработчик Кайл Хоуэллс (Kyle Howells) несколько раз за месяц оставался без своего AI-агента по самой глупой причине — падал интернет. Вместо того чтобы материться на провайдера, он собрал кодинг-агента, который целиком живёт у него на ноутбуке и не зависит от облака вообще. А попутно выжал из него +24% скорости одной техникой с аббревиатурой MTP. И вот это последнее — не про красивую цифру в бенчмарке. Это про то, что локальный инференс (inference) на обычном Маке только что перешёл черту «ну, поиграться» и стал пригоден для ежедневной работы. Давайте разберёмся, как именно это собрано и почему я считаю это важной точкой.
Что он собрал
Финальная связка получилась компактной и целиком открытой:
⚙️ llama.cpp, собранный с Metal — движок инференса, который гоняет модель прямо на GPU Apple
⚙️ Gemma 4 26B-A4B в формате GGUF (квантизация UD-Q4_K_XL, ~16 ГБ) — основная модель
⚙️ MTP-черновик в Q8 — та самая «секретная добавка» для ускорения (всего ~1 ГБ сверху)
⚙️ мультимодальный проектор (multimodal projector, файл mmproj) — чтобы агент понимал скриншоты
⚙️ Pi — терминальный кодинг-агент, который всё это оркестрирует через OpenAI-совместимый API
⚙️ железо: Apple M1 Max, 64 ГБ унифицированной памяти (unified memory), macOS 15.7.7
А вот цифры, ради которых всё затевалось:
📈 голый прогон через llama.cpp + Metal — 58,2 токена/с
📈 с MTP-черновиком и тремя черновыми токенами — 72,2 токена/с (+24%)
📈 лучшие сборки на MLX — всего 38–46 токенов/с
📈 Qwen3.6 35B-A3B (умнее в коде, но тяжелее) — 55 токенов/с
Дальше — самое интересное: почему всё это вообще работает.
Почему Мак на это способен и при чём тут память
Чтобы выдать один токен, чип должен прочитать веса модели из памяти. Не «подумать», а буквально протащить миллиарды чисел через шину. На Маке GPU и CPU делят один общий пул памяти — это и есть унифицированная память, — и узкое место тут не математика, а пропускная способность памяти (memory bandwidth): как быстро ты можешь стримить эти веса. Отсюда железное правило локального инференса: всё, что уменьшает число чтений всех весов, напрямую конвертируется в скорость. Запомните эту мысль — на ней держится весь фокус с MTP.
MoE: 26 миллиардов параметров, из которых работают четыре
Обозначение «26B-A4B» расшифровывается просто: модель — это «смесь экспертов» (Mixture of Experts, MoE). Всего в ней 26 миллиардов параметров, но на каждый токен включается только около 4 миллиардов («A4B» = active 4B). Крошечный роутер на каждом шаге решает, каких «экспертов» позвать под текущий токен.
Платишь ты при этом памятью за все 26 миллиардов — их надо держать загруженными, чтобы роутер мог мгновенно переключаться между экспертами. Именно поэтому для такой модели реально нужно от 32 ГБ памяти и выше, хотя «активная» часть маленькая. Зато читаешь и считаешь на каждый токен только эти 4 миллиарда — отсюда и бодрые 58 токенов/с на ноутбуке, а не на серверной ферме.
Главный трюк: спекулятивное декодирование
Обычная генерация идёт строго по одному токену за проход: чтобы выдать слово, модель целиком «прокручивается» один раз, потом ещё раз, потом ещё. Скучно и последовательно. Спекулятивное декодирование (speculative decoding) ломает эту цепочку.
Маленькая быстрая черновая модель (draft model) дёшево предлагает наугад сразу несколько следующих токенов. Затем большая модель за один проход проверяет всю пачку разом. Совпало с тем, что она сама бы выдала — токены принимаются пакетом; не совпало — лишнее отбрасывается и считается заново.
И вот ключ к пониманию, почему это бесплатный обед: один проход большой модели по железу стоит почти одинаково, читаешь ты в нём один токен или проверяешь пять. Дорогая часть — это вытащить веса из памяти, а сама арифметика поверх них почти ничего не добавляет. На Маке, который упирается именно в память, принятые черновые токены достаются практически даром. Поэтому спекулятивка особенно хорошо «выстреливает» на Apple Silicon, а не на серверных GPU, где запас по вычислениям другой.
Почему MTP — это не обычный черновик
Классическое спекулятивное декодирование требует двух отдельных моделей: большой и отдельно обученной маленькой, которые ещё надо как следует «подружить», иначе черновик угадывает мимо и весь выигрыш испаряется.
MTP (Multi-Token Prediction, предсказание нескольких токенов) идёт изящнее. Черновик здесь — это не отдельная модель, а дополнительная «голова» (head), обученная прямо внутри основной модели и делящая с ней внутренние представления. Из-за этого она по построению хорошо согласована с большой моделью — то есть даёт высокую долю принятых токенов (acceptance rate) — и почти ничего не весит: в Q8 это около гигабайта. Именно поэтому папка с моделью разрослась всего с 16 до 17 ГБ, а не вдвое. Идею многотокенного предсказания заметно популяризировал DeepSeek-V3, обучавший такие модули вместе с основной сетью; теперь этот же приём приехал в llama.cpp как готовый ускоритель «из коробки».
Маленький, но честный нюанс. Unsloth анонсировала ускорение Gemma 4 через MTP «в 1,4–2,2 раза» (а в заголовке и вовсе «2x»). На конкретном M1 Max с этой конкретной задачей вышло 1,24× — даже чуть ниже нижней границы обещанного. Не потому что кто-то приукрасил: выигрыш реально зависит от железа и характера нагрузки. Хорошее напоминание читать пресс-релизы с поправкой на свою машину.
Почему именно три черновых токена
Сколько токенов давать черновику угадывать вперёд — отдельный параметр (--spec-draft-n-max), и Хоуэллс прогнал значения от 1 до 6. Победила тройка (72,2 токена/с), двойка почти не отставала (72,0), а дальше скорость начала падать — на шестёрке аж до 61,2.
Логика такая. Чем больше токенов предлагает черновик, тем больше потенциальный выигрыш — но тем меньше шанс, что верными окажутся все сразу (вероятности перемножаются), и тем больше работы впустую при каждом промахе. Где-то посередине есть «сладкая точка», и на M1 Max это оказалось 3. На другом железе оптимум будет свой — Unsloth прямо советует начинать с 2 и подбирать под себя, а не верить в магическое число.
Сюрприз: llama.cpp обогнал родной для Mac фреймворк MLX
Вот это меня зацепило сильнее всего. MLX — это фреймворк инференса от самой Apple, заточенный под Apple Silicon. Казалось бы, он и должен быть быстрейшим на маковском железе. Но в тесте llama.cpp обошёл MLX даже без всяких трюков (58 против 38–46 токенов/с), а с MTP оторвался уже неприлично.
Хоуэллс объясняет это годами вылизывания llama.cpp под Metal — и тем, что у проверенных MLX-сборок попросту не было аналогичного MTP-пути, так что сравнение шло «движок с ускорителем против движка без». Урок простой и полезный: «родной» не всегда значит «быстрый». Зрелость и сообщество иногда бьют формальное преимущество платформы.
Скриншоты в придачу
Для фронтенд-задач возможность показать модели картинку — это золото: скинул кривую вёрстку, попросил починить, не описывая словами каждый отступ. Чтобы это заработало, нужен мультимодальный проектор mmproj — отдельный файл, который «переводит» изображение в понятные модели токены (нативно мультимодальна в семействе только 12B-версия, остальным проектор подгружают отдельно).
Важная деталь: после подключения проектора скорость текстовой генерации не просела — те же ~72 токена/с. Проектор занимает место в памяти и включается в работу только когда вы реально отправляете картинку, а на чистую генерацию текста накладных расходов не вешает.
Моё мнение: почему это больше, чем гайд на выходные
Скорость 58 → 72 — приятная, но не она тут главная новость. Главное — что это первый по-настоящему детальный рецепт, где спекулятивное декодирование разгоняет не абстрактный бенчмарк, а живого кодинг-агента: инструмент, который дёргает вызовы инструментов (tool calls) пачками и где задержка чувствуется кожей при каждом шаге.
И второе — это наглядная иллюстрация того, что я бы назвал текущей «метой» локального инференса. Три приёма, и каждый бьёт по своему узкому месту:
⚙️ MoE урезает объём вычислений на токен — активны 4B из 26B
⚙️ квантизация (Q4) ужимает веса, чтобы они и в память влезли, и читались быстрее
⚙️ MTP + спекулятивка сокращают число «дорогих» проходов через большую модель
Вместе они и превращают 64-гиговый Мак из дорогой игрушки в рабочую лошадку. А на практике это даёт вещи, которые облако не предложит в принципе:
🔒 код не покидает машину — ноль утечек, никаких чужих серверов, что критично для проприетарных проектов
✈️ работает офлайн — хоть в самолёте, хоть при упавшем интернете (с чего всё и началось)
💸 ни подписок, ни лимитов на токены — стек открытый, плати только за электричество
🔧 OpenAI-совместимый API — втыкается в любой инструмент, который умеет ходить в OpenAI-эндпоинт
Но давайте честно, без сектантских восторгов. Продавать это как «замену облаку для всего» я бы не стал:
⚠️ 26B-A4B в Q4 всё ещё заметно слабее фронтирных облачных моделей — для по-настоящему сложных задач разрыв чувствуется
⚠️ маленькие модели хуже стабильно вызывают инструменты, а агенту это жизненно важно: на практике приходится подпирать их аккуратными схемами инструментов и промптами
⚠️ 72 токена/с — комфортно для диалога, но при «болтливом» агенте с десятком вызовов подряд этого временами не хватает
⚠️ выигрыш MTP сильно зависит от железа: то, что дало 24% на M1 Max, на вашей машине даст другое число — мерьте сами
Отдельно отмечу красивый знак зрелости экосистемы: у Хоуэллса появился реальный выбор между Gemma 4 (быстрее, 72 ток/с) и Qwen3.6 (умнее в коде, но 55 ток/с). Ещё пару лет назад «локальная модель» означала «бери что дают и радуйся». Теперь это инженерный компромисс между скоростью и качеством, который вы настраиваете под задачу.
Что дальше
Мой прогноз по направлению движения:
🔮 MTP и спекулятивное декодирование станут включёнными по умолчанию — слишком уж дешёвый прирост, чтобы его не раздавать всем подряд
🔮 MLX догонит: Apple вряд ли будет долго терпеть, что её обходят на её же кремнии, так что MTP-путь там появится
🔮 формула «твой ноутбук — твой инференс-сервер» станет нормой для приватной разработки, особенно в регулируемых индустриях и там, где интернет ненадёжен
🔮 разрыв с фронтиром никуда не денется, но круг задач, где локальной 26B-A4B просто хватает, будет расширяться месяц за месяцем
История Хоуэллса началась с банального упавшего интернета, а закончилась рабочим агентом, который не зависит ни от чьих серверов, лимитов и подписок. И это, пожалуй, лучшая иллюстрация того, куда сейчас дрейфует индустрия: не «облако против локали», а тихое возвращение контроля на устройство — без потери удобства. Достаньте Мак с 32+ ГБ памяти и 17 ГБ свободного места — и попробуйте сами. Рецепт уже написан.
Источники
Оригинал и репост:
- Гайд Кайла Хоуэллса (первоисточник): https://ikyle.me/blog/2026/how-to-setup-a-local-coding-agent-on-macos
- Перевод на Telegraph: https://telegra.ph/Lokalnyj-AI-koder-na-macOS-kak-ya-razognal-Gemma-4-do-72-tokenovs-i-zabyl-pro-oblaka-06-12
Технический контекст, использованный в статье:
- Анонс ускорения Gemma 4 через MTP (Unsloth): https://x.com/UnslothAI/status/2065107734916432189
- Документация Unsloth по MTP-моделям: https://unsloth.ai/docs/models/mtp
- Документация Unsloth по Gemma 4: https://unsloth.ai/docs/models/gemma-4
- Документация Unsloth по Qwen3.6: https://unsloth.ai/docs/models/qwen3.6
- llama.cpp (движок инференса): https://github.com/ggml-org/llama.cpp
- Pi (кодинг-агент): https://github.com/earendil-works/pi
- Анонс Gemma 4 12B (Google): https://blog.google/innovation-and-ai/technology/developers-tools/introducing-gemma-4-12b/
- GGUF-сборка Gemma 4 26B-A4B (Hugging Face): https://huggingface.co/unsloth/gemma-4-26B-A4B-it-GGUF
- GGUF-сборка Qwen3.6 35B-A3B (Hugging Face): https://huggingface.co/unsloth/Qwen3.6-35B-A3B-MTP-GGUF