llama.cpp integra router para gestión de modelos | Keryc
llama.cpp ahora incluye un modo router que te permite cargar, descargar y cambiar entre modelos sin reiniciar el servidor. ¿Te suena a Ollama? Exacto: traen una gestión de modelos similar, pero en el ecosistema ligero y OpenAI-compatible de llama.cpp.
Qué trae la nueva función
El servidor llama-server puede iniciarse en modo router simplemente sin especificar un modelo:
llama-server
En ese modo el servidor realiza auto-discovery de modelos en tu caché de llama.cpp (variable LLAMA_CACHE o ~/.cache/llama.cpp) o en una carpeta que indiques con --models-dir. Los modelos descargados anteriormente con llama-server -hf user/model aparecerán automáticamente.
La arquitectura es multiproceso: cada modelo corre en su propio proceso. ¿Por qué importa eso? Porque si un modelo falla, los demás siguen funcionando. Además soporta carga bajo demanda: el primer request que apunte a un modelo lo carga en memoria; las siguientes llamadas son inmediatas porque el modelo ya está cargado.
Cómo usarlo (comandos y ejemplos)
Auto-descubrimiento: escanea la caché por defecto o la carpeta indicada con --models-dir.
Carga bajo demanda: los modelos se cargan al primer request.
Evicción LRU: cuando alcanzas --models-max (por defecto 4), el modelo menos usado se descarga.
Enrutamiento por request: el campo model en la petición decide qué modelo maneja la consulta.
Ejemplo de llamada a la API para chat completions:
Eso significa que todos los modelos cargados usarán ctx-size 8192 y offload completo a GPU (según ngl), a menos que definas presets por modelo.
Puedes establecer ajustes por modelo mediante un archivo de presets:
llama-server --models-preset config.ini
Ejemplo de config.ini:
[my-model]
model = /path/to/model.gguf
ctx-size = 65536
temp = 0.7
Puntos técnicos a considerar:
Aislamiento por proceso reduce riesgo de que un modelo deje caído todo el servicio.
La carga inicial depende del tamaño del modelo y del hardware; planifica tiempos de latencia si cargas bajo demanda.
LRU evita que la memoria crezca sin control, pero puede introducir cargas adicionales si haces cambios frecuentes entre muchos modelos.
Casos de uso y recomendaciones prácticas
¿Para qué te sirve esto en la práctica?
A/B testing entre versiones de un modelo sin reinicios.
Despliegues multi-tenant donde cada cliente usa un modelo distinto.
Desarrollo ágil: cambia de modelo desde la UI sin interrumpir sesiones.
Consejos rápidos:
Si necesitas predictibilidad en latencia, precarga modelos críticos con /models/load o aumenta --models-max si tu memoria lo permite.
Usa --no-models-autoload para controlar exactamente cuándo se consumen recursos.
Aprovecha presets para ajustar ctx-size, temperatura y offload por modelo según sus requerimientos.
Si expones el servidor en red, asegúrate de poner un proxy/reverse proxy y autenticación adecuada.
Reflexión final
Esta actualización trae la flexibilidad que muchos pedían: gestionar modelos sin reiniciar y con aislamiento entre instancias. Es una mejora enfocada en operatividad y experiencia del desarrollador, sin convertir llama.cpp en algo pesado. ¿Quieres probar A/B con dos versiones de un 4B? Puedes hacerlo en minutos y sin reinicios.