fitllm
FitLLM Engine

En vivo: https://fitllm.run · Bilingüe · Gratis · Sin anuncios · Sin inicio de sesión
Motor abierto: fitllm-engine (MIT · npm
fitllm-engine·npx fitllm)Cero dependencias. Un archivo legible:
engine.js. Probado con vectores de conformidad. MIT.
npx fitllm "GLM-4.7-Flash" --gpu 4090 # ✓ FITS — 21.9/24 GB, free 2.1 GB
npx fitllm "gpt-oss-120b" --mac 64 # ✗ WON'T FIT → what to change to make it fit
npx fitllm "Qwen 3.6 35B" --gpu "5090 + 3090" # multi-GPU rig — VRAM pools (56GB), even mixed cards
npx fitllm --top --detect # what CAN this machine run? — best quant per model
npx fitllm --detect # reads this machine's real hardware¿Por qué una CLI? La pregunta «¿funcionará?» nace en la terminal — una línea antes de ollama pull. Sin instalación, sin cambiar de pestaña, y lee tu hardware real con --detect en lugar de pedirte que conozcas tu VRAM. El código de salida 0/1 lo convierte en un guardia previo a la descarga:
# in your model-pull script — stop BEFORE the 40 GB download:
npx fitllm "gpt-oss-120b" --detect || { echo "won't fit — aborting pull"; exit 1; }Este es el núcleo de cálculo abierto de FitLLM. Las matemáticas son abiertas para que puedas auditarlas.
Pregúntale a un LLM «¿Qwen 3.6 cabe en mi GPU?» y hará coincidencia de patrones con una arquitectura de su corte de entrenamiento — y normalmente dirá no. Las calculadoras basadas en catálogos se quedan atrás con los nuevos lanzamientos. FitLLM lee el config.json oficial de cada modelo en vivo, por lo que acierta en los lanzamientos del primer día y en las arquitecturas híbridas / de ventana deslizante / MoE que las fórmulas ingenuas calculan mal.
Cubre memoria unificada de Apple Silicon (M1–M5, Pro/Max/Ultra — hasta el Mac Studio de 512 GB), GPUs NVIDIA (RTX 20/30/40/50, estación de trabajo RTX 6000 Ada / RTX PRO 6000, centro de datos A100/H100/H200/B200), AMD Radeon (RX 7000/9000, PRO W7900) y presets multi-GPU (2×3090, 2×4090, 4×3090) — con la cuantización de pesos por niveles GGUF Q separada de la cuantización de la caché KV. Cada número de hardware está verificado de forma cruzada con ≥2 fuentes independientes (URLs de fuentes incrustadas por valor en engine.js).
Por qué la mayoría de las calculadoras de memoria para LLM se equivocan
Casi todas las calculadoras de «¿puedo ejecutar este LLM?» estiman la caché KV con la fórmula de libro de texto:
KV ≈ 2 × num_layers × num_kv_heads × head_dim × context_length × bytesEso asume que cada capa mantiene una caché KV de contexto completo con una forma de cabeza uniforme. Cierto para Llama-1/2 — incorrecto para la mayoría de los modelos de 2025–2026:
Modelo | Lo que las fórmulas ingenuas pasan por alto | KV ingenuo | KV FitLLM | Diferencia |
Gemma 4 31B @131K, 8-bit | 50 de 60 capas son de ventana deslizante (conservan solo los últimos 1024 tokens); las 10 capas globales usan una forma de cabeza diferente (4 cabezas KV × 512, no 16 × 256) | ~60 GB | ~5.4 GB | 11× |
Qwen 3.6 27B @131K, 8-bit | 48 de 64 capas son de atención lineal (Gated DeltaNet) — sin caché KV creciente | ~16 GB | ~4 GB | 4× |
Qwen 3.8 27B @256K, F16 KV | misma forma, generación más reciente: la KV vive solo en 16 de 64 capas | 64.0 GiB | 16.0 GiB | 4× |
GLM-4.7-Flash @128K, bf16 | MLA: K/V comprimidos en un latente compartido (dimensiones 512+64, almacenado en caché una vez — no K y V por cabeza) | ~117 GB | ~6.6 GB | 17.8× |
Denso simple (Llama, Mistral…) | nada — transformador estándar | igual | igual | 1× ✅ |
Un error de 11× invierte el veredicto: una calculadora ingenua dice que Gemma 4 31B no cabe en 64 GB con contexto largo, cuando cabe cómodamente.
Las cinco cosas que ignoran
Atención de ventana deslizante (Gemma 2/3/4, gpt-oss): la mayoría de las capas solo conservan los últimos N tokens, por lo que su KV deja de crecer. Solo las capas globales escalan con el contexto completo.
Atención híbrida / lineal (Qwen 3.6 / 3.8, muchos modelos de 2026): las capas de atención lineal usan un estado recurrente de tamaño fijo, no una caché KV creciente. Ese estado también se modela, como componente propio (
linearState) — es constante por secuencia, por lo que nunca infla la curva de contexto.MLA — Atención Latente Multi-cabeza (GLM-5.2, GLM-4.7-Flash, familia DeepSeek): la caché es un único latente de bajo rango (
kv_lora_rank+ dimensiones RoPE) compartido entre todas las cabezas — las fórmulas por cabeza «2 × cabezas × head_dim» sobrecuentan por un orden de magnitud. Verificado contra el artículo de DeepSeek-V2 (arXiv:2405.04434) y el código oficial de inferencia de DeepSeek-V3.Dimensiones de cabeza heterogéneas + MoE: las capas globales pueden usar un
head_dimdiferente (Gemma 4: 512 vs 256). MoE mantiene todos los expertos en memoria mientras activa solo unos pocos por token.PLE — Embeddings por capa (Gemma 4 e2b/e4b): llama.cpp mantiene el tensor
per_layer_token_embden RAM del sistema por defecto independientemente de-ngl(forzarlo a CUDA falla para GGUFs K-quant; solo los quants no-K pueden optar — ggml-org/llama.cpp#14430), por lo que solo los pesos no-PLE necesitan VRAM. Contar todos los 5.1B parámetros contra una GPU sobrepredice los pesos residentes de e2b en ~1.9× e invierte los veredictos de tarjetas pequeñas. En Apple Silicon la RAM del sistema es memoria de acelerador, por lo que los parámetros totales siguen siendo correctos allí. (Advertencias: vLLM carga PLE completamente en la GPU — el cálculo de GPU de este motor está anclado al comportamiento predeterminado de GGUF/llama.cpp del que provienen sus niveles de cuantización; las mediciones de residencia provienen de la pila PLE de la serie E, y una medición directa en un GGUF de Gemma 4 es bienvenida en el issue #7.)
Este motor modela cada tipo de capa por separado, verificado contra los archivos oficiales config.json de HuggingFace.
Related MCP server: VisualAI MCP Server
Qué calcula
Total = Parameters (quantization-adjusted)
+ KV cache (per layer kind: sliding / global / linear / dense)
+ Runtime overhead (quant metadata + KV block padding + activations + fixed)
+ macOS base (Apple Silicon unified memory)Además, un parseHfConfig() que convierte cualquier configuración de HuggingFace en la forma de modelo anterior. (Sin predicción de tokens/s — deliberadamente: la velocidad depende del runtime/backend de maneras que un modelo estático no puede afirmar honestamente. El ajuste es una afirmación verificable; la velocidad no lo es.)
Uso
import { simulate, LOCAL_MODELS, parseHfConfig } from './engine.js';
const model = LOCAL_MODELS.find((m) => m.name === 'Gemma 4 31b');
const sim = simulate(model, /*ram*/ 64, /*ctx*/ 131072, /*bits*/ 8);
// → { used, free, verdict: 'yes'|'tight'|'no', param, kv, rt, os, maxContext, ... }
// any HuggingFace model:
const m = parseHfConfig('Qwen/Qwen3-32B', configJson, totalSizeBytes);Verificación
Los valores de arquitectura se verifican contra el
config.jsonoficial de HuggingFace.La KV de contexto completo de Gemma 4 31B reproduce 20.78 GiB, coincidiendo con el análisis de arquitectura publicado. Reprodúcelo a mano:
global: 10 layers × 2(K,V) × 4 heads × 512 dim × 2 B × 262,144 = 21,474,836,480 B
local: 50 layers × 2(K,V) × 16 heads × 256 dim × 2 B × 1,024 = 838,860,800 B
total = 22,313,697,280 B ÷ 1024³ = 20.78 GiBCalibración: Qwen 3.6 35B-A3B @128K, 8-bit ≈ 54 GB (coincide con ejecuciones locales reales).
Costo por token de MLA: GLM-4.7-Flash = (512 + 64) × 2 B × 47 capas = 54,144 B/token — fijado por vectores de conformidad.
Todas las cifras son estimaciones — el uso real varía con el runtime (MLX/Ollama/llama.cpp), el estado del sistema operativo y el esquema de cuantización.
Vectores de conformidad
vectors/fit-vectors-v1.json fija 16 vectores de prueba neutrales al idioma (bytes KV exactos, costos por token, veredictos de ajuste) derivados a mano de los valores oficiales de config.json — p. ej. «Gemma 4 31B a 262,144 ctx, bf16 = exactamente 22,313,697,280 bytes». Cualquier implementación en cualquier idioma es conforme si todos los vectores pasan — ejecuta la nuestra con node vectors/run.mjs.
Por qué esto importa: las fórmulas son fáciles de copiar; una clave de respuestas verificada no lo es. Si portas este motor a Python, Rust o Go, no te conviertes en un fork no confiable — pasa los vectores y eres una implementación conforme del mismo estándar. Porta el motor, conserva los vectores.
El Censo de Ajuste — cada modelo × cada dispositivo, una tabla de verdad
census/ contiene más de 8,000 veredictos (24 modelos incl. nivel de borrador × 88 GPUs/Macs × niveles de cuantización) calculados por este motor — como CSV/JSON que puedes importar, graficar o citar, además de una matriz inicial («el modelo más grande que cabe cómodamente por dispositivo»). Regéneralo tú mismo: npm run census. Las mediciones del mundo real se colocan junto a las predicciones mediante PRs de fixtures/ — predicho vs. medido, en público.
Incrusta una insignia de ajuste
Muestra si un modelo se ejecuta en un hardware dado — en vivo desde el motor, una línea en cualquier README o tarjeta de modelo:
Parámetros: model (nombre, difuso), gpu (nombre, difuso) o ram (GB, memoria unificada de Apple), opcional quant (nivel GGUF / 4|8|16), ctx, kv. Color del veredicto: verde cabe · amarillo justo · rojo no cabe.
¿Por qué incrustarla? La pregunta número uno bajo cada tarjeta de modelo y tutorial de IA local es «¿funcionará en mi máquina?». La insignia la responde en vivo desde el motor — recalculada cuando los datos se actualizan, no una afirmación obsoleta congelada en tu README. Si publicas modelos o escribes guías: una línea reemplaza un párrafo completo de FAQ y reduce los problemas de «se quedó sin memoria en mi tarjeta de 8 GB» antes de que se reporten.
Pregunta a tu asistente de IA (MCP)
El motor se ejecuta como un servidor MCP público en https://fitllm.run/api/mcp — conéctalo una vez y tu asistente responde «¿puedo ejecutar X en mi Y?» con las matemáticas de este motor en lugar de adivinar a partir de datos de entrenamiento obsoletos (los LLM suelen equivocarse en las matemáticas de la caché KV — consulta la tabla de 17.8× anterior).
Claude (web / escritorio / móvil): Configuración → Conectores → Añadir conector personalizado → pega
https://fitllm.run/api/mcpClaude Code:
claude mcp add --transport http fitllm https://fitllm.run/api/mcpCursor / Windsurf: añade a
mcp.json→{ "mcpServers": { "fitllm": { "url": "https://fitllm.run/api/mcp" } } }ChatGPT: Configuración → Aplicaciones → Avanzado → Modo desarrollador → añadir servidor MCP (Plus/Pro)
Herramientas: check_llm_fit (veredicto + desglose completo de memoria + sugerencia de corrección — admite configuraciones multi-GPU como "RTX 5090 + RTX 3090"), what_fits_on_hardware (lista clasificada para tu máquina), list_supported. Recursos: fitllm://models, fitllm://hardware, fitllm://census, fitllm://engine. Intencionalmente abierto: solo lectura, sin estado, sin autenticación, sin secretos — cada llamada es una función pura de datos públicos.
Listado en: registro oficial de MCP (run.fitllm/fitllm) · Glama · mcp.so · Smithery
Para agentes y scripts — API HTTP simple
¿Sin cliente MCP? Un GET, sin autenticación, sin clave — JSON por defecto, texto plano para curl:
curl 'https://fitllm.run/api/check?model=gemma%204%2031b&gpu=4090'
# multi-GPU rigs: gpu=5090%2B3090 · Mac: ram=64 · usage: curl https://fitllm.run/api/checkDatos abiertos: el Censo de Ajuste completo (más de 8,000 veredictos, CC0) en fitllm.run/data y en Hugging Face Datasets. Prueba el motor en el navegador: demo de HF Space.
Principios
Sin anuncios. Sin inicio de sesión. Sin enlaces de afiliado. La salida nunca está a la venta. El ajuste es una afirmación ganable y verificable; los tok/s brutos no lo son — por lo que este motor rechaza predicciones de velocidad en lugar de disfrazar una suposición como precisión.
Ayuda a calibrar
¿Ejecutaste un modelo y mediste el pico de memoria real? Reporta una medición — mejora las estimaciones para todos.
Creado por
yongha — GitHub. Impulsa fitllm.run.
Licencia
MIT © click6067-ship-it
This server cannot be deployed
Maintenance
Related MCP Connectors
Which open models fit your GPU or Mac, measured. Model momentum, GPU rental prices, weekly pick.
Which LLMs actually run on your GPU, and how fast. Mixture-of-experts included.
Will a local LLM run on your hardware? GGUF quant, buy-vs-rent-vs-API cost, used-GPU prices.
AI model releases, price changes and deprecations in one feed: chat, embedding, speech, video.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAI-powered voice transcription app for macOS using WhisperKit165MIT
- AlicenseNot gradedqualityCmaintenanceEnables local AI image generation on Apple Silicon Macs using MLX and Stable Diffusion. Supports conversational design iteration, asset generation, and wireframe creation with zero API costs through the Model Context Protocol.MIT

ToolPiperofficial
AlicenseNot gradedqualityCmaintenance426+ MCP tools for macOS, all on-device — local AI inference (llama.cpp on Metal), voice, vision OCR, local RAG, browser automation, and ~140 system actions across 26 macOS domains. Nothing leaves your Mac.2MIT- FlicenseNot gradedqualityDmaintenanceRun Liquid AI's LFM2.5 model locally on Mac with a chat UI and MCP server for integration with Claude Desktop, Cursor, and other tools. Offers fast inference, privacy, and multi-Mac clustering.1-