Si tenés una Mac con Apple Silicon, estás sentado sobre un servidor de inferencia y quizás no lo sabés. vMLX — github.com/jjang-ai/vmlx, ~860 estrellas y licencia Apache 2.0 — es el motor de inferencia MLX más completo para Mac: un comando sirve cualquier modelo de mlx-community detrás de una API compatible con OpenAI, Anthropic y Ollama.
En esta guía te muestro qué es, cómo funciona su arquitectura de rendimiento en 4 pasos, cómo correrlo en 5 minutos con vmlx serve y — igual de importante — cuándo NO deberías usarlo.
Ficha del Repo
Repo
jjang-ai/vmlx
Estrellas
~860 (Sep 2026)
Licencia
Apache 2.0
Instalación
pip install vmlx
API
OpenAI + Anthropic + Ollama
App
MLX Studio (vmlx.net)
1. Qué Es vMLX (y Qué No Es)
vMLX es un servidor de inferencia self-hosted para LLMs, VLMs y generación de imágenes en Apple Silicon, construido sobre el framework MLX de Apple con aceleración GPU vía Metal. Lo apuntás a cualquier repo de mlx-community en Hugging Face — Qwen, Llama 4, Gemma 4, DeepSeek V4, Kimi, Mistral, Nemotron-3-Omni — y lo sirve en http://localhost:8000 con el mismo formato de OpenAI. Sin nube, sin API keys, nada sale de tu máquina.
Lo que no es: no es un framework de entrenamiento, no es un servidor CUDA y no es multiplataforma. Solo corre en macOS con Apple Silicon (M1–M4) y Python 3.11+. Si tu flota es NVIDIA, lo tuyo es vLLM o SGLang — los comparo en un post relacionado al final.
Un Servidor, Tres APIs
El mismo puerto habla POST /v1/chat/completions (OpenAI), POST /v1/messages (Anthropic) y POST /api/chat (Ollama), además de embeddings, rerank, STT con Whisper y TTS con Kokoro. Apuntá el SDK de OpenAI, Anthropic o la CLI de Ollama sin cambios — hasta OLLAMA_HOST=http://localhost:8080 ollama run funciona vía el gateway del desktop.
2. La Arquitectura en 4 Pasos
Cada request pasa por el mismo pipeline. Entender estas cuatro capas es lo que separa “corre” de “vuelo”:
Paso 1 — Motor nativo MLX
memoria unificada · kernels Metal
El motor Python/FastAPI delega en mlx-lm (texto), mlx-vlm (visión), mflux (generación con Flux) y mlx-audio (voz). Pesos, activaciones y caché KV viven en memoria unificada — sin copias CPU↔GPU.
Paso 2 — Batching continuo
flag: --continuous-batching
Múltiples requests concurrentes comparten un forward pass en vez de hacer cola. Este es el flag que convierte al servidor en multi-usuario en lugar de una demo.
vmlx serve mlx-community/Llama-3.2-3B-Instruct-4bit --continuous-batching
Paso 3 — Caché de 5 capas
prefijos · paged · disco L2 · cuant KV
La caché KV de prefijos/paged en L1 reutiliza el prefill (el proyecto reporta hasta ~9.7x más rápido el primer token con caché, M3 Ultra, Feb 2026); la caché de disco L2 sobrevive reinicios; la cuantización KV q4/q8 comprime lo guardado 2–4x.
vmlx serve mlx-community/Llama-3.2-3B-Instruct-4bit --continuous-batching --enable-prefix-cache --use-paged-cache
Paso 4 — Decodificación rápida
--enable-pld · draft especulativo
Prompt-Lookup Decoding reutiliza n-gramas del prompt — sin modelo draft, ideal para código y JSON. El speculative decoding clásico con un draft chico da speedups de 20–90% en modelos soportados.
vmlx serve mlx-community/Qwen3-8B-4bit --continuous-batching --enable-pld
Los Dos Multiplicadores: JANG + Multi-Mac
JANG mixed-precision adaptativo asigna distintos bits por tipo de capa (atención 8-bit, MLP 2–3 bit) — JANG_3M (~3.2 bits promedio) es el perfil recomendado, y hay modelos pre-cuantizados bajo JANGQ-AI en Hugging Face. Para modelos que exceden una Mac, el pipeline parallelism reparte capas entre máquinas por Thunderbolt/Ethernet: los workers corren vmlx-worker --secret y el coordinador vmlx serve <modelo> --distributed --cluster-secret.
3. Quickstart: De Cero a Servidor en 5 Minutos
Requisitos, verificados en la doc: macOS en Apple Silicon, Python 3.11+, 8 GB de RAM mínimo (16 GB+ recomendado). La instalación tiene tres caminos documentados:
Instalación (elegí UNA — uv es lo recomendado)
# Recomendado: uv (sin lío de venv) brew install uv uv tool install vmlx # O: pipx (aislado del Python del sistema) brew install pipx pipx install vmlx # O: pip dentro de un entorno virtual python3 -m venv ~/.vmlx-env && source ~/.vmlx-env/bin/activate pip install vmlx
Serví tu primer modelo
vmlx serve mlx-community/Qwen3-8B-4bit # Servidor vivo en http://0.0.0.0:8000 (API OpenAI + Anthropic)
Llamalo con el SDK de OpenAI (código sin cambios)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
resp = client.chat.completions.create(
model="local",
messages=[{"role": "user", "content": "¡Hola!"}],
stream=True,
)
for chunk in resp:
print(chunk.choices[0].delta.content or "", end="", flush=True)Cuantizá con JANG (perfil recomendado JANG_3M)
pip install "vmlx[jang]" vmlx convert my-model --jang-profile JANG_3M vmlx serve ./my-model-JANG_3M --continuous-batching --use-paged-cache
Extras de imagen + audio (dependencias opcionales)
pip install "vmlx[image]" # Flux schnell/dev vía mflux vmlx serve schnell pip install mlx-audio # TTS Kokoro + STT Whisper vmlx serve kokoro --port 8002
La Trampa del venv en macOS 14+
En macOS 14+, pip install pelado falla con “externally-managed-environment”. No es un bug de vMLX — es la protección de Apple/Python (PEP 668). Usá uv, pipx o un venv como arriba. Si no querés tocar la terminal, la app de escritorio (MLX Studio, DMG firmado para Tahoe/Sequoia) trae su propio Python 3.12.
Verificá Que Funciona
curl http://localhost:8000/health para el servidor, GET /v1/models para listar modelos cargados y GET /v1/cache/stats para confirmar hits de prefijo. Si un modelo explota la memoria, bajá a un build cuantizado más chico (ej. Llama-3.2-1B-Instruct-4bit) antes de tocar flags.
4. Casos de Uso Reales
vMLX brilla donde ya hay una Mac sobre el escritorio. Estos son los cuatro casos donde lo elegiría primero:
Loop de desarrollo local para agentes
Claude Code, OpenCode, Continue o Cursor apuntados a localhost:8000 te dan un backend de modelos offline y de costo cero para tool-calling y structured output mientras iterás.
Drop-in de OpenAI para el home-lab
Una Mac siempre encendida sirviendo la familia de modelos mlx-community a cada script, notebook y side project de tu LAN — mismo código SDK que con OpenAI en producción.
Clúster de dos Macs para modelos gigantes
El pipeline parallelism por Thunderbolt permite que dos o tres Macs sirvan juntas modelos MoE (ej. builds JANG de clase ~400B) que no entran en ninguna máquina sola.
Esquina multimodal: imagen + voz
Flux Schnell text-to-image, edición de imágenes por instrucciones con Qwen, voces TTS de Kokoro (incluye español) y STT con Whisper — todo desde el mismo servidor.
5. La Parte Honesta: macMLX y Cuándo NO Usar vMLX
Ningún review está completo sin sus límites. Acá va el contraste y las líneas rojas, todo desde la doc oficial de cada proyecto:
Un Párrafo Sobre macMLX (la alternativa nativa Swift)
Si el core Python/FastAPI de vMLX te molesta, macMLX (macmlx.app, Apache 2.0) es el contrapunto nativo: motor de inferencia escrito en Swift corriendo in-process, app de ~50 MB, cero runtime de Python, API compatible con OpenAI siempre activa en macOS 14+ Apple Silicon. Regla práctica: vMLX para la mayor cobertura de modelos y extensibilidad Python (ecosistema JANG, mflux, mlx-audio); macMLX para la huella nativa más liviana en una sola Mac.
⛔ NO uses vMLX cuando…
- • Estás en Linux, Windows o GPUs NVIDIA — vMLX es solo Apple Silicon. Ahí van vLLM o SGLang.
- • Necesitás tensor parallelism CUDA multi-GPU a escala datacenter — ese es territorio vLLM/SGLang, no un servidor Mac.
- • Querés Smelt (carga parcial de expertos) Y entrada de visión a la vez — Smelt desactiva el modo VLM automáticamente (visión sobre un modelo Smelt produce logits basura, según la doc).
- • Tu modelo de edición de imágenes pide ~54 GB (Qwen Image Edit) pero tu Mac tiene 8–16 GB de memoria unificada — elegí Flux Schnell 4-bit.
- • Necesitás una app de un clic firmada y le temés a la terminal — bajá el DMG de MLX Studio en vez de pelear con pip.
Regla de oro
Si el workload entra en la memoria unificada de una Mac y habla HTTP, vMLX es el camino más rápido del modelo a la API. En el momento que necesites CUDA, Windows o escala datacenter, lo superaste — y está bien, nunca fue esa herramienta.
Conclusión
vMLX convierte a la Mac de cliente en infraestructura: serving compatible con OpenAI, batching y caché de nivel producción, cuantización JANG que rinde por encima de su bit-width y clusters multi-Mac por un cable Thunderbolt. Para dueños de Apple Silicon, es lo más cercano a una nube privada de inferencia que podés instalar — perdón, uv-instalar — en una tarde.
Empezá con uv tool install vmlx más un modelo 8B 4-bit, confirmá /health y /v1/cache/stats, y después decidí si necesitás JANG o una segunda Mac. Y si tu flota es NVIDIA, seguí con la guía de vLLM vs SGLang.
vMLX: Resumen
Corré
- • uv tool install vmlx
- • vmlx serve <modelo>
- • localhost:8000/v1
Acelerá
- • --continuous-batching
- • --enable-prefix-cache
- • --enable-pld / JANG_3M
Escalá / evitá
- • clusters vmlx-worker
- • DMG MLX Studio
- • No para CUDA/NVIDIA
Sources: github.com/jjang-ai/vmlx · vmlx.net · PyPI vmlx · macmlx.app · MLX Studio


