Zum Hauptinhalt springen

MLX LM auf Apple Silicon

Das Plugin MLX LM (Apple Silicon) führt MLX-Sprachmodelle direkt auf einem M-Mac aus und verbindet sich mit der OpenAI-kompatiblen HTTP-API von MLX LM. So ist native Metal-Inferenz ohne Konvertierung zu Ollama oder GGUF möglich.

Architektur

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 vermeidet den Konflikt mit npx libre-webui auf 8080.

Voraussetzungen

  • Apple-Silicon-Mac, Xcode-CLI, Python 3.10+.
  • Genügend Unified Memory für Modell, KV-Cache und macOS.
  • Nativ laufendes Libre WebUI; damit nutzen beide Loopback.

Ternary Bonsai belegt etwa 8.5 GB auf dem Datenträger und mehr im Betrieb. 16 GB reichen für kurze Kontexte, 24 GB+ bieten Spielraum. Bei Bedarf kleineres MLX-Checkpoint in eine kopierte Plugindefinition eintragen.

MLX LM installieren

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

Qwen 3.5 benötigt mlx-lm 0.30.7+, das Repository-Beispiel 0.31.3+.

Server starten

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"

Der erste Start lädt von Hugging Face, danach gilt der Cache. Prompt und Ausgabe teilen 262144 Positionen; ein langer Prompt senkt die mögliche Ausgabe trotz Modellmaximum.

Kleineres Modell:

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-kompatible API prüfen

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
}'

Bei "stream": true werden Server-Sent Events unterstützt.

Libre WebUI verbinden

npm install
npm run dev

Öffne http://localhost:5173, dann Einstellungen > Plugins, MLX LM (Apple Silicon), prüfe http://127.0.0.1:8081/v1/chat/completions, aktiviere ohne API-Schlüssel und wähle das Modell.

Enthalten:

  • prism-ml/Ternary-Bonsai-27B-mlx-2bit

Für andere Checkpoints plugins/mlx-lm.json kopieren/exportieren, ID zu model_map hinzufügen und importieren.

Generierungseinstellungen

EinstellungWert
Temperatur0.7
Top P0.95
Top K20

Starte den Server mit --top-k 20, um die Top-K-Empfehlung zu verwenden.

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 und Tool-Aufrufe

Das Plugin erscheint wegen des OpenAI-Chatformats in Work. Nutze es nur mit Modell und Template, die Tool-Aufrufe zuverlässig unterstützen; Textgenerierung beweist dies nicht. Bei fehlerhaften Aufrufen mlx-lm aktualisieren, direkt testen und ein Modell mit dokumentierter Tool-Nutzung wählen.

Docker-Netzwerk

Container erreichen Mac-127.0.0.1 nicht. Starte mit --host 0.0.0.0, nutze etwa http://192.168.1.20:8081/v1/chat/completions und erlaube 8081 nur vertrauenswürdigen Netzen. Exponiere mlx_lm.server nie direkt öffentlich; verwende einen authentifizierten HTTPS-Proxy.

Fehlerbehebung

Model type qwen3_5 not supported

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

Modell sichtbar, Anfragen fehlerhaft

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

Endpunkt muss /v1/chat/completions enthalten.

Adresse belegt

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

Nutze http://127.0.0.1:8082/v1/chat/completions.

Erste Anfrage langsam — Laden und Prefill sind teuer; beobachte Speicherdruck und wähle kleineres Modell/Kontext.

Verwandte Dokumentation