Локальный LLM-сервер на Mac mini M4 Pro с 48 ГБ оперативной памяти обслуживает всё — от бэкенда агента Hermes до быстрых чат-запросов с телефона. Настройка всей связки занимает около 30 минут.

Стек выглядит так:

  • Qwen3.6-35B-A3B-OptiQ-4bit: основная модель для задач, требующих рассуждений и глубины
  • Gemma-4-E4B-it-OptiQ-4bit: лёгкая модель для простых чатов, форматирования и рутинных задач
  • oMLX: сервер инференса
  • Tailscale: tailnet, связывающий Mac mini, iPhone и MacBook

Hermes работает как бэкенд агента на Mac mini, при этом на MacBook запущен десктопный клиент, а на телефоне — Telegram. Для остальных задач используется Apollo на iOS для быстрых чатов (по ощущениям похож на Claude, хорош для одноразовых вопросов), Pi в роли агента для кодинга (об этой настройке уже писали ранее), а также Raycast AI на Mac для разных мелких задач.

Зачем вообще этим заниматься?

Главная причина запускать модели локально: облачные API — это арендованная земля. Провайдер может в любой момент изменить цены, урезать лимиты использования или подменить модель, работающую за фасадом сервиса. Регулярно приходилось упираться в лимиты двух подписок по $200 в месяц, и складывалось ощущение, что в разное время эти сервисы отдают разное качество — иногда модель работала нормально, иногда деградировала без всякого предупреждения.

Приватность данных — ещё одна проблема. Неизвестно, что компании делают с переданными данными: могут ограничить их использование, могут продать, могут случайно раскрыть. В любом случае это создаёт риск для операционной безопасности. Если работа связана с чувствительным кодом, данными клиентов или закрытыми процессами, отправка их в стороннее API — это решение, которое принимается один раз и которое нельзя отменить.

Есть и вопрос технологического суверенитета. Правительство США неоднократно ограничивало доступность различных моделей. Такое может произойти в любой момент по инициативе любого правительства и по любой причине, и повлиять на это невозможно. Если рабочий процесс завязан на облачную модель, доступ к которой внезапно ограничат, придётся либо останавливаться, либо экстренно искать замену. Единственный способ избежать этого — владеть собственными вычислительными мощностями.

Другие практические плюсы:

  • Предсказуемость затрат. Стоимость API переменная: вырос трафик — вырос счёт. С локальным железом расходы — это разовая покупка оборудования плюс электричество. Фиксированная сумма, а дальше каждый инференс бесплатен.
  • Задержка. Отсутствие сетевого round-trip даёт более быстрый отклик на повседневных задачах. Медиадвижок M4 Pro обрабатывает инференс со скоростью, которая для большинства промптов ощущается мгновенной.
  • Работа офлайн. Нет интернета — всё равно работает. Для фоновых агентных процессов это важнее, чем кажется на первый взгляд.
  • Отсутствие лимитов запросов. Провайдеры API душат троттлингом при превышении порогов использования. Собственной машине всё равно, сколько запросов выполнять.

Как это используется на практике

Mac mini включён постоянно. Стоит на столе, и о его существовании почти не вспоминаешь — кроме моментов, когда он нужен.

Hermes также работает на Mac mini, используя локальную модель на той же машине. Доступ к агенту идёт через Telegram на телефоне и десктопное приложение Hermes на MacBook. Десктопное приложение Hermes выступает в роли «оболочки» и подключается к бэкенду Hermes на другом устройстве (в данном случае — на Mac mini). Это значит, что бэкенд, история переписки и набор навыков общие для всех устройств.

Дальше идёт всё остальное:

  • Apollo на iOS — для быстрых одноразовых чатов. Нужно что-то, что по ощущениям похоже на Claude, но не требует API-ключа или подписки. Подключаете Apollo к http://[mac-mini-tailnet-url]/v1 — и готово. Хорошо подходит для запросов вида «перепиши этот абзац» или «что означает эта ошибка».
  • Raycast на Mac — для разных мелочей, ради которых не хочется ничего отдельно устанавливать.
  • Pi для кодинга. Об этой настройке уже писали ранее.

Задача не в том, чтобы заменить модели на базе API. Она в том, чтобы закрыть 80% запросов, для которых не нужны GPT-5 или Claude Opus. А когда они всё же нужны, они всегда под рукой. Локальные модели просто бесплатно покрывают большую часть повседневных задач.

Разбор моделей

Запуск большой модели локально сводится к одному вопросу: сколько оперативной памяти она реально занимает. Многие смотрят на количество параметров и делают неверные выводы, потому что разница между плотными (dense) моделями и моделями типа mixture-of-experts (MoE) на потребительском железе имеет огромное значение.

Вот как читается идентификатор модели:

Qwen3.6-35B-A3B-OptiQ-4bit

  • Qwen3.6: семейство модели и версия
  • 35B: суммарное число параметров по всем экспертам
  • A3B: активные параметры на токен (3 миллиарда, а не 35)
  • OptiQ-4bit: смешанная квантизация (в основном 4-bit, на чувствительных слоях — 8-bit)

gemma-4-e4b-it-4bit

  • gemma-4: семейство Gemma 4 от Google
  • e4b: размер кодирования, примерно 4 миллиарда параметров суммарно
  • it: instruction-tuned, дообучена на инструкциях
  • 4bit: равномерная 4-битная квантизация

Ключевое отличие — часть A3B. У плотной модели на 27B параметров все 27 миллиардов параметров загружены в память постоянно, для каждого токена. У MoE-модели вроде Qwen3.6-35B-A3B суммарно 35 миллиардов параметров, распределённых между 256 экспертами, но на каждый токен активируется лишь около 3 миллиардов. Остальные 32 миллиарда просто занимают память, ничего не делая.

На Mac mini с 48 ГБ памяти Qwen3.6-35B-A3B в 4-битной квантизации занимает около 20 ГБ. Остаётся 28 ГБ на контекстные окна, операционную систему и всё остальное, что работает на машине. Gemma-4-E4B весит примерно 2,4 ГБ — достаточно мало, чтобы держать её постоянно наготове для простых задач, где полноразмерная 20-гигабайтная модель избыточна.

У знакомого MacBook Air с 16 ГБ памяти. Плотной модели на 27B в 4-битной квантизации нужно примерно 14 ГБ — это буквально вся память машины, за вычетом места под ОС. Поэтому какое-то время всё работает, а потом, когда перестаёт хватать, происходит своппинг на SSD, и всё становится мучительно медленным.

MoE меняет картину. Модель на 35B из примера выше поместилась бы на том же MacBook Air, потому что активны на токен лишь 3B весов, а значит, реальный отпечаток в памяти GPU/медиадвижка сопоставим с тем, что нужно плотной модели на 6B. При этом все 35 миллиардов параметров всё равно лежат в единой памяти (unified memory).

Как проверить, потянет ли ваше железо модель:

  • Сначала посмотрите на размер квантизованного файла. 4-битная модель весит примерно столько гигабайт, сколько у неё миллиардов параметров (35B параметров ≈ 17–20 ГБ, в зависимости от метода квантизации).
  • Вычтите накладные расходы ОС. macOS на Apple Silicon занимает около 6–8 ГБ.
  • Оставьте запас под контекстные окна. Каждые несколько тысяч токенов добавляют мегабайты в KV-кэш. Для длинных диалогов закладывайте 8–16 ГБ сверху.
  • Для MoE-моделей общее число параметров вводит в заблуждение. Важна цифра «активных параметров» — она показывает реальный расход памяти при инференсе.
  • Если модель плюс контекст помещаются в доступную унифицированную память с запасом 10–15%, всё в порядке. Всё, что ближе к пределу, приведёт к своппингу на SSD.

Замена моделей — дело простое

Об этом почему-то мало кто говорит: локальные модели можно менять каждые несколько недель по мере выхода новых. По сути это скачивание файла и перезапуск.

Процесс такой:

  1. Скачать новую модель в ~/models/
  2. oMLX автоматически обнаруживает её в директории с моделями
  3. Выбрать модель в приложении oMLX или перезапустить сервер
  4. Готово

В админ-панели oMLX встроен браузер моделей с HuggingFace: находите модель, нажимаете «скачать». Затем меняете модель в Hermes, Pi, Raycast и Apollo — и всё готово.

Многое из этого делается и через CLI, так что можно подключиться к Mac mini по SSH с любого устройства.

Почему это важно: разрыв между локальными моделями и моделями на API стремительно сокращается. То, что год назад было качеством уровня «сойдёт», сейчас конкурентоспособно для большинства реальных задач. Кодинг, рассуждения, работа с инструментами — вот где это особенно заметно. А 4-битная квантизация от OptiQ на удивление хорошо сохраняет качество: модель 35B-A3B в 4-bit теряет всего 1–2 пункта в большинстве бенчмарков по сравнению с BF16 (16-битная плавающая точка, несжатый эталон). Это приемлемая цена за использование 48 ГБ памяти вместо 70.

Сеть

Tailscale создаёт mesh-сеть между всеми устройствами: Mac mini, iPhone, MacBook — все в одной приватной сети, ничего не торчит наружу в публичный интернет.

Сервер oMLX слушает порт 8000. Подключиться может любое устройство в tailnet. Raycast, Apollo на iOS, десктопное приложение Hermes на MacBook — все обращаются к одному и тому же эндпоинту. Никакого расхождения в конфигурации между устройствами.

Персистентность KV-кэша в oMLX тоже играет важную роль в сетевой настройке. Агенты для кодинга регулярно возвращаются к более ранним фрагментам контекста в рамках сессии. oMLX кэширует каждый блок на SSD, поэтому при возврате к предыдущему префиксу он восстанавливается с диска за миллисекунды вместо повторного пересчёта. Именно это делает локальную настройку по-настоящему практичной для агентных задач — а именно там и живёт Hermes.

Итог

Локальные модели на Apple Silicon больше не побочный эксперимент. Mac mini M4 Pro справляется с этим без напряжения, качества моделей достаточно для большинства задач, и менять их можно когда угодно. Не нужно платить за токены, не нужно прогонять чувствительные данные через сторонние эндпоинты. А когда на следующей неделе выйдет модель получше — попробовать её можно почти без усилий, заплатив лишь местом на диске.

Уже заказан Mac Studio на M5 Max с 128 ГБ памяти, доставка ожидается позже в этом году, но производительность нынешнего Mac mini M4 Pro пока полностью устраивает. Владельцам других устройств на Apple Silicon стоит попробовать такую же настройку — возможно, придётся подобрать модель под свои характеристики, но общий подход остаётся рабочим.