{"id":102,"date":"2026-05-22T00:42:42","date_gmt":"2026-05-21T22:42:42","guid":{"rendered":"https:\/\/atlaszn.com\/blog\/?p=102"},"modified":"2026-05-22T01:06:15","modified_gmt":"2026-05-21T23:06:15","slug":"motores-de-inferencia-para-llms-y-hardware-de-ia-local","status":"publish","type":"post","link":"https:\/\/atlaszn.com\/blog\/2026\/05\/22\/motores-de-inferencia-para-llms-y-hardware-de-ia-local\/","title":{"rendered":"Motores de Inferencia para LLMs y Hardware de IA Local"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Los principales motores de inferencia para LLMs en 2026 son <strong>llama.cpp<\/strong> (portabilidad local), <strong>vLLM<\/strong> (servicio de producci\u00f3n), <strong>TensorRT-LLM<\/strong> (m\u00e1ximo rendimiento en infraestructura NVIDIA), <strong>SGLang<\/strong> (contexto largo y arquitecturas MoE), <strong>ExLlamaV2\/V3<\/strong> (inferencia cuantizada en GPU de consumo), <strong>MLX\/MLX-LM<\/strong> (ecosistema Apple Silicon) y <strong>TGI<\/strong> (integraci\u00f3n con Hugging Face). La selecci\u00f3n del motor adecuado depende del hardware disponible, el formato de cuantizaci\u00f3n requerido, los objetivos de latencia y throughput, y la distinci\u00f3n fundamental entre uso local y servicio de producci\u00f3n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nota de la serie:<\/strong> Este art\u00edculo constituye la segunda parte de la serie sobre LLMs autoalojados e IA Local.<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/atlaszn.com\/blog\/2026\/05\/21\/ancho-de-banda-de-memoria-para-ia-local-en-2026-la-guia-de-hardware-que-realmente-importa\/\" data-type=\"post\" data-id=\"93\">Parte 1: Ancho de banda de memoria para IA local en 2026<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Las entrega anterior establece las bases del hardware: capacidad de memoria y matem\u00e1ticas del ancho de banda. Esta pieza analiza la capa de software que transforma ese hardware en capacidad de inferencia operativa.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<nav style=\" padding: 1em 1.5em; border-radius: 8px; margin-bottom: 2em;\"><strong>\u00cdndice de contenido<\/strong>\n<ol style=\"margin: 0.5em 0 0 1.5em; padding: 0;\">\n<li><a href=\"#motores\">Motores (Engines)<\/a><\/li>\n<li><a href=\"#guia-decision\">La gu\u00eda de decisi\u00f3n en una p\u00e1gina<\/a><\/li>\n<li><a href=\"#que-hace-motor\">Qu\u00e9 hace realmente un motor de inferencia<\/a><\/li>\n<li><a href=\"#cuellos-botella\">Los cuellos de botella reales<\/a><\/li>\n<li><a href=\"#familias-motores\">Las familias de motores<\/a><\/li>\n<li><a href=\"#llama-cpp\">llama.cpp: El rey de la portabilidad<\/a><\/li>\n<li><a href=\"#mlx\">MLX y MLX-LM: El arma de Apple Silicon<\/a><\/li>\n<li><a href=\"#exllama\">ExLlamaV2 y V3: CUDA de consumo, optimizado y r\u00e1pido<\/a><\/li>\n<li><a href=\"#vllm\">vLLM: El servidor de producci\u00f3n open-source por defecto<\/a><\/li>\n<li><a href=\"#sglang\">SGLang: El primo \u00abarquitecto\u00bb de vLLM<\/a><\/li>\n<li><a href=\"#tensorrt-llm\">TensorRT-LLM: M\u00e1ximo rendimiento de NVIDIA<\/a><\/li>\n<li><a href=\"#resto-campo\">El resto del campo<\/a><\/li>\n<li><a href=\"#recetas-hardware\">Recetas de estrategia de hardware<\/a><\/li>\n<li><a href=\"#benchmarking\">Benchmarking: qu\u00e9 medir<\/a><\/li>\n<li><a href=\"#errores-comunes\">Errores comunes<\/a><\/li>\n<li><a href=\"#mapa-final\">El mapa final (estilo opinado)<\/a><\/li>\n<li><a href=\"#principio-final\">Principio final<\/a><\/li>\n<li><a href=\"#faq\">Preguntas frecuentes<\/a><\/li>\n<\/ol>\n<\/nav>\n\n\n\n<h2 id=\"motores\" class=\"wp-block-heading\">Motores (Engines)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La decisi\u00f3n del motor de inferencia no debe ser el punto de partida. Primero se define la estrategia de hardware, el perfil de carga de trabajo y el modelo de servicio. El motor es, con diferencia, la \u00faltima variable por resolver.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esa es, en mi opini\u00f3n, la forma m\u00e1s rigurosa de abordar la selecci\u00f3n de motores de inferencia para LLM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las herramientas disponibles responden a prop\u00f3sitos distintos y operan en capas diferentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li>Portabilidad local<\/li>\n\n\n\n<li>CUDA de consumo<\/li>\n\n\n\n<li>Flujos de trabajo de memoria unificada de Apple<\/li>\n\n\n\n<li>Inferencia cuantizada<\/li>\n\n\n\n<li>Servicio en producci\u00f3n (Production serving)<\/li>\n\n\n\n<li>Orquestaci\u00f3n distribuida<\/li>\n\n\n\n<li>Ejecuci\u00f3n optimizada por proveedor para centros de datos<\/li>\n<\/ul>\n\n\n\n<div style=\"background: rgba(133, 98, 255, 0.12); border-left: 4px solid #8562ff; padding: 1em 1.5em; margin: 1.5em 0; border-radius: 0 8px 8px 0;\">\n<p style=\"margin: 0; font-size: 1em; line-height: 1.6; color: #ffffff;\"><strong>Un modelo mental \u00fatil:<\/strong> El motor de inferencia no es el modelo en s\u00ed. Es el regulador de tr\u00e1fico, el administrador de memoria, el despachador de kernels, el planificador (scheduler), el gestor de cach\u00e9, el coordinador de paralelismo, la superficie de la API y, en algunos casos, el marco de despliegue completo. El motor \u00f3ptimo es aqu\u00e9l que se alinea con la jerarqu\u00eda de memoria disponible, la interconexi\u00f3n, el formato de cuantizaci\u00f3n, los objetivos de latencia y throughput, la arquitectura del modelo y el nivel de madurez operativa requerido.<\/p>\n<\/div>\n\n\n\n<h2 id=\"guia-decision\" class=\"wp-block-heading\">La gu\u00eda de decisi\u00f3n en una p\u00e1gina<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Caso de uso<\/th><th class=\"has-text-align-center\" data-align=\"center\">Motor recomendado<\/th><\/tr><\/thead><tbody><tr><td>Laptop \/ Edge \/ Hardware inusual<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>llama.cpp<\/strong><\/td><\/tr><tr><td>Flujos de trabajo centrados en Mac<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>MLX \/ MLX-LM<\/strong><\/td><\/tr><tr><td>Inferencia local en una sola RTX<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>ExLlamaV2<\/strong><\/td><\/tr><tr><td>2-4+ GPUs NVIDIA \/ CUDA<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>ExLlamaV3<\/strong><\/td><\/tr><tr><td>Servicio general en producci\u00f3n<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>vLLM<\/strong><\/td><\/tr><tr><td>Contexto largo \/ MoE \/ Enrutamiento<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>SGLang<\/strong><\/td><\/tr><tr><td>Rendimiento m\u00e1ximo de NVIDIA<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>TensorRT-LLM<\/strong><\/td><\/tr><tr><td>Orquestaci\u00f3n de cl\u00fasteres<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>NVIDIA Dynamo<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Las secciones siguientes desarrollan el fundamento de cada recomendaci\u00f3n.<\/p>\n\n\n\n<h2 id=\"que-hace-motor\" class=\"wp-block-heading\">\u00bfQu\u00e9 hace realmente un motor de inferencia?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un motor de inferencia carga los pesos del modelo, tokeniza la entrada, ejecuta el paso hacia adelante (forward pass), muestrea los tokens, mantiene la cach\u00e9 KV y transmite los resultados. Los motores de categor\u00eda profesional gestionan adem\u00e1s el batching, la planificaci\u00f3n de solicitudes, la cach\u00e9 de prefijos, la cuantizaci\u00f3n, la ejecuci\u00f3n paralela, el servicio de API, las m\u00e9tricas de observabilidad y la ejecuci\u00f3n distribuida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La carga de trabajo de inferencia se divide en dos fases con perfiles de rendimiento fundamentalmente distintos:<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Prefill (Prellenado):<\/strong> procesa el prompt completo y construye la cach\u00e9 KV inicial. Esta fase es intensiva en c\u00f3mputo (compute-bound).<\/li>\n\n\n\n<li><strong>Decode (Decodificaci\u00f3n):<\/strong> genera tokens de forma secuencial, leyendo repetidamente los pesos y la cach\u00e9 KV en cada paso. Esta fase est\u00e1 limitada por el ancho de banda de memoria (memory-bound). La velocidad de decodificaci\u00f3n depende del ancho de banda de memoria con mucha mayor intensidad que del c\u00f3mputo pico.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Esta distinci\u00f3n explica, por s\u00ed sola, la mayor parte de las decisiones arquitect\u00f3nicas en inferencia:<\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Prompt corto, respuesta larga:<\/strong> domina la decodificaci\u00f3n \u2192 el ancho de banda de memoria y el batching son determinantes.<\/li>\n\n\n\n<li><strong>Prompt largo, respuesta corta:<\/strong> domina el prefill \u2192 los kernels de atenci\u00f3n y el chunked prefill marcan la diferencia.<\/li>\n\n\n\n<li><strong>M\u00faltiples usuarios concurrentes:<\/strong> la calidad del planificador (scheduler) es cr\u00edtica \u2192 continuous batching, paginaci\u00f3n de cach\u00e9 y equidad en la distribuci\u00f3n de recursos.<\/li>\n\n\n\n<li><strong>Contexto largo:<\/strong> la cach\u00e9 KV es el factor limitante \u2192 paged attention, cuantizaci\u00f3n de KV y offload a memoria del sistema.<\/li>\n\n\n\n<li><strong>MoE (Mixture of Experts):<\/strong> el enrutamiento de expertos es el cuello de botella \u2192 paralelismo de expertos, interconexi\u00f3n de alta velocidad y GEMMs agrupados.<\/li>\n\n\n\n<li><strong>Despliegue multinodo:<\/strong> la interconexi\u00f3n lo determina todo \u2192 NVLink, RDMA, paralelismo de tuber\u00eda (pipeline parallelism) y desagregaci\u00f3n de fases.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">PagedAttention resolvi\u00f3 la fragmentaci\u00f3n de la cach\u00e9 KV. FlashAttention emple\u00f3 tiling consciente de E\/S para reducir el tr\u00e1fico de HBM. La decodificaci\u00f3n especulativa propone tokens de bajo costo y los valida en paralelo. El hilo conductor es inequ\u00edvoco: el rendimiento de la inferencia se reduce a movimiento de memoria y planificaci\u00f3n eficiente.<\/p>\n\n\n\n<h2 id=\"cuellos-botella\" class=\"wp-block-heading\">Los cuellos de botella reales<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ancho de banda de memoria, no solo capacidad de VRAM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La VRAM determina si el modelo cabe. El ancho de banda determina la velocidad de decodificaci\u00f3n. El M3 Ultra de Apple alcanza los 819 GB\/s de ancho de banda de memoria unificada. La NVIDIA H100 SXM registra 3.35 TB\/s de ancho de banda de memoria GPU. La memoria unificada permite alojar modelos que exceden la capacidad de cualquier VRAM de consumo. La HBM permite servirlos con mayor rapidez cuando el modelo cabe. Que quepa no equivale a velocidad; capacidad no es ancho de banda.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Crecimiento de la cach\u00e9 KV<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La cach\u00e9 KV escala proporcionalmente con el tama\u00f1o del lote (batch) y la longitud del contexto. Las cargas de trabajo con contexto extenso pueden agotar la memoria disponible incluso cuando los pesos del modelo caben con holgura. PagedAttention mitiga este problema al particionar la cach\u00e9 KV en bloques, incrementando la utilizaci\u00f3n de memoria y permitiendo lotes m\u00e1s amplios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Interconexi\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En el instante en que un modelo trasciende los l\u00edmites de una GPU individual, se incurre en un costo de comunicaci\u00f3n. El paralelismo de tensores exige operaciones all-reduce frecuentes. El paralelismo de tuber\u00eda comunica en los l\u00edmites de cada etapa. El paralelismo de expertos requiere tr\u00e1fico all-to-all para MoE. La documentaci\u00f3n de vLLM se\u00f1ala que, en ausencia de NVLink, el paralelismo de tuber\u00eda puede ofrecer mejor rendimiento que el paralelismo de tensores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Calidad del planificador (Scheduler)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un planificador eficaz decide qu\u00e9 solicitudes ingresan a cada lote, c\u00f3mo coexisten el prefill y la decodificaci\u00f3n en el mismo acelerador, si los prompts extensos bloquean las decodificaciones breves y c\u00f3mo prevenir la inanici\u00f3n (starvation) de solicitudes. Soportar batching no es equivalente a comportarse como un planificador preparado para producci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sobrecarga del tiempo de ejecuci\u00f3n (Runtime overhead)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los CUDA graphs, la fusi\u00f3n de kernels, la sobrecarga de muestreo, el tokenizador, la capa HTTP, el cambio din\u00e1mico de LoRA y la decodificaci\u00f3n estructurada tienen impacto medible. A gran escala, las sobrecargas aparentemente insignificantes del 2% se acumulan y requieren atenci\u00f3n deliberada (valga la coincidencia con el mecanismo de attention).<\/p>\n\n\n\n<h2 id=\"familias-motores\" class=\"wp-block-heading\">Las familias de motores<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">El ecosistema se agrupa en cuatro familias con prioridades distintas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Runtimes locales port\u00e1tiles:<\/strong> llama.cpp, MLC LLM, ONNX Runtime GenAI, OpenVINO, herramientas estilo Ollama. Su premisa: \u00abhaz que funcione aqu\u00ed\u00bb.<\/li>\n\n\n\n<li><strong>Runtimes de Apple y memoria unificada:<\/strong> MLX y MLX-LM. Su premisa: \u00abaprovecha la gran memoria compartida y el stack de Apple\u00bb.<\/li>\n\n\n\n<li><strong>Motores de cuantizaci\u00f3n CUDA para consumo:<\/strong> ExLlamaV2 y ExLlamaV3. Su premisa: \u00abextrae el m\u00e1ximo rendimiento de una GPU de consumo con pesos de bajos bits\u00bb.<\/li>\n\n\n\n<li><strong>Motores de servicio en producci\u00f3n:<\/strong> vLLM, SGLang, TensorRT-LLM, TGI, LMDeploy. Su premisa: usuarios concurrentes, gesti\u00f3n de cach\u00e9 KV, batching eficiente, paralelismo, observabilidad y optimizaci\u00f3n del costo por token.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Por encima de estas familias existen capas de orquestaci\u00f3n, como NVIDIA Dynamo, que coordinan flotas de motores, gestionan la desagregaci\u00f3n de prefill\/decode, implementan enrutamiento inteligente y escalado autom\u00e1tico.<\/p>\n\n\n\n<h2 id=\"llama-cpp\" class=\"wp-block-heading\">llama.cpp: El rey de la portabilidad<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">llama.cpp es la respuesta cuando el hardware es heterog\u00e9neo, limitado, opera sin conexi\u00f3n, depende significativamente de la CPU, est\u00e1 orientado al edge o simplemente no es un nodo de centro de datos NVIDIA convencional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Soporta Apple Silicon a trav\u00e9s de ARM NEON, Accelerate y Metal; x86 mediante AVX\/AVX2\/AVX512\/AMX; RISC-V; cuantizaci\u00f3n de bajos bits; CUDA; AMD v\u00eda HIP; MUSA; Vulkan; SYCL; y offload h\u00edbrido CPU+GPU. Esta cobertura explica por qu\u00e9 llama.cpp domina el segmento del \u00absimplemente haz que funcione\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su servidor HTTP supera ampliamente la categor\u00eda de \u00abejecutor local\u00bb. llama-server ofrece rutas compatibles con la API de OpenAI, compatibilidad con la API de Messages de Anthropic, reranking, continuous batching, soporte multimodal, restricciones de esquema JSON, llamadas a funciones (function calling), decodificaci\u00f3n especulativa e interfaz web integrada.<\/p>\n\n\n\n<div style=\"background: rgba(113, 61, 255, 0.15); border-left: 4px solid #713dff; padding: 1em 1.5em; margin: 1.5em 0; border-radius: 0 8px 8px 0;\">\n<p style=\"margin: 0; font-size: 1em; line-height: 1.6; color: #ffffff;\"><strong>Limitaci\u00f3n cr\u00edtica:<\/strong> llama.cpp no est\u00e1 dise\u00f1ado para servicio de producci\u00f3n en entornos multinodo. Su backend RPC est\u00e1 documentado expl\u00edcitamente como una prueba de concepto, fr\u00e1gil e insegura para despliegues operativos.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> Opta por llama.cpp cuando la portabilidad, la operaci\u00f3n offline, el formato GGUF o el offload h\u00edbrido son prioritarios frente al servicio a escala de flota. <strong>No recomendado para:<\/strong> configuraciones Multi-GPU.<\/p>\n\n\n\n<h2 id=\"mlx\" class=\"wp-block-heading\">MLX y MLX-LM: El ecosistema de Apple Silicon<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">MLX es el framework de arrays de Apple dise\u00f1ado para Apple Silicon, y MLX-LM es el paquete de LLM construido sobre \u00e9l. Se trata de un stack de machine learning concebido primordialmente para el entorno Mac.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El elemento diferenciador del hardware es la memoria unificada. Apple Silicon otorga a la CPU y a la GPU acceso directo al mismo espacio de memoria. Los arrays de MLX residen en memoria unificada, y la selecci\u00f3n del dispositivo se realiza al ejecutar la operaci\u00f3n, eliminando la necesidad de transferir datos entre espacios de memoria separados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta arquitectura transforma la ecuaci\u00f3n de la inferencia local. En un sistema con GPU discreta, la pregunta es \u00ab\u00bfcabe en la VRAM?\u00bb. En un Mac de la serie M con memoria unificada abundante, la pregunta se convierte en \u00ab\u00bfcabe en la memoria y puede el subsistema de memoria alimentar a la GPU con suficiente rapidez?\u00bb. Modelos cuantizados de gran escala pueden residir en m\u00e1quinas donde el mismo modelo resultar\u00eda inviable en una GPU de consumo de 24 GB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No obstante, el costo es velocidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">MLX-LM incorpora integraci\u00f3n con Hugging Face Hub, cuantizaci\u00f3n, LoRA y ajuste fino completo (full fine-tuning), inferencia distribuida y un ecosistema extenso de modelos mantenidos por la comunidad. MLX ya trasciende el ecosistema Apple: ofrece paquetes para CUDA y CPU exclusiva en Linux. El subsistema de comunicaci\u00f3n distribuida soporta MPI, Ring sobre TCP, JACCL para RDMA sobre Thunderbolt y NCCL para CUDA.<\/p>\n\n\n\n<div style=\"background: rgba(113, 61, 255, 0.15); border-left: 4px solid #713dff; padding: 1em 1.5em; margin: 1.5em 0; border-radius: 0 8px 8px 0;\">\n<p style=\"margin: 0; font-size: 1em; line-height: 1.6; color: #ffffff;\"><strong>Nota importante:<\/strong> El servidor de MLX-LM incluye una advertencia expl\u00edcita: no est\u00e1 recomendado para producci\u00f3n, ya que implementa \u00fanicamente comprobaciones de seguridad b\u00e1sicas.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> MLX es la elecci\u00f3n natural para flujos de trabajo de ML y LLM centrados en Mac. Para servicio p\u00fablico de alta concurrencia, se recomienda partir de un stack de servicio dise\u00f1ado para producci\u00f3n.<\/p>\n\n\n\n<h2 id=\"exllama\" class=\"wp-block-heading\">ExLlamaV2 y V3: CUDA de consumo, optimizado y r\u00e1pido<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">ExLlamaV2 es el motor de cuantizaci\u00f3n CUDA orientado a usuarios que desean que una GPU NVIDIA de consumo rinda por encima de sus especificaciones nominales. Incorpora paged attention, dynamic batching, cach\u00e9 de prompts, deduplicaci\u00f3n de cach\u00e9 KV, generaci\u00f3n por lotes, streaming y decodificaci\u00f3n especulativa. La palabra clave es <em>local<\/em>: optimiza la ejecuci\u00f3n de modelos cuantizados en GPUs CUDA modernas, con \u00e9nfasis en tarjetas de consumo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caso de uso ideal:<\/strong> estaciones de trabajo con RTX 3090\/4090\/5090, asistentes de c\u00f3digo locales, chat local, modelos cuantizados en formato EXL2 y entornos prosumer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ExLlamaV3 extiende esta filosof\u00eda hacia el terreno multinodo y la inferencia local de arquitecturas MoE. Introduce el formato de cuantizaci\u00f3n EXL3 basado en el framework QTIP, inferencia flexible con paralelismo de tensores y expertos para hardware de consumo, servidor compatible con OpenAI a trav\u00e9s de TabbyAPI, continuous dynamic batching y soporte multimodal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">V3 resulta atractivo cuando se dispone de 2 a 4 GPUs NVIDIA de consumo o se requiere inferencia MoE local. Cabe se\u00f1alar que no todos los modelos soportan paralelismo de tensores o expertos en ExLlamaV3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> ExLlamaV2 es el motor CUDA local para entusiastas y profesionales. ExLlamaV3 representa la frontera para configuraciones multi-GPU de consumo (2-4 unidades). A mayor capacidad, mayor complejidad en los bordes.<\/p>\n\n\n\n<h2 id=\"vllm\" class=\"wp-block-heading\">vLLM: El servidor de producci\u00f3n open-source por defecto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">vLLM constituye el primer motor que la mayor\u00eda de los equipos deber\u00edan evaluar al abordar un despliegue serio de LLMs open-source en producci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ofrece gesti\u00f3n de memoria KV basada en PagedAttention, continuous batching, chunked prefill, cach\u00e9 de prefijos, CUDA\/HIP graphs, cuantizaci\u00f3n extensiva (FP8, MXFP8\/MXFP4, NVFP4, INT8, INT4, GPTQ, AWQ, GGUF), kernels optimizados de atenci\u00f3n y GEMM\/MoE, decodificaci\u00f3n especulativa, torch.compile y desagregaci\u00f3n de prefill\/decode\/encode.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su flexibilidad es notable: paralelismo de tensor\/tuber\u00eda\/datos\/expertos\/contexto, streaming, salidas estructuradas, llamadas a herramientas (tool calling), APIs compatibles con OpenAI y Anthropic Messages, gRPC, multi-LoRA y soporte para NVIDIA, AMD, CPUs x86\/ARM\/PowerPC, adem\u00e1s de plugins para TPUs, Gaudi, Ascend, Apple Silicon y plataformas adicionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La documentaci\u00f3n de vLLM indica que los despliegues multinodo suelen emplear Ray y que, sin NVLink, el paralelismo de tuber\u00eda puede superar al de tensores. La trampa conceptual consiste en asumir que vLLM elimina la necesidad de pensamiento arquitect\u00f3nico. Persiste la necesidad de ajustar el batching, la longitud del contexto, la utilizaci\u00f3n de memoria GPU, el dise\u00f1o del paralelismo y el enrutamiento. vLLM proporciona un motor excepcional; no exime de un dise\u00f1o de sistemas riguroso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> Ante la necesidad de servir modelos abiertos en producci\u00f3n, vLLM es el punto de partida predeterminado.<\/p>\n\n\n\n<h2 id=\"sglang\" class=\"wp-block-heading\">SGLang: El primo \u00abarquitecto\u00bb de vLLM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SGLang es la herramienta a la que se recurre cuando la carga de trabajo de servicio presenta complejidad adicional: salidas estructuradas, contexto extenso, arquitecturas MoE, desagregaci\u00f3n de fases y enrutamiento sofisticado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incorpora cach\u00e9 de prefijos RadixAttention, desagregaci\u00f3n prefill-decode, decodificaci\u00f3n especulativa, continuous batching, paged attention, paralelismo de tensor\/tuber\u00eda\/expertos\/datos, salidas estructuradas, chunked prefill y batching multi-LoRA. Soporta NVIDIA, AMD, Intel Xeon, Google TPUs, Ascend NPUs y plataformas adicionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El elemento diferenciador de SGLang reside en su arquitectura de servicio. La desagregaci\u00f3n prefill-decode separa el prefill (intensivo en c\u00f3mputo) de la decodificaci\u00f3n (intensiva en memoria) en instancias especializadas, transfiriendo la cach\u00e9 KV entre ellas. Este dise\u00f1o evita que los lotes de prefill extensos perturben la decodificaci\u00f3n y eleven la latencia de los tokens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> SGLang est\u00e1 orientado a equipos cuyo cuello de botella ya no es \u00ab\u00bfpodemos ejecutar el modelo?\u00bb, sino \u00ab\u00bfpodemos mantener la latencia, la memoria y el costo bajo control ante tr\u00e1fico hostil?\u00bb.<\/p>\n\n\n\n<h2 id=\"tensorrt-llm\" class=\"wp-block-heading\">TensorRT-LLM: M\u00e1ximo rendimiento de NVIDIA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TensorRT-LLM representa el stack de rendimiento m\u00e1ximo de NVIDIA. Est\u00e1 optimizado, especializado, potente y no pretende ser port\u00e1til.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Proporciona APIs de Python para construir motores TensorRT con optimizaciones de vanguardia, junto con runtimes en Python y C++. Incluye kernels personalizados para atenci\u00f3n, GEMMs y MoE; desagregaci\u00f3n prefill-decode, Wide Expert Parallelism, decodificaci\u00f3n especulativa; y una API de Python de alto nivel integrada con NVIDIA Dynamo y Triton Inference Server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las GPUs B200 pueden cargar pesos FP4 con kernels optimizados. H100 y generaciones posteriores soportan cuantizaci\u00f3n FP8, capaz de duplicar el rendimiento y reducir a la mitad el consumo de memoria frente a 16 bits, con una p\u00e9rdida de precisi\u00f3n m\u00ednima.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>D\u00f3nde brilla:<\/strong> flotas clase H100\/H200\/B200\/GB200\/GB300, centros de datos exclusivamente NVIDIA, despliegue FP8\/FP4, servicio multinodo y MoE a escala. <strong>D\u00f3nde resulta inc\u00f3modo:<\/strong> portabilidad a AMD, Apple o Intel; modelos experimentales en evoluci\u00f3n r\u00e1pida; configuraciones locales modestas y equipos que requieren compatibilidad universal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Veredicto:<\/strong> Si la infraestructura es NVIDIA y el rendimiento absoluto es prioritario, TensorRT-LLM debe figurar en la comparativa. Se intercambia portabilidad por rendimiento: especializaci\u00f3n ajustada a cambio de menor versatilidad.<\/p>\n\n\n\n<h2 id=\"resto-campo\" class=\"wp-block-heading\">El resto del campo<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Motor<\/th><th class=\"has-text-align-left\" data-align=\"left\">Descripci\u00f3n<\/th><th class=\"has-text-align-left\" data-align=\"left\">Cu\u00e1ndo usarlo<\/th><\/tr><\/thead><tbody><tr><td><strong>TGI<\/strong><\/td><td>Servidor de producci\u00f3n de Hugging Face con trazado (tracing), m\u00e9tricas, paralelismo de tensores y continuous batching.<\/td><td>Cuando la integraci\u00f3n con Hugging Face y la simplicidad operativa son prioritarias.<\/td><\/tr><tr><td><strong>MLC LLM<\/strong><\/td><td>Motor de despliegue universal basado en compilador con APIs compatibles con OpenAI en REST, Python, JavaScript, iOS y Android.<\/td><td>Navegadores, dispositivos m\u00f3viles y aplicaciones nativas.<\/td><\/tr><tr><td><strong>ONNX Runtime GenAI<\/strong><\/td><td>Implementa el ciclo generativo completo sobre ONNX Runtime. Potencia Foundry Local, Windows ML y VS Code AI Toolkit. Soporta CPU, CUDA, DirectML, TensorRT-RTX, OpenVINO, QNN, WebGPU y GPU AMD.<\/td><td>Despliegue de aplicaciones y flujos de trabajo basados en ONNX.<\/td><\/tr><tr><td><strong>OpenVINO GenAI<\/strong><\/td><td>Soluci\u00f3n optimizada de Intel para CPUs Xeon, GPUs Arc, Core Ultra y NPUs. Servicio compatible con OpenAI con continuous batching y paged attention.<\/td><td>Hardware Intel.<\/td><\/tr><tr><td><strong>LMDeploy<\/strong><\/td><td>Kit de herramientas centrado en CUDA con TurboMind para rendimiento y PyTorch para accesibilidad.<\/td><td>Usuarios de CUDA que busquen una alternativa a vLLM, SGLang o TensorRT-LLM.<\/td><\/tr><tr><td><strong>NVIDIA Dynamo<\/strong><\/td><td>Capa de orquestaci\u00f3n distribuida que opera sobre motores como vLLM, SGLang y TensorRT-LLM. Soporta desagregaci\u00f3n, enrutamiento inteligente y cach\u00e9 KV multinivel.<\/td><td>Cuando un motor individual ya no es suficiente para la escala requerida.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"background: #fce4ec; border-left: 4px solid #E91E63; padding: 1em 1.5em; margin: 1.5em 0; border-radius: 0 8px 8px 0;\">\n<p style=\"margin: 0; font-size: 1em; line-height: 1.6; color: #1a1a1a;\"><strong>Nota sobre Ollama:<\/strong> Ollama es una herramienta valiosa para desarrollo local y pruebas r\u00e1pidas. No obstante, no est\u00e1 dise\u00f1ada para servicio de producci\u00f3n riguroso: carece de observabilidad avanzada, contrapresi\u00f3n (backpressure), enrutamiento sofisticado y garant\u00edas de SLA que se esperan en un entorno operativo.<\/p>\n<\/div>\n\n\n\n<h2 id=\"recetas-hardware\" class=\"wp-block-heading\">Recetas de estrategia de hardware<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Hardware<\/th><th class=\"has-text-align-left\" data-align=\"left\">Motor recomendado<\/th><\/tr><\/thead><tbody><tr><td>Servidor solo CPU<\/td><td>llama.cpp. OpenVINO para Intel Xeon. ONNX Runtime GenAI para despliegue de aplicaciones y flujos ONNX.<\/td><\/tr><tr><td>MacBook \/ Mac Studio<\/td><td>MLX \/ MLX-LM para flujos nativos. llama.cpp para portabilidad GGUF.<\/td><\/tr><tr><td>Sola RTX 3090 \/ 4090 \/ 5090<\/td><td>ExLlamaV2 para inferencia local EXL2. llama.cpp para GGUF o portabilidad. vLLM si se requiere servicio a m\u00faltiples usuarios.<\/td><\/tr><tr><td>Equipo Dual o Quad RTX de consumo<\/td><td>ExLlamaV3 para inferencia cuantizada multi-GPU o MoE. vLLM si el comportamiento del servicio es prioritario. SGLang para enrutamiento o patrones de contexto largo.<\/td><\/tr><tr><td>Nodo 8xH100 \/ H200<\/td><td>Partir con vLLM o SGLang. Evaluar TensorRT-LLM si la infraestructura es exclusivamente NVIDIA y el rendimiento justifica la optimizaci\u00f3n. Incorporar Dynamo cuando la orquestaci\u00f3n multinodo sea necesaria.<\/td><\/tr><tr><td>Infraestructura clase B200 \/ GB200 \/ GB300<\/td><td>Benchmark de TensorRT-LLM, SGLang y vLLM. A\u00f1adir Dynamo para orquestaci\u00f3n a nivel de flota, enrutamiento consciente de KV y autoescalado.<\/td><\/tr><tr><td>AMD MI300 \/ MI325 \/ MI350 \/ MI355<\/td><td>Partir con vLLM o SGLang sobre ROCm. No asumir que los benchmarks de NVIDIA se trasladan directamente.<\/td><\/tr><tr><td>Intel Xeon \/ Core Ultra \/ Arc<\/td><td>OpenVINO GenAI o OpenVINO Model Server. ONNX Runtime GenAI si la integraci\u00f3n en aplicaciones es relevante.<\/td><\/tr><tr><td>Navegador, m\u00f3vil, aplicaci\u00f3n nativa<\/td><td>MLC LLM \/ WebLLM u ONNX Runtime GenAI.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"benchmarking\" class=\"wp-block-heading\">Benchmarking: qu\u00e9 medir<\/h2>\n\n\n\n<div style=\"background: #fce4ec; border-left: 4px solid #E91E63; padding: 1em 1.5em; margin: 1.5em 0; border-radius: 0 8px 8px 0;\">\n<p style=\"margin: 0; font-size: 1em; line-height: 1.6; color: #1a1a1a;\"><strong>Mal benchmark:<\/strong> \u00abObtuve 200 tok\/s\u00bb.<\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Un benchmark riguroso documenta los siguientes elementos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Elemento<\/th><th class=\"has-text-align-left\" data-align=\"left\">Qu\u00e9 especificar<\/th><\/tr><\/thead><tbody><tr><td><strong>Modelo<\/strong><\/td><td>Identificador exacto, arquitectura, conteo de par\u00e1metros, par\u00e1metros activos en MoE.<\/td><\/tr><tr><td><strong>Pesos<\/strong><\/td><td>dtype, formato de cuantizaci\u00f3n, tama\u00f1o del grupo (group size), m\u00e9todo de calibraci\u00f3n.<\/td><\/tr><tr><td><strong>Motor<\/strong><\/td><td>Versi\u00f3n, commit, backend, flags de configuraci\u00f3n.<\/td><\/tr><tr><td><strong>Hardware<\/strong><\/td><td>SKU de GPU, capacidad y ancho de banda de memoria, interconexi\u00f3n, CPU, RAM del sistema.<\/td><\/tr><tr><td><strong>Carga de trabajo<\/strong><\/td><td>Distribuciones de longitud de entrada y salida, nivel de concurrencia, streaming, prefijos compartidos, salida estructurada.<\/td><\/tr><tr><td><strong>M\u00e9tricas<\/strong><\/td><td>TTFT, TPOT, latencia extremo a extremo, percentiles p50\/p95\/p99, tokens\/s, requests\/s, utilizaci\u00f3n de memoria GPU, tasa de aciertos de cach\u00e9 KV, throughput de prefill y decode, costo por 1M de tokens.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reglas de benchmarking:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li>No compares motores empleando \u00fanicamente tokens por segundo con un solo usuario.<\/li>\n\n\n\n<li>Eval\u00faa con tu distribuci\u00f3n real de prompts y salidas.<\/li>\n\n\n\n<li>Prueba con niveles de concurrencia realistas.<\/li>\n\n\n\n<li>Separa las m\u00e9tricas de prefill de las de decodificaci\u00f3n.<\/li>\n\n\n\n<li>Rastrea los percentiles p95 y p99, no solo los promedios.<\/li>\n\n\n\n<li>Mide el margen de memoria (headroom) en la longitud de contexto objetivo.<\/li>\n\n\n\n<li>Eval\u00faa la reutilizaci\u00f3n de cach\u00e9 si tu aplicaci\u00f3n presenta prefijos repetidos.<\/li>\n\n\n\n<li>Realiza benchmark de salidas estructuradas de forma independiente; las gram\u00e1ticas introducen sobrecarga adicional.<\/li>\n\n\n\n<li>Eval\u00faa LoRA y multi-LoRA por separado.<\/li>\n\n\n\n<li>Repite las pruebas tras actualizaciones de drivers, CUDA, ROCm, modelo o motor.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"errores-comunes\" class=\"wp-block-heading\">Errores comunes<\/h2>\n\n\n\n<ul class=\"wp-block-list\" class=\"wp-block-list\">\n<li><strong>Elegir bas\u00e1ndose exclusivamente en la capacidad de VRAM.<\/strong> La VRAM determina si el modelo cabe. El ancho de banda y la calidad del planificador determinan la velocidad. Una m\u00e1quina con memoria unificada abundante puede alojar modelos de gran escala, pero una H100 decodifica con mayor rapidez cuando el modelo cabe, gracias a su ancho de banda HBM significativamente superior.<\/li>\n\n\n\n<li><strong>Emplear paralelismo de tensores sobre interconexiones d\u00e9biles.<\/strong> En ausencia de NVLink o NVSwitch, se recomienda probar el paralelismo de tuber\u00eda (pipeline parallelism). La documentaci\u00f3n de vLLM advierte sobre esta limitaci\u00f3n para configuraciones tipo L40S.<\/li>\n\n\n\n<li><strong>Ignorar la cach\u00e9 KV.<\/strong> El contexto extenso y la concurrencia pueden convertir la cach\u00e9 KV en el factor limitante. PagedAttention, la cach\u00e9 de prefijos, la cuantizaci\u00f3n de KV y la desagregaci\u00f3n de fases dejan de ser opcionales a medida que escala el despliegue.<\/li>\n\n\n\n<li><strong>Tratar motores locales como servidores de producci\u00f3n.<\/strong> El servidor de llama.cpp es capaz. El servidor de MLX-LM es conveniente. Ollama es pr\u00e1ctica para desarrollo. No obstante, la producci\u00f3n exige: seguridad, observabilidad, contrapresi\u00f3n (backpressure), enrutamiento, autoescalado y cumplimiento de SLA. El propio MLX-LM advierte que su servidor no est\u00e1 recomendado para producci\u00f3n.<\/li>\n\n\n\n<li><strong>Asumir que los formatos de cuantizaci\u00f3n son intercambiables.<\/strong> GGUF, EXL2, EXL3, AWQ, GPTQ, FP8, FP4, formatos MLX y ONNX no son equivalentes. El formato adecuado es aqu\u00e9l para el cual tu motor objetivo cuenta con kernels optimizados.<\/li>\n\n\n\n<li><strong>Ignorar la arquitectura del modelo.<\/strong> Los modelos densos, MoE, atenci\u00f3n h\u00edbrida, modelos multimodales y variantes de contexto largo ejercen presi\u00f3n sobre componentes distintos del motor. El \u00abamplio soporte\u00bb no garantiza que cada optimizaci\u00f3n funcione con la misma eficacia.<\/li>\n\n\n\n<li><strong>Confiar en tablas de benchmarks sin conocer el perfil de carga.<\/strong> Una tabla generada con Llama 3.1 8B, 1K de entrada y 128 de salida aporta poca informaci\u00f3n sobre un agente de c\u00f3digo con 80K de contexto ejecutando Qwen 3.6 27B o Gemma 4 26B-A4B, ni sobre un servicio RAG con 500 usuarios concurrentes.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"mapa-final\" class=\"wp-block-heading\">El mapa final (estilo opinado)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Perfil<\/th><th class=\"has-text-align-left\" data-align=\"left\">Recomendaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>Usuario de IA local<\/td><td>LM Studio o Harbor por conveniencia. llama.cpp para control granular. MLX en Mac. ExLlamaV2\/V3 para rendimiento CUDA local.<\/td><\/tr><tr><td>Construcci\u00f3n de agente local<\/td><td>llama.cpp por portabilidad. MLX si los usuarios operan en Apple Silicon. vLLM si se simula servicio de producci\u00f3n localmente.<\/td><\/tr><tr><td>Servicio para equipo interno<\/td><td>Partir con vLLM. Emplear SGLang si son relevantes las salidas estructuradas, el contexto extenso, multi-LoRA, MoE o el enrutamiento.<\/td><\/tr><tr><td>Servicio a clientes a escala<\/td><td>Benchmark de vLLM, SGLang y TensorRT-LLM. Si el enrutamiento y la desagregaci\u00f3n son determinantes, SGLang y Dynamo merecen consideraci\u00f3n.<\/td><\/tr><tr><td>Centro de datos NVIDIA<\/td><td>TensorRT-LLM para rendimiento m\u00e1ximo. vLLM para flexibilidad. SGLang para servicio complejo. Dynamo para orquestaci\u00f3n de flota.<\/td><\/tr><tr><td>Apple Silicon<\/td><td>MLX para desarrollo nativo. llama.cpp para GGUF. La memoria unificada ofrece capacidad excepcional con compensaciones en ancho de banda; no equivale a HBM.<\/td><\/tr><tr><td>Edge, aplicaci\u00f3n, navegador o Windows nativo<\/td><td>llama.cpp, MLC LLM, ONNX Runtime GenAI u OpenVINO, seg\u00fan el stack tecnol\u00f3gico.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"principio-final\" class=\"wp-block-heading\">Principio final<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los Motores de Inferencia tienen consecuencias. Selecciona el motor una vez respondidas las siguientes preguntas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u00bfQu\u00e9 hardware tengo efectivamente disponible?<\/li>\n\n\n\n<li>\u00bfEl modelo cabe en la memoria r\u00e1pida o requiere la memoria del sistema o unificada?<\/li>\n\n\n\n<li>\u00bfCu\u00e1l es el cuello de botella predominante: la decodificaci\u00f3n o el prefill?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 longitud de contexto y nivel de concurrencia son operativamente relevantes?<\/li>\n\n\n\n<li>\u00bfLos prompts se comparten con suficiente frecuencia como para justificar cach\u00e9 de prefijos?<\/li>\n\n\n\n<li>\u00bfLa arquitectura del modelo es densa, MoE, multimodal o h\u00edbrida?<\/li>\n\n\n\n<li>\u00bfSe requiere conveniencia local, servicio de producci\u00f3n u orquestaci\u00f3n de flota?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 formato de cuantizaci\u00f3n cuenta con kernels optimizados en el motor candidato?<\/li>\n\n\n\n<li>\u00bfLa interconexi\u00f3n disponible es PCIe, NVLink, NVSwitch, Ethernet, RDMA o Thunderbolt?<\/li>\n\n\n\n<li>\u00bfLa optimizaci\u00f3n prioriza latencia, throughput, costo, privacidad, portabilidad o velocidad de desarrollo?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">El motor adecuado se deduce de las respuestas.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 motor de inferencia debo usar para IA local en una sola GPU NVIDIA?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para una RTX 3090\/4090\/5090 individual, ExLlamaV2 es la opci\u00f3n recomendada para inferencia cuantizada local con formato EXL2. Si se prioriza la portabilidad GGUF, llama.cpp es la alternativa adecuada. Para servicio a m\u00faltiples usuarios concurrentes, vLLM constituye el mejor punto de partida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfvLLM o SGLang: cu\u00e1l es m\u00e1s adecuado para producci\u00f3n?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">vLLM es el motor predeterminado para la mayor\u00eda de los despliegues de producci\u00f3n, gracias a su amplio soporte de modelos, formatos de cuantizaci\u00f3n y plataformas de hardware. SGLang ofrece ventajas cuando la carga de trabajo requiere contexto largo extremo, salidas estructuradas, arquitecturas MoE o desagregaci\u00f3n prefill-decode. Se recomienda realizar benchmark de ambos motores con el perfil de carga real.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo emplear llama.cpp para servicio de producci\u00f3n?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">llama.cpp es excelente para uso local, portabilidad y entornos con hardware heterog\u00e9neo, pero no est\u00e1 dise\u00f1ado para servicio de producci\u00f3n a escala. Su backend RPC se documenta como una prueba de concepto. Para despliegues de producci\u00f3n, se recomienda vLLM, SGLang o TensorRT-LLM seg\u00fan la infraestructura disponible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 motor es recomendable para Apple Silicon (Mac)?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MLX\/MLX-LM es la opci\u00f3n nativa para Apple Silicon, aprovechando la arquitectura de memoria unificada. llama.cpp constituye la alternativa cuando se requiere portabilidad GGUF o soporte para un cat\u00e1logo m\u00e1s amplio de modelos. Cabe destacar que el servidor de MLX-LM no est\u00e1 recomendado para producci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEn qu\u00e9 circunstancias vale la pena utilizar TensorRT-LLM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">TensorRT-LLM es recomendable cuando la infraestructura es exclusivamente NVIDIA (H100, H200, B200, GB200, GB300), se requiere el m\u00e1ximo rendimiento posible y se acepta la renuncia a la portabilidad. Resulta especialmente relevante para despliegues FP8\/FP4, servicio multinodo y arquitecturas MoE a escala. La contrapartida es la p\u00e9rdida de compatibilidad con AMD, Apple o Intel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 m\u00e9tricas son esenciales al realizar benchmark de motores?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las m\u00e9tricas fundamentales son: TTFT (Tiempo al primer token), TPOT (Tiempo por token de salida), latencia en percentiles p50\/p95\/p99, tokens por segundo, solicitudes por segundo, utilizaci\u00f3n de memoria GPU y tasa de aciertos de la cach\u00e9 KV. No se deben comparar motores empleando exclusivamente tokens por segundo con un \u00fanico usuario; es necesario probar con concurrencia realista y distribuciones de prompts representativas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEs preferible el paralelismo de tensores o el de tuber\u00eda en ausencia de NVLink?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sin NVLink o NVSwitch, el paralelismo de tuber\u00eda (pipeline parallelism) suele ofrecer mejor rendimiento que el paralelismo de tensores. La documentaci\u00f3n de vLLM advierte sobre esta limitaci\u00f3n para configuraciones como L40S. El paralelismo de tensores requiere operaciones all-reduce frecuentes que resultan especialmente costosas sobre interconexiones PCIe de ancho de banda limitado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSon intercambiables los formatos de cuantizaci\u00f3n entre motores?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No lo son. GGUF, EXL2, EXL3, AWQ, GPTQ, FP8, FP4, formatos MLX y ONNX no son equivalentes entre s\u00ed. Cada motor cuenta con kernels optimizados para formatos espec\u00edficos. El formato adecuado es aqu\u00e9l para el cual el motor objetivo ofrece soporte nativo optimizado. Por ejemplo, llama.cpp emplea GGUF, ExLlamaV2 utiliza EXL2 y TensorRT-LLM opera con sus propios formatos compilados.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Motores de inferencia para LLMs en 2026: guia completa de llama.cpp, vLLM, TensorRT-LLM, SGLang, ExLlamaV3, MLX y TGI. Como elegir el motor correcto segun tu hardware y carga de trabajo.<\/p>\n","protected":false},"author":1,"featured_media":105,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,24,37],"tags":[38],"class_list":["post-102","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia-automatizacion","category-ia-local","category-software","tag-motores-de-inferencia-llms"],"_links":{"self":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":13,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":162,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/posts\/102\/revisions\/162"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/media\/105"}],"wp:attachment":[{"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atlaszn.com\/blog\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}