Recomendaciones de rendimiento y gestión de memoria para Ollama

Rendimiento óptimo y gestión de memoria en Ollama: consejos esenciales

¿Te has planteado alguna vez cómo montar un servicio privado de LLMs con Ollama? Ya sea en un pequeño datacenter o en un potente PC en casa, la clave está en optimizar el rendimiento sin gastar de más en hardware innecesario. En este artículo, vamos a desglosar los componentes esenciales que influirán en el éxito de tu proyecto. Hablaremos sobre aspectos críticos como VRAM, RAM, CPU, GPU, cuantización y contexto, y cómo cada uno de ellos puede afectar el rendimiento de tu clúster. Además, exploraremos si es mejor agrupar GPUs en un clúster o dedicar una máquina por cliente. ¿Listo para aprender a maximizar tus recursos?

¿Pool de GPU o dedicación 1:1? Decidiendo la mejor arquitectura para Ollama

Al iniciar un SaaS privado con Ollama, surge la primera gran pregunta: ¿deberías optar por un pool centralizado de GPU o asignar una máquina o GPU por cada cliente? Aquí es donde entra la diferencia en el uso de recursos de Ollama y llama.cpp.

  • Nodo «monstruo» con múltiples GPUs: perfecto para manejar colas de peticiones compartidas y maximizar la utilización de la GPU con usuarios simultáneos, además de simplificar la administración.
  • Máquinas 1:1 por cliente: ofrecen mayor aislamiento y son menos complicadas para gestionar, lo que resulta en un consumo de recursos más predecible.

Si eres un ISP pequeño, es crucial entender que Ollama está más orientado a aprovechar una o varias GPUs locales por instancia. Si buscas simplicidad operativa, un par de máquinas bien dimensionadas (con 16-24 GB de VRAM) podrían ser la opción más sensata. Sin embargo, si te sientes aventurero y quieres experimentar, puedes optar por un servidor robusto con varias GPUs, aunque esto aumentará la complejidad de la gestión.

Gestión de memoria y recursos: cómo Ollama optimiza el rendimiento

Ollama, al igual que llama.cpp, se encarga de gestionar los recursos de manera efectiva. Aquí hay algunos puntos esenciales a considerar:

Cómo funciona el mapeo de modelos y la carga en memoria

Llama.cpp utiliza mmap para mapear el archivo del modelo, lo que permite al sistema operativo decidir qué partes se cargan en RAM en cada momento. Ollama, por su parte, se encarga de:

  • Cargar y descargar modelos de VRAM/RAM según la actividad y el tiempo de OLLAMA_KEEP_ALIVE.
  • Compartir modelos entre sesiones para evitar recargas innecesarias.
  • Proporcionar información sobre el uso de memoria y la división CPU/GPU a través de la herramienta ollama ps.

Si notas que un modelo tiene un uso del 60% en CPU y 40% en GPU, eso indica que algunas capas no caben en VRAM, lo que impacta directamente en la velocidad.

¿Qué hacer si el modelo excede la VRAM disponible?

Una de las grandes inquietudes es qué sucede si un modelo no cabe completamente en VRAM. Cuando esto ocurre, Ollama distribuye capas entre GPU y CPU. Sin embargo, el rendimiento no se degrada de manera proporcional. Datos concretos con una RTX 4080 de 16 GB revelan que:

  • Modelos 100% en GPU: alrededor de 60 a 140 tokens/s.
  • Modelos con 70-80% en GPU: caen a 19-50 tokens/s.
  • Modelos que solo utilizan un 20% de GPU: apenas alcanzan 12 tokens/s.

Esto indica que el objetivo principal debe ser que los modelos críticos que utilices encajen completamente en VRAM.

Comparativa entre llama.cpp y Ollama: ¿dónde está la diferencia?

La pregunta frecuente es: “¿por qué elegir Ollama sobre llama.cpp?”. Cada uno tiene su enfoque particular en cuanto a rendimiento y gestión de memoria.

llama.cpp: el motor de alto rendimiento

Llama.cpp está diseñado para optimizar al máximo el rendimiento de CPU y GPU. Es ideal si deseas:

  • Ajustar la cuantización de manera precisa.
  • Controlar el número de capas en GPU.
  • Manejar todos los parámetros finos del modelo.

Es muy potente, pero requiere un conocimiento más avanzado.

Ollama: el facilitador de orquestación

Ollama, escrito en Go, actúa como un orquestador que utiliza llama.cpp como backend. Ofrece:

  • Una interfaz de línea de comandos sencilla.
  • API REST lista para conectar diversas aplicaciones.
  • Detección automática de hardware para optimizar la carga de trabajo.

Si buscas facilidad de uso, Ollama es la opción más clara.

Recomendaciones de hardware: configuración adecuada para un clúster con Ollama

No se trata solo de tener una buena GPU. El equilibrio entre VRAM, RAM, CPU y disco es fundamental.

VRAM: el recurso crucial

La VRAM es esencial. Aquí algunas recomendaciones:

  • 8 GB VRAM: suficiente para modelos pequeños/médios.
  • 16 GB VRAM: ideal para modelos de tamaño mediano a grande.
  • 24 GB o más: necesario para modelos más pesados o múltiples sesiones concurrentes.

RAM y CPU: factores igualmente importantes

La RAM del sistema y la CPU son cruciales, especialmente si Ollama descarga capas al procesador. Recomendaciones:

  • RAM mínima 16 GB: para uso básico.
  • RAM recomendada 32-64 GB: para un uso más serio.
  • CPU con al menos 8 núcleos: para un rendimiento óptimo.

Disco: el almacenamiento que no debes olvidar

Los archivos de modelos ocupan un gran espacio. Considera que:

  • Modelos pequeños: alrededor de 2 GB.
  • Modelos medianos: entre 5-20 GB.
  • Modelos grandes: fácilmente de 40 GB a más.

Siempre es mejor tener un margen de 2-3 veces el tamaño del modelo para evitar problemas.

Cuantización y contexto: claves para el rendimiento

La cuantización y la longitud del contexto son esenciales para el rendimiento.

Opciones de cuantización

Las variantes incluyen:

  • FP16: máxima calidad, pero demanda mucha VRAM.
  • Q8_0: buena calidad con compresión leve.
  • Q4_K_M: la opción más equilibrada para la mayoría de los casos.
  • Q2_K: compresión extrema, pero menos fiable.

Para un SaaS local, Q4_K_M es la mejor opción.

Longitud del contexto y su impacto

El parámetro num_ctx define el número de tokens que el modelo puede manejar. Piensa en esto:

  • Ventanas pequeñas (2K-4K): menos consumo de memoria, pero limitan el contexto.
  • Ventanas medianas (8K-32K): una buena opción equilibrada.
  • Ventanas grandes (64K-128K+): impresionante en teoría, pero muy exigente en VRAM.

Lo ideal es ofrecer planes con contextos de 8K-16K y reservar los más grandes para hardware superior.

Mejores prácticas para un rendimiento óptimo con Ollama

Además del hardware, la configuración y decisiones arquitectónicas pueden afectar el rendimiento.

Garantiza que los modelos críticos estén 100% en GPU

Siempre verifica el uso de GPU antes de ofrecer un modelo a un cliente. Si observas un alto uso de CPU, considera:

  • Cambiar a una cuantización más agresiva.
  • Optar por un modelo más pequeño.
  • Reducir el num_ctx si es necesario.

Ajusta el parámetro OLLAMA_KEEP_ALIVE

Este parámetro define cuánto tiempo un modelo se mantiene en memoria. Opciones:

  • 0: se descarga inmediatamente.
  • X m: mantiene el modelo por un tiempo determinado.
  • -1: mantiene el modelo siempre cargado.

Control de variables de entorno

Ajusta el comportamiento de Ollama con variables de entorno como:

  • OLLAMA_MODELS: ruta de almacenamiento de modelos.
  • OLLAMA_HOST: interfaz del API.
  • OLLAMA_DEBUG: modo de depuración.

Selección de modelos y casos de uso comunes en Ollama

Por último, elegir el modelo adecuado para cada tarea es vital para optimizar el rendimiento.

Modelos para chat y tareas generales

Para soporte y redacción, modelos como:

  • Qwen3 14B: excelente para seguir instrucciones.
  • Mistral 3 14B: equilibrado en calidad y rendimiento.

Modelos para desarrollo y código

Para tareas de programación, considera:

  • qwen3-coder:30b: fuerte en programación.
  • DeepSeek-coder: ligera y efectiva.

Modelos para tareas multimodales

Para análisis de imágenes y texto, busca modelos etiquetados como Vision.

Con esta guía, estarás mejor preparado para lanzar tu servicio privado de LLMs con Ollama y aprovechar al máximo tus recursos.


Publicado

en

por

Etiquetas: