Un modelo entrenado es un archivo grande de números, sus pesos. Para usarlo, una aplicación necesita un servidor de : un programa que carga los pesos en memoria, recibe solicitudes y genera respuestas con la rapidez y el costo necesarios para que sea útil. Es sobre todo un problema clásico de infraestructura (capacidad, muchos usuarios a la vez, aislamiento, autenticación) con algunas particularidades propias.
Esta lección cubre cinco decisiones: si correr los modelos tú mismo o usar un servicio hospedado, cómo hacer que un modelo quepa en memoria, qué hace el motor que lo ejecuta, qué ofrece la API común cuando muchos clientes comparten un servidor y qué determina el costo y la velocidad. Adapta es el ejemplo del lado del servidor; docket, el del lado del cliente.
Correrlo tú mismo o usar una API hospedada
| API hospedada | Servidor propio | |
|---|---|---|
| Modelos | los más capaces del mercado | modelos de pesos abiertos |
| Costo | por token | hardware y operación, fijo |
| Datos | salen hacia el proveedor | quedan en tu infraestructura |
| Operación | casi ninguna | tuya: GPUs, actualizaciones, monitoreo |
| Personalización | lo que ofrezca el proveedor | total, incluidos tus propios adapters |
No es una elección binaria: muchos equipos usan un modelo hospedado para las tareas difíciles y uno local para el trabajo de alto volumen o sensible.
Hacer que el modelo quepa
El tamaño de un modelo se cuenta en parámetros, los números individuales que aprendió. A 16 bits cada uno, un modelo de 7 mil millones de parámetros necesita unos 14 GB de memoria solo para los pesos. La guarda cada número con menos precisión, por ejemplo 4 bits en lugar de 16, como una foto comprimida que conserva casi toda la imagen en un archivo más pequeño. El modelo usa menos memoria y corre más rápido, a cambio de una pérdida de calidad que depende del modelo, del método y de la tarea.
Dos formatos de archivo aparecen seguido. , el que usa el popular motor llama.cpp, es un solo archivo con los pesos (a menudo cuantizados) y todo lo necesario para usarlos. es el formato habitual en el ecosistema de Hugging Face, normalmente en precisión completa o media.
Qué hace el motor
Generar texto tiene dos fases. Primero el motor lee todo el de una vez (prefill). Después escribe la respuesta un a la vez, es decir, una palabra o un pedazo de palabra (decode). Para no reprocesar el prompt en cada paso, guarda notas de lo que ya leyó: la KV cache. Esas notas crecen con el largo del contexto y con la cantidad de solicitudes en curso, por eso los contextos largos y los muchos usuarios simultáneos compiten por la misma memoria.
- Promptla solicitud completa
- Prefilllo lee todo de una vez
- KV cachenotas de todo lo leído
- Decodeescribe un token
cada token nuevo se suma a las notas y el decode vuelve a correr
Un modelo base, muchos comportamientos
Un adapter es un archivo pequeño que se aplica sobre un modelo base para cambiar su comportamiento, un poco como un lente sobre una cámara. Así un mismo modelo base puede ofrecer muchos comportamientos, eligiendo el adapter en cada solicitud. Cuánto cuesta depende del motor. En el backend llama.cpp de Adapta, cada combinación de base y adapter es una copia completa en memoria. En vLLM, varios adapters comparten un mismo modelo base cargado y pueden atenderse en el mismo lote, hasta un límite configurado.
En Adapta
- Backend llama.cppuna copia completa por combinación
- Base + adapter A
- Base + adapter B
- Base + adapter C
- Backend vLLMuna base, adapters a demanda
- Base compartida
- Adapters A, B y C
La API compatible con OpenAI
El formato de solicitudes de chat completions de OpenAI se volvió el idioma común entre aplicaciones y modelos; la mayoría de los servidores y proveedores lo aceptan. Puedes cambiar de proveedor cambiando una dirección y un nombre de modelo. Pero "compatible" no significa "equivalente". El soporte de herramientas, , streaming (enviar la respuesta a medida que se escribe) o el reporte de tokens en caché varía entre servidores.
Compartir un servidor
Cuando varios equipos o clientes comparten un servidor, un esquema llamado , cada llamada tiene que responder dos preguntas: quién llama y a qué puede acceder. (docket, en cambio, es software beta para un solo operador, sin tenants ni cuotas, según su README).
En conjunto, una solicitud de chat a Adapta pasa por estos pasos:
En Adapta
- Revisar la llavedebe coincidir con el endpoint pedido
- Armar el promptsuma los documentos del proyecto, si hay, recortados para que quepan
- Generaruna solicitud a la vez por modelo
- Contar y responderse registran los tokens y sale la respuesta
Qué determina el costo y la velocidad
- Largo de la respuesta. El prompt se lee en paralelo, pero la respuesta se escribe token a token. Las respuestas largas dominan la espera, y los proveedores suelen cobrar más por los tokens de salida.
- Tamaño del contexto. Más contexto significa más trabajo en el prefill y una KV cache más grande.
- Batching (procesar en lotes). Agrupar solicitudes aprovecha mejor la GPU, pero una solicitud individual puede esperar más.
- Caché de prompts. Muchos servicios reutilizan a menor precio un inicio de prompt idéntico y estable, como las instrucciones de sistema y las definiciones de herramientas.
- Tamaño del modelo. El factor más grande. De ahí el : enviar cada tarea al modelo más pequeño que la resuelva bien.
El routing y los se ven a fondo en Contexto, routing y costo.
En la práctica
La decisión central es qué tráfico justifica correr tu propia inferencia.
- Datos que no pueden salir de tu infraestructura vuelven el autohospedaje un requisito, no una opción.
- Un volumen alto y constante paga la capacidad fija; el tráfico en ráfagas suele salir más barato por token en una API hospedada.
- Alguien tiene que operarlo: las GPUs, las actualizaciones de modelos y la seguridad del endpoint. Un servidor sin auditar expuesto a la red es un riesgo mayor que una API hospedada.
- Mide latencia y calidad con tu propio tráfico antes de comprometerte. Los números genéricos rara vez se trasladan.
Para profundizar
La documentación de Adapta profundiza en el lado del servidor, y la de docket en el del cliente (en inglés):
- Learning the system explica GGUF, la cuantización y por qué un modelo cargado atiende las solicitudes una por una, con analogías cotidianas.
- Architecture muestra los contenedores de Adapta y sigue una solicitud de chat desde la revisión de la llave hasta la respuesta.
- Operations runbook da los tamaños de memoria por modelo y configura el backend opcional con vLLM para muchos adapters.
- Models, gateways, and coding harnesses muestra cómo docket registra un endpoint compatible con OpenAI y enumera lo que esa compatibilidad no cubre.
Para llevar
- Servir un modelo es trabajo de infraestructura: memoria, concurrencia, autenticación y costo, con la KV cache como recurso central.
- La cuantización cambia algo de calidad por memoria y velocidad; evalúa en condiciones parecidas a las de servicio.
- La API compatible con OpenAI facilita cambiar de proveedor, pero no garantiza las mismas funciones.
- Los adapters permiten que un modelo base tenga muchos comportamientos; el costo depende de si el motor comparte la base entre adapters.
- El largo de la respuesta y el tamaño del modelo dominan la latencia; el routing y la caché son las palancas principales.
Comprueba lo aprendido
¿Por qué los contextos largos y los muchos usuarios simultáneos compiten en un mismo servidor?
Ambos hacen crecer la KV cache: guarda notas de cada token de contexto, para cada solicitud en curso. Los dos consumen la misma memoria.
¿Por qué el backend llama.cpp de Adapta escala mal con muchos endpoints con fine-tuning?
Cada combinación de base y adapter es una copia completa en memoria, y solo unas pocas caben a la vez. vLLM permite que varios adapters compartan un mismo modelo base cargado.
¿Qué significa que un servidor sea "compatible con OpenAI" y qué no garantiza?
Acepta el mismo formato de solicitud y respuesta de chat completions, así que un cliente puede cambiar de servidor cambiando la dirección y el nombre del modelo. No garantiza el mismo soporte de herramientas, salida estructurada, streaming o reporte de uso.