MLX LM на Apple Silicon
Libre WebUI включает плагин MLX LM (Apple Silicon) для запуска языковых моделей в формате MLX непосредственно на Mac серии M. Он подключается к совместимому с OpenAI HTTP API, встроенному в MLX LM.
Этот путь полезен для нативного инференса Metal без преобразования контрольной точки MLX в Ollama или GGUF.
Архитектура
Libre WebUI in native development mode
frontend http://localhost:5173
backend http://localhost:3001
|
| OpenAI-compatible chat request
v
mlx_lm.server http://127.0.0.1:8081
|
v
MLX model on Apple Silicon unified memory
Порт 8081 выбран намеренно. MLX LM обычно использует 8080, что конфликтует с пакетным сервером npx libre-webui.
Требования
- Mac с Apple Silicon (M1 или новее).
- macOS с инструментами командной строки Xcode.
- Python 3.10 или новее.
- Достаточно unified memory для модели, KV-кэша и macOS.
- Нативно работающий Libre WebUI. Разработка из исходников проще всего, поскольку оба бэкенда используют loopback Mac.
Модель Ternary Bonsai по умолчанию занимает около 8,5 ГБ на диске и больше при работе. Mac с 16 ГБ unified memory справится с коротким контекстом, но 24 ГБ и больше дают практический запас. При нехватке памяти используйте меньшую контрольную точку MLX и добавьте ID репозитория в копию плагина.
Установка MLX LM
uv изолирует команду от пакетов Homebrew Python:
brew install uv
uv tool install --upgrade mlx-lm
rehash
mlx_lm.server --help
Если инструмент уже установлен:
uv tool upgrade mlx-lm
rehash
Модели Qwen 3.5 требуют mlx-lm 0.30.7 или новее. Пример репозитория требует 0.31.3 или новее.
Запуск сервера
Для Ternary Bonsai:
mlx_lm.server \
--model "prism-ml/Ternary-Bonsai-27B-mlx-2bit" \
--host 127.0.0.1 \
--port 8081 \
--max-tokens 262144 \
--allowed-origins "http://localhost:5173,http://127.0.0.1:5173"
Первый запуск загружает модель с Hugging Face, последующие используют кэш. Ternary Bonsai объявляет максимум 262144 позиций. Промпт и результат делят окно, поэтому длинный промпт сокращает доступную генерацию, хотя лимит сервера равен максимуму модели.
Для меньшей стартовой модели:
mlx_lm.server \
--model "mlx-community/Llama-3.2-3B-Instruct-4bit" \
--host 127.0.0.1 \
--port 8081 \
--max-tokens 2048
В репозитории есть повторно используемый запуск:
cd examples/mlx-lm-server
uv run server.py
Просмотрите разрешённую команду без загрузки модели:
uv run server.py --dry-run
Проверка совместимого с OpenAI API
Проверьте состояние и обнаружение моделей:
curl http://127.0.0.1:8081/health
curl http://127.0.0.1:8081/v1/models
Отправьте нестриминговый запрос чата:
curl http://127.0.0.1:8081/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "prism-ml/Ternary-Bonsai-27B-mlx-2bit",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Reply with: MLX is ready."}
],
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 64,
"stream": false
}'
Сервер также поддерживает Server-Sent Events при "stream": true.
Подключение Libre WebUI
Из корня репозитория Libre WebUI:
npm install
npm run dev
Откройте http://localhost:5173, затем:
- Откройте Settings > Plugins.
- Найдите MLX LM (Apple Silicon).
- Убедитесь, что эндпоинт —
http://127.0.0.1:8081/v1/chat/completions. - Активируйте плагин. Локальному MLX не нужен ключ API.
- Вернитесь в Chat и выберите MLX-модель.
Встроенный список содержит:
prism-ml/Ternary-Bonsai-27B-mlx-2bit
Выбранная в Libre WebUI модель должна быть доступна серверу MLX. Для другой контрольной точки экспортируйте или скопируйте plugins/mlx-lm.json, добавьте ID в model_map и импортируйте определение через Settings > Plugins.
Параметры генерации
Рекомендации Ternary Bonsai:
| Параметр | Значение |
|---|---|
| Temperature | 0.7 |
| Top P | 0.95 |
| Top K | 20 |
Libre WebUI передаёт Temperature и Top P через плагин. Для рекомендуемого Top K запускайте с --top-k 20:
mlx_lm.server \
--model "prism-ml/Ternary-Bonsai-27B-mlx-2bit" \
--host 127.0.0.1 \
--port 8081 \
--top-k 20 \
--max-tokens 262144
Work и вызовы инструментов
Плагин MLX может появиться в Work благодаря формату OpenAI. Выбирайте его лишь тогда, когда модель и шаблон надёжно поддерживают вызовы инструментов. Обычная генерация текста в Chat не доказывает поддержку инструментов.
Парсеры и шаблоны быстро меняются. При некорректных вызовах Work обновите mlx-lm, проверьте запрос напрямую и выберите модель, карточка MLX которой явно документирует инструменты.
Сеть Docker
Рекомендуется нативная разработка Libre WebUI. Контейнер не может достичь 127.0.0.1 Mac.
Если Libre WebUI работает в Docker:
- Запустите MLX LM с
--host 0.0.0.0. - Используйте приватный LAN-адрес Mac, например
http://192.168.1.20:8081/v1/chat/completions. - Разрешите порт
8081только доверенным локальным сетям.
Не открывайте mlx_lm.server публичному интернету. Сопровождающие описывают его как локальный сервер с базовыми проверками. Для нелокального развёртывания поставьте аутентифицированный HTTPS reverse proxy.
Устранение неполадок
Model type qwen3_5 not supported
Используется старый запуск:
rehash
which -a mlx_lm.server
uv tool upgrade mlx-lm
Libre WebUI показывает модель, но запросы не работают
Проверьте тот же ID напрямую:
curl http://127.0.0.1:8081/v1/models
Затем убедитесь, что URL содержит /v1/chat/completions.
Адрес занят
Оставьте Libre WebUI на обычном порту, а MLX перенесите:
mlx_lm.server --model "owner/model" --port 8082
Обновите URL до http://127.0.0.1:8082/v1/chat/completions.
Первый запрос медленный
Начальная загрузка и prefill дороже генерации по токенам. Следите за памятью в Activity Monitor и выбирайте меньшую модель или диалог, если macOS начинает swap.