Введение
Запуск больших языковых моделей (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-ключей — полная приватность и отсутствие платы за токены.