Локальные модели на Mac

Введение

Запуск больших языковых моделей (LLM) локально на Mac стал реальностью благодаря Apple Silicon с унифицированной памятью. Два основных движка — llama.cpp и MLX — позволяют разворачивать модели размером от 7B до 70B+ параметров прямо на вашем MacBook, без облачных сервисов и без платы за токены.

llama.cpp

llama.cpp — кроссплатформенный C++ движок для инференса LLM. Поддерживает формат моделей GGUF и использует Metal API для ускорения на GPU Apple Silicon.

Установка

Установите через Homebrew:

brew install llama.cpp

Скачивание модели

Используйте huggingface-cli для загрузки квантованных моделей:

huggingface-cli download unsloth/Qwen3.5-9B-GGUF Qwen3.5-9B-Q4_K_M.gguf --local-dir ~/models

Запуск сервера

Старт сервера с оптимальными параметрами:

llama-server -m ~/models/Qwen3.5-9B-Q4_K_M.gguf -ngl 99 -c 131072 -np 1 -fa on --cache-type-k q4_0 --cache-type-v q4_0 --host 0.0.0.0

Ключевые флаги

  • -ngl 99 — выгрузка всех слоёв на GPU (Metal)
  • -c 131072 — размер контекстного окна (128K токенов)
  • -np 1 — одно параллельное слот (для одного пользователя)
  • -fa on — Flash Attention, снижает потребление памяти
  • --cache-type-k/v q4_0 — квантование KV-кеша до 4 бит (экономия ~75% памяти)

Оптимизация памяти

Квантование KV-кеша — важнейшая оптимизация для систем с ограниченной памятью. На 128K контексте и модели 9B:

  • f16 (по умолчанию): ~16 ГБ на KV-кеш
  • q8_0: ~8 ГБ
  • q4_0: ~4 ГБ

На Mac с 8 ГБ памяти используйте q4_0 и сократите контекст до -c 32768. На 16 ГБ — комфортная работа с 128K. На 32 ГБ+ можно запускать более крупные модели.

MLX (omlx)

MLX — собственный фреймворк Apple для машинного обучения, оптимизированный под архитектуру унифицированной памяти Apple Silicon. omlx — macOS-приложение для управления и развёртывания MLX-моделей с встроенным OpenAI-совместимым сервером.

Установка

Скачайте с omlx.ai — приложение предоставляет GUI для управления моделями и встроенный сервер.

Запуск

omlx по умолчанию слушает на http://127.0.0.1:8000. Найдите модель Qwen3.5-9B-mlx-lm-mxfp4 через интерфейс приложения и загрузите её.

Бенчмарки на Apple Silicon

Тестирование проводилось на Apple M5 Max, 128 ГБ унифицированной памяти с моделью Qwen3.5-9B. Квантование: Q4_K_M (GGUF) и mxfp4 (MLX).

Результаты

  • TTFT (первый токен): llama.cpp — 67 мс, MLX — 289 мс. llama.cpp быстрее в 4.3 раза
  • Генерация (средняя): llama.cpp — 70 tok/s, MLX — 96 tok/s. MLX быстрее на 37%
  • Общее время (512 токенов): llama.cpp — 7.3 с, MLX — 5.5 с. MLX быстрее на 25%

Что выбрать?

  • Интерактивный чат, низкая задержка → llama.cpp (первый токен за ~67 мс)
  • Длинные тексты, пакетная обработка → MLX (генерация на 37% быстрее)
  • Ограниченная память (8–16 ГБ) → llama.cpp (квантованный KV-кеш незаменим)
  • Несколько моделей одновременно → omlx (встроенная поддержка)
  • Кроссплатформенность (Linux) → llama.cpp

Подключение к Hermes

После запуска локального сервера выполните hermes model, выберите Custom endpoint и укажите URL и имя модели. Hermes автоматически определяет локальные эндпоинты и увеличивает таймауты стриминга — дополнительная настройка не требуется.

Конфигурация локальных моделей

Hermes подключается к локальным моделям через параметр model.base_url в config.yaml. Это позволяет использовать любые OpenAI-совместимые серверы — llama.cpp, omlx (MLX), LM Studio, Ollama и другие.

Через интерактивный мастер

hermes model → выберите Custom endpoint → укажите URL локального сервера и имя модели.

Через конфиг

В ~/.hermes/config.yaml (или профильном config.yaml):

model:
  default: qwen3.5-9b
  base_url: http://127.0.0.1:8080/v1
  api_key: not-needed

Для omlx (MLX) адрес по умолчанию: http://127.0.0.1:8000/v1. Для llama.cpp: http://127.0.0.1:8080/v1.

Локальный TTS — NeuTTS

NeuTTS — полностью бесплатный локальный TTS-движок. Работает без API-ключей, без облачных сервисов. Поддерживает多种 голосов и языков через espeak-ng.

Установка

pip install neutts[all]
brew install espeak-ng

Настройка в Hermes

В config.yaml:

tts:
  provider: neutts

Альтернативно: hermes config set tts.provider neutts

Использование

После установки NeuTTS автоматически используется для озвучивания сообщений. Команды: /voice tts (всегда голосовые ответы), /voice on (голос-в-голос), /voice off.

Локальный STT — faster-whisper

faster-whisper — бесплатный локальный движок распознавания речи на базе OpenAI Whisper. Работает полностью офлайн, без API-ключей.

Установка

pip install faster-whisper

Настройка в Hermes

В config.yaml:

stt:
  enabled: true
  provider: local
  local:
    model: base

Альтернативно: hermes config set stt.provider local

Модели

Доступные размеры моделей (больше = точнее, но медленнее):

  • tiny — самая быстрая, базовая точность
  • base — хороший баланс скорости и качества (рекомендуется)
  • small — лучшее качество, умеренная скорость
  • medium — высокое качество
  • large-v3 — максимальное качество, требует больше ресурсов

На Mac с Apple Silicon модели автоматически используют Metal для ускорения.

Terminal backend на macOS

Hermes поддерживает несколько backend’ов для выполнения терминальных команд. На macOS используйте local backend — он запускает команды непосредственно в системном shell.

Настройка

В config.yaml:

terminal:
  backend: local
  cwd: /path/to/workspace

Доступные backend’ы:

  • local — запуск команд в локальном shell (по умолчанию, рекомендуется для macOS)
  • docker — изолированное выполнение в Docker-контейнере
  • ssh — удалённое выполнение через SSH
  • modal — серверлесс-выполнение на Modal

На macOS local backend использует системный shell и автоматически находит пути к Homebrew, Python и другим инструментам.

Провайдеры с поддержкой локальных моделей

Помимо прямого подключения через base_url, несколько провайдеров Hermes поддерживают локальные модели:

  • Custom endpoint — любой OpenAI-совместимый сервер (llama.cpp, omlx, Ollama, LM Studio)
  • LM Studio — встроенный сервер на http://127.0.0.1:1234/v1
  • Ollama — запуск моделей через ollama serve, API на http://127.0.0.1:11434/v1

Все локальные провайдеры работают без API-ключей — полная приватность и отсутствие платы за токены.