Sari la conținutul principal

MLX LM pe Apple Silicon

Libre WebUI include pluginul MLX LM (Apple Silicon) pentru rularea directă a modelelor MLX pe un Mac din seria M. Acesta se conectează la API-ul HTTP compatibil OpenAI al MLX LM. Ruta oferă inferență Metal nativă fără a converti checkpoint-ul în Ollama sau GGUF.

Arhitectură

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

Portul 8081 este intenționat; portul obișnuit 8080 intră în conflict cu npx libre-webui împachetat.

Cerințe

  • Mac cu Apple Silicon (M1 sau mai nou).
  • macOS cu instrumentele de linie de comandă Xcode.
  • Python 3.10+.
  • Suficientă memorie unificată pentru model, cache-ul KV și macOS.
  • Libre WebUI nativ; dezvoltarea din source este mai simplă deoarece ambele backend-uri folosesc loopback.

Ternary Bonsai ocupă aproximativ 8,5 GB pe disc și necesită mai mult în timpul rulării. 16 GB permit contexte mai mici, iar 24 GB+ oferă rezervă. Dacă memoria este insuficientă, folosiți un checkpoint MLX mai mic și adăugați ID-ul repository-ului într-o copie a pluginului.

Instalarea MLX LM

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

Dacă este deja instalat:

uv tool upgrade mlx-lm
rehash

Qwen 3.5 necesită mlx-lm 0.30.7+, iar exemplul din repository necesită 0.31.3+.

Pornirea serverului

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

Prima rulare descarcă modelul de pe Hugging Face, apoi folosește cache-ul. Ternary Bonsai declară 262144 poziții. Promptul și rezultatul împart contextul, astfel încât un prompt mare reduce tokenii generați în pofida maximului modelului.

Un model inițial mai mic:

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

Launcher reutilizabil:

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

Afișarea comenzii fără încărcare:

uv run server.py --dry-run

Verificarea API-ului compatibil OpenAI

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

Cerere fără streaming:

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

Serverul acceptă Server-Sent Events când "stream": true.

Conectarea Libre WebUI

npm install
npm run dev

Deschideți http://localhost:5173:

  1. Settings > Plugins.
  2. Găsiți MLX LM (Apple Silicon).
  3. Verificați http://127.0.0.1:8081/v1/chat/completions.
  4. Activați pluginul; MLX local nu necesită cheie API.
  5. Selectați modelul MLX în Chat.

Lista integrată conține prism-ml/Ternary-Bonsai-27B-mlx-2bit. Alegerea trebuie să corespundă serverului. Pentru alt checkpoint, copiați sau exportați plugins/mlx-lm.json, adăugați ID-ul în model_map și importați-l din Settings > Plugins.

Setări de generare

SetareValoare
Temperature0.7
Top P0.95
Top K20

Libre WebUI trimite temperature și Top P. Pentru Top K, porniți cu --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 și apelarea instrumentelor

Pluginul apare în Work datorită formatului OpenAI. Folosiți-l numai când modelul și șablonul chat acceptă în mod fiabil apeluri de instrumente; generarea simplă de text nu demonstrează acest lucru. Dacă apelurile sunt deformate, actualizați mlx-lm, testați direct și alegeți un model care documentează suportul pentru instrumente.

Rețea Docker

Este recomandată dezvoltarea nativă; un container nu poate accesa 127.0.0.1 al Mac-ului. Cu Docker:

  1. Porniți MLX LM cu --host 0.0.0.0.
  2. Folosiți o adresă LAN privată precum http://192.168.1.20:8081/v1/chat/completions.
  3. Permiteți portul 8081 numai în rețele de încredere.

Nu expuneți public mlx_lm.server. Este un server local cu verificări de bază; în afara rețelei locale, folosiți un reverse proxy HTTPS autentificat.

Depanare

Model type qwen3_5 not supported

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

Modelul apare, dar cererile eșuează

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

Verificați /v1/chat/completions în endpoint.

Adresa este deja utilizată

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

Schimbați endpoint-ul în http://127.0.0.1:8082/v1/chat/completions.

Prima cerere este lentă. Încărcarea inițială și prefill-ul promptului sunt mai costisitoare decât generarea tokenilor. Urmăriți presiunea asupra memoriei și alegeți un model mai mic sau o conversație mai scurtă dacă macOS folosește swap.

Documentație asociată