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
modelen la petición decide qué modelo maneja la consulta.
Ejemplo de llamada a la API para chat completions:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ggml-org/gemma-3-4b-it-GGUF:Q4_K_M",
"messages": [{"role": "user", "content": "Hello!"}]
}'
Peticiones útiles para gestión de modelos:
- Listar modelos y su estado:
curl http://localhost:8080/models
- Forzar carga de un modelo:
curl -X POST http://localhost:8080/models/load \
-H "Content-Type: application/json" \
-d '{"model": "my-model.gguf"}'
- Descargar un modelo:
curl -X POST http://localhost:8080/models/unload \
-H "Content-Type: application/json" \
-d '{"model": "my-model.gguf"}'
Flags importantes al iniciar el router:
--models-dir PATH: carpeta con archivos GGUF.--models-max N: número máximo de modelos cargados simultáneamente (por defecto 4).--no-models-autoload: deshabilita la carga automática; requieres llamadas explícitas a/models/load.
También puedes apuntar a una carpeta local al iniciar:
llama-server --models-dir ./my-models
Arquitectura y ajustes técnicos
El servidor aplica configuraciones globales que heredan todas las instancias de modelo. Por ejemplo:
llama-server --models-dir ./models -c 8192 -ngl 99
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/loado aumenta--models-maxsi tu memoria lo permite. - Usa
--no-models-autoloadpara 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.
Fuente original
https://huggingface.co/blog/ggml-org/model-management-in-llamacpp
