Přeskočit na hlavní obsah

MLX LM na Apple Silicon

Libre WebUI obsahuje plugin MLX LM (Apple Silicon) pro přímé spouštění jazykových modelů ve formátu MLX na Macu řady M. Plugin se připojuje k HTTP API kompatibilnímu s OpenAI, které je součástí MLX LM. Tato cesta nabízí nativní inferenci Metal bez převodu checkpointu MLX na Ollama nebo GGUF.

Architektura

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

Port 8081 je záměrný. MLX LM obvykle používá 8080, který koliduje se serverem zabaleného npx libre-webui.

Požadavky

  • Mac s Apple Silicon (M1 nebo novější).
  • macOS s dostupnými nástroji příkazové řádky Xcode.
  • Python 3.10 nebo novější.
  • Dostatek sdílené paměti pro model, KV cache a macOS.
  • Libre WebUI spuštěné nativně. Vývoj ze zdrojů je nejjednodušší, protože oba backendy mohou použít loopback Macu.

Výchozí model Ternary Bonsai zabírá přibližně 8,5 GB na disku a za běhu potřebuje více paměti. Mac se 16 GB zvládne kratší kontexty, ale 24 GB a více poskytuje praktickou rezervu. Při nedostatku paměti použijte menší checkpoint MLX a přidejte jeho repository ID do kopie definice pluginu.

Instalace MLX LM

Použití uv oddělí příkaz od balíčků Pythonu z Homebrew:

brew install uv
uv tool install --upgrade mlx-lm
rehash
mlx_lm.server --help

Pokud nástroj již existuje:

uv tool upgrade mlx-lm
rehash

Modely Qwen 3.5 vyžadují mlx-lm 0.30.7 nebo novější; příklad repository vyžaduje 0.31.3 nebo novější.

Spuštění serveru

Pro 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"

Při prvním běhu se model stáhne z Hugging Face, později se použije místní cache. Ternary Bonsai deklaruje maximum 262144 pozic. Prompt a generovaný výstup sdílejí kontextové okno, takže dlouhý prompt snižuje počet generovatelných tokenů, i když limit serveru odpovídá maximu modelu.

Menší startovní model:

mlx_lm.server \
--model "mlx-community/Llama-3.2-3B-Instruct-4bit" \
--host 127.0.0.1 \
--port 8081 \
--max-tokens 2048

Repository obsahuje znovu použitelný spouštěč:

cd examples/mlx-lm-server
uv run server.py

Zobrazení vyřešeného příkazu bez načtení modelu:

uv run server.py --dry-run

Ověření API kompatibilního s OpenAI

Zkontrolujte zdraví a discovery modelů:

curl http://127.0.0.1:8081/health
curl http://127.0.0.1:8081/v1/models

Odešlete nestreamovaný chatový požadavek:

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 podporuje také streamované Server-Sent Events při "stream": true.

Připojení Libre WebUI

Z kořene repository Libre WebUI:

npm install
npm run dev

Otevřete http://localhost:5173 a:

  1. Otevřete Settings > Plugins.
  2. Najděte MLX LM (Apple Silicon).
  3. Ověřte endpoint http://127.0.0.1:8081/v1/chat/completions.
  4. Plugin aktivujte; místní MLX nevyžaduje API klíč.
  5. Vraťte se do Chat a vyberte model MLX.

Vestavěný seznam obsahuje prism-ml/Ternary-Bonsai-27B-mlx-2bit. Model vybraný v Libre WebUI se musí shodovat s modelem serveru MLX. Pro jiný checkpoint exportujte nebo zkopírujte plugins/mlx-lm.json, přidejte repository ID do model_map a upravenou definici importujte přes Settings > Plugins.

Nastavení generování

NastaveníHodnota
Temperature0.7
Top P0.95
Top K20

Libre WebUI posílá temperature a Top P přes plugin. Pro doporučené Top K spusťte server s --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 a volání nástrojů

Plugin MLX se může zobrazit ve Work, protože používá chatový formát kompatibilní s OpenAI. Použijte jej pouze tehdy, když model a jeho chat template spolehlivě podporují volání nástrojů ve stylu OpenAI. Fungující běžný text v Chat nedokazuje podporu nástrojů.

Parsery nástrojů a šablony modelů se rychle mění. Při poškozených voláních aktualizujte mlx-lm, otestujte stejný požadavek přímo proti serveru a vyberte model, jehož karta MLX podporu nástrojů výslovně dokumentuje.

Síť Dockeru

Doporučuje se nativní vývoj Libre WebUI; kontejner se nedostane k 127.0.0.1 Macu. Pokud Libre WebUI běží v Dockeru:

  1. Spusťte MLX LM s --host 0.0.0.0.
  2. Jako endpoint použijte soukromou LAN adresu Macu, například http://192.168.1.20:8081/v1/chat/completions.
  3. Port 8081 povolte pouze v důvěryhodných místních sítích.

mlx_lm.server nevystavujte přímo veřejnému internetu. Je určen jako místní server pouze se základními bezpečnostními kontrolami; pro jiné nasazení před něj umístěte ověřenou HTTPS reverse proxy.

Řešení problémů

Model type qwen3_5 not supported

Používá se starší spouštěč:

rehash
which -a mlx_lm.server
uv tool upgrade mlx-lm

Libre WebUI model zobrazuje, ale požadavky selhávají

Ověřte stejné model ID přímo:

curl http://127.0.0.1:8081/v1/models

Poté potvrďte, že endpoint pluginu obsahuje /v1/chat/completions.

Adresa je již používána

mlx_lm.server --model "owner/model" --port 8082

Změňte endpoint na http://127.0.0.1:8082/v1/chat/completions.

První požadavek je pomalý Počáteční načtení a prompt prefill jsou dražší než generování po tokenech. Sledujte tlak paměti a při swapování macOS zvolte menší model nebo kratší konverzaci.

Související dokumentace