Как я перестал выбирать между удобством и контролем при запуске LLM на Mac
Знакомая ситуация: хочется покрутить новую модельку локально, но каждый раз это превращается в квест. Либо ты ставишь тяжеловесное приложение «всё в одном», которое съедает всю память и не дает ничего настроить, либо возишься с консольными скриптами, пытаясь подружить зависимости и веса.
Недавно наткнулся на проект oMLX, который пытается усидеть на двух стульях. Это сервер для инференса больших языковых моделей, заточенный под Apple Silicon. Он дает интерфейс в трее macOS, но при этом под капотом у него взрослые оптимизации вроде непрерывного батчинга и хитрого кэширования.
Что это вообще такое
Если коротко, oMLX — это обертка над библиотекой MLX от Apple, которая превращает ваш Mac в полноценный сервер для нейросетей. Автор проекта, разработчик под ником jundot, явно вдохновлялся vLLM. Он хотел инструмент, который позволит «приколотить» любимые модели в памяти, автоматически подгружать тяжелые веса по запросу и при этом не лезть в терминал каждый раз, когда нужно сменить контекст.
Проект поддерживает не только текстовые модели, но и зрение (VLM), OCR и даже эмбеддинги. Всё это работает через API, совместимый с OpenAI и Anthropic, так что его легко подцепить к любому привычному клиенту или IDE.
Двухуровневый кэш и другие фишки
Самое интересное здесь скрыто в управлении памятью. В oMLX реализовали концепцию Hot и Cold кэша для KV-блоков.
- Hot tier (RAM): то, что используется прямо сейчас, лежит в оперативной памяти для мгновенного доступа.
- Cold tier (SSD): когда память заканчивается, блоки сбрасываются на диск в формате safetensors.
Когда вы возвращаетесь к старому диалогу, сервер не пересчитывает весь контекст с нуля, а подтягивает его с SSD. Это критично, если вы используете локальные модели для работы с кодом (например, через Claude Code), где контекст может раздуваться до огромных размеров.
Еще пара моментов, которые зацепили:
- Continuous Batching: сервер умеет обрабатывать несколько запросов одновременно, эффективно распределяя ресурсы.
- Умное вытеснение (LRU): если вы запустили новую модель, а памяти не хватает, oMLX сам выгрузит ту, которой вы дольше всего не пользовались.
- Pinning: можно закрепить конкретную модель в памяти, чтобы она всегда была готова к работе.
Как это выглядит в работе
У проекта есть нативное приложение для macOS (на PyObjC, никакого Electron, что радует). После установки в менюбаре появляется иконка, через которую можно мониторить нагрузку и управлять сервером.
Для тех, кто предпочитает веб-интерфейс, есть админка по адресу /admin. Там можно скачивать модели прямо с HuggingFace в один клик, настраивать параметры сэмплинга для каждой модели отдельно и даже прогонять бенчмарки, чтобы понять, сколько токенов в секунду выдает ваша «прошка» или «эйр».
Техническая сторона вопроса
Под капотом связка из FastAPI и движков на базе mlx-lm и mlx-vlm. Архитектура довольно прозрачная: есть пул движков, планировщик запросов и менеджер памяти, который следит, чтобы система не ушла в OOM (Out of Memory). По умолчанию лимит стоит на уровне «вся RAM минус 8 ГБ», но это настраивается.
Интересно реализована поддержка инструментов (Tool Calling). Сервер умеет распознавать форматы вызова функций для целого зоопарка моделей: от Llama и Qwen до специфичных Kimi или Mistral.
Кому стоит попробовать
Если у вас Mac на M1/M2/M3/M4 с macOS 15.0+ и вы устали от того, что локальные LLM либо слишком сложные в настройке, либо слишком ограничены в возможностях, oMLX выглядит как отличный «средний путь».
Он особенно хорош для:
- Разработчиков, которым нужен стабильный локальный бэкенд для автодополнения кода.
- Тех, кто экспериментирует с разными моделями и не хочет вручную чистить кэш и память.
- Любителей визуального контроля — админка и дашборд в трее действительно экономят время.
Проект активно развивается, и хотя в нем еще хватает открытых issue, база выглядит очень солидно. Установить можно через обычный .dmg или через brew:
brew tap jundot/omlx https://github.com/jundot/omlx
brew install omlx
brew services start omlx
Пожалуй, это одно из самых вменяемых решений для тех, кто хочет выжать максимум из железа Apple Silicon, не превращаясь при этом в системного администратора нейросетей.
