AI-кодинг на своём Mac: запускаем локально без облака

AI-кодинг на своём Mac: запускаем локально без облака

Июл 09, 2026 local-ai apple-silicon llama-cpp coding-agents gemma macos machine-learning speculative-decoding

Почему стоит попробовать локальный ИИ

Каждый разработчик знает эту ситуацию. Ты в зоне потока, код льётся рекой, и тут — обрыв интернета. Твой облачный ИИ-ассистент становится бесполезным, а ты сидишь и смотришь на экран, не зная, что делать дальше.

Именно это случилось со мной недавно, и я наконец решил разобраться с локальными ИИ-ассистентами для программирования. Результат меня удивил: при правильной настройке можно получить вполне приличную производительность на Apple Silicon, местами даже обгоняя специализированные решения для Mac.

Железо и софт

После множества тестов я остановился на связке, которая показала лучшие результаты на моём M1 Max с 64 гигами unified memory:

Основа:

  • llama.cpp со включённым Metal-ускорением
  • Gemma 4 26B-A4B в формате GGUF (квантизация Q4)
  • MTP (Multi-Token Prediction) — спекулятивная модель для ускорения генерации
  • Мультимодальный проектор Gemma 4 для работы со скриншотами
  • Pi в качестве терминального агента

Конечно, это не самая мощная теоретическая конфигурация. Но это именно тот баланс, при котором скорость измеряется в токенах в секунду, а не в минутах на ответ.

Замеры производительности

Для тестов использовал один и тот же промпт на всех конфигурациях:

«Напиши компактную Python-функцию, которая парсит unified diff и возвращает список изменённых файлов. Затем объясни два крайних случая.»

Каждый прогон генерировал примерно 128 токенов — стандартная выборка для сравнения скорости.

Базовый результат:

Gemma 4 через llama.cpp с Metal выдавала 58,2 токена в секунду. Работать можно, но в реальных сценариях, где ты постоянно ждёшь ответа модели — это ощущалось медленно.

Что даёт MTP:

Вот тут начинается самое интересное. Multi-Token Prediction позволяет модели «предсказывать» несколько токенов вперёд, принимая верные предположения и откатываясь назад при ошибках. С включённой Q8 MTP-моделью скорость подскочила до 72,2 токенов в секунду — прирост 24% без каких-либо изменений в основной модели.

Скорость обработки промпта осталась примерно на том же уровне (297–299 токенов в секунду), но для агентных сценариев важнее именно генерация. Ты же не отправляешь новые промпты каждые пять секунд — ты ждёшь, пока модель сгенерирует ответ, примет решение и выполнит действие.

Я проверял количество черновых токенов от 1 до 6, и на моём M1 Max оптимальное значение — 3. Если ставить 4 и больше, начинается просадка. Логично: чем больше спекуляций, тем больше работы впустую при неверных предсказаниях.

llama.cpp против MLX: неожиданный победитель

Меня ждал сюрприз. Я был уверен, что MLX (родной ML-фреймворк Apple) будет лидировать — всё-таки это оптимизация конкретно под Apple Silicon. Но вышло иначе.

| Среда выполнения | Токенов/сек | |-------------------|-------------| | llama.cpp Metal + MTP | 72,2 | | llama.cpp Metal | 58,2 | | MLX-LM (Unsloth 4-bit) | 45,8 | | MLX-LM (standard 4-bit) | 43,9 | | MLX-LM (OptiQ 4-bit) | 38,1 |

llama.cpp с MTP оказался примерно на 58% быстрее лучшей MLX-конфигурации. Годы оптимизации в llama.cpp сделали своё дело — на macOS он работает отлично, несмотря на кроссплатформенность.

Vision — когда нужны глаза

Для полноценного агента хочется отправлять скриншоты. Показать результат сборки, показать UI-баг, получить оценку вёрстки.

Проблема в том, что мультимодальность нативно есть только у Gemma 4 12B. Наша 26B-модель требует внешний проектор.

Когда я добавил в llama.cpp флаг --mmproj, он корректно сообщил Pi о мультимодальных возможностях, и работа со скриншотами пошла. Что важно — никакого просаживания производительности. Скорость генерации осталась на 72,2 токенах в секунду.

Как это ощущается в деле

Суммарно модели занимают около 17 ГБ: 16 ГБ на основную модель, плюс MTP-головка и проектор. Для 64 гигабайт unified memory — вполне комфортно.

Pi предоставляет чистый терминальный интерфейс, который подключается к OpenAI-совместимому API, который llama.cpp раскрывает в режиме сервера. Это означает, что можно использовать любой инструмент, работающий с форматом OpenAI API. Никакой привязки к конкретному решению.

Главное преимущество? Когда интернет отвалится — а он отвалится, и обязательно в самый неподходящий момент — ты продолжишь работать. Агент будет чуть медленнее облачных альтернатив, но достаточно отзывчивым, чтобы не ломать рабочий процесс.

С чего начать

Тебе понадобится собрать llama.cpp с поддержкой Metal. В проекте отличная документация по сборке на macOS. После компиляции режим сервера даст тебе OpenAI-совместимую конечную точку.

Модели бери с Hugging Face — квантизации от Unsloth хорошо оптимизированы. Основная модель в Q4_K_XL, плюс соответствующая Q8 MTP для спекулятивной генерации.

Настраивай --spec-draft-n-max — начни с 3 и проверь диапазон от 1 до 6. Разные конфигурации Apple Silicon могут иметь свои оптимальные значения.

Стоит ли овчинка выделки?

Если ты регулярно используешь ИИ-помощники для кода и у тебя есть подходящее железо (минимум 16 ГБ, лучше 32+ ГБ) — однозначно да. Независимость от интернета сама по себе многого стоит, а с MTP скорость генерации вышла на уровень, с которым реально работать.

Конечно, до интеллекта GPT-4 класса эти открытые модели не дотягивают. Но для дописывания кода, рефакторинга, отладки и повседневных задач агента — возможностей больше, чем многие ожидают. И это всё работает локально, приватно, без лагов и выключений сервисов.

Инструменты заметно созрели. Если раньше пробовал локальные модели и разочаровался в скорости — дай этому шанс. MTP меняет правила игры.

Read in other languages:

BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN