Skip to content
BotServBotServ
OllamaContextonum_ctxTokenVRAM

Entender la longitud de contexto en Ollama

Longitud de contexto, límites de tokens y num_ctx en Ollama. Equilibra VRAM, velocidad y calidad.

S

schutzgeist

4 min read
Entender la longitud de contexto en Ollama

Entender la longitud de contexto en Ollama

Qué cubre este artículo

  • Qué significa la longitud de contexto.
  • Cómo se cuentan los tokens.
  • Cómo funciona num_ctx en Ollama.
  • La relación entre contexto, VRAM y velocidad.
  • Cómo elegir la longitud correcta.

Introducción: Entender la longitud de contexto en Ollama

La longitud de contexto describe cuántos tokens puede procesar un modelo a la vez. Esto incluye el prompt del sistema, la pregunta, el historial de chat y los documentos de RAG. Cuanto mayor sea el contexto, más información de fondo puede utilizar el modelo. Sin embargo, un contexto más largo requiere más VRAM y tiempo de cálculo. Si estableces la longitud de contexto demasiado alta, arriesgas comportamientos lentos o bloqueos del sistema.

Este artículo explica cómo Ollama maneja la longitud de contexto y cómo configurarla de forma óptima.

Términos clave

  • Token: Unidad de texto pequeña, aproximadamente una parte de palabra.
  • Longitud de contexto: Número de tokens que procesa el modelo.
  • num_ctx: Parámetro de Ollama para la longitud de contexto.
  • VRAM: Memoria de video de la GPU.
  • Prompt-Eval: Procesamiento del contexto de entrada.
  • KV-Cache: Búfer para los valores de atención.
  • Truncation: Corte de contextos demasiado largos.
  • Sliding Window: Ventana limitada para tokens anteriores.

Contar tokens

Los tokens no son palabras. Una palabra puede dividirse en varios tokens. Las palabras cortas suelen ser un token, mientras que las palabras largas o compuestas pueden ser varios. Los caracteres especiales y los acentos pueden generar tokens adicionales.

Ejemplo:

  • “Hola” = 1-2 tokens.
  • “BotServ.de” = 3-4 tokens.
  • “Inteligencia Artificial” = aprox. 4-6 tokens.

num_ctx en Ollama

num_ctx establece la longitud máxima de contexto:

ollama run llama3.1
>>> /set parameter num_ctx 8192

O mediante un Modelfile:

PARAMETER num_ctx 8192

O mediante la API:

{
  "model": "llama3.1",
  "prompt": "...",
  "options": {
    "num_ctx": 8192
  }
}

Contexto por defecto

Muchos modelos tienen un valor predeterminado, a menudo 2048 o 4096. Esto ahorra VRAM, pero limita el contexto. En Ollama, num_ctx a menudo puede establecerse mucho más allá del valor predeterminado si el modelo y el hardware lo permiten.

Requisitos de VRAM

La longitud de contexto y VRAM están relacionadas:

VRAM ~ Tamaño del modelo + KV-Cache
KV-Cache crece con num_ctx * (capas + tamaño_oculto)

Un contexto el doble de largo requiere significativamente más memoria. Con modelos de 7B y 4096 tokens, generalmente son suficientes 8-12 GB. Con 32k tokens, pueden ser necesarios 20-30 GB.

Velocidad

Un contexto largo ralentiza principalmente la evaluación del prompt. La generación en sí también puede volverse más lenta, porque hay que leer más KV-cache por capa. Para chats en tiempo real, el contexto no debe ser innecesariamente grande.

Cuándo necesitar mucho contexto

  • Resumir documentos largos.
  • Chat con historial extenso.
  • RAG con muchas superposiciones de fragmentos.
  • Revisiones de código en múltiples archivos.

Cuándo necesitar poco contexto

  • Escenarios de pregunta-respuesta cortos.
  • Chatbots rápidos.
  • Memoria limitada.
  • Las respuestas rápidas son más importantes que el contexto.

Valores prácticos

Aplicaciónnum_ctx
Chat corto2048
Chat largo4096-8192
RAG de documentos8192-16384
Revisión de código larga16384-32768
Documentos muy largos32768+

No todos los modelos soportan todas las longitudes. Verifica la descripción del modelo.

Contexto demasiado grande

Consecuencias:

  • Respuesta lenta.
  • OOM, el modelo se bloquea.
  • Mensaje de error por VRAM insuficiente.
  • Mala calidad, porque el modelo olvida las partes antiguas.

Limitar el contexto

  • Incluir solo documentos relevantes en el prompt.
  • Reducir el tamaño de los fragmentos.
  • Resumir el historial de chat.
  • Establecer num_ctx de forma realista.

Contar y probar

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "prompt": "...texto largo...",
  "options": {
    "num_ctx": 8192
  },
  "stream": false
}'

Observa el VRAM durante la llamada:

watch -n 1 nvidia-smi

Consejos

  • No establecer num_ctx más grande de lo necesario.
  • Respetar los límites del modelo.
  • Estimar tokens de antemano.
  • Dividir documentos largos en fragmentos.
  • Resumir el historial de chat regularmente.
  • Hacer benchmarks con diferentes longitudes.

Enlaces y referencias adicionales

FAQ: Longitud de contexto en Ollama

¿Qué es num_ctx? Parámetro de Ollama para la longitud máxima de contexto.

¿Cuántos tokens caben en 8 GB de VRAM? Con un modelo de 7B en cuantización Q4, dependiendo del modelo, 2k-8k.

¿Puedo aumentar num_ctx arbitrariamente? Solo hasta el límite que soportan el modelo y el hardware.

¿Por qué el modelo se vuelve lento con contexto largo? Porque hay que calcular y leer más KV-cache.

¿Cuántos tokens tiene mi prompt? Verifica con ollama show o herramientas de tokenización externas.

Fuentes y lecturas adicionales

Resumen: Entender la longitud de contexto en Ollama

La longitud de contexto determina cuánta información de fondo puede considerar Ollama. Más contexto ayuda con documentos largos o historiales de chat, pero consume VRAM y tiempo. El parámetro num_ctx permite un control sencillo. Si mantienes el equilibrio entre contexto, tamaño del modelo y requisitos de hardware, obtendrás buenos resultados sin caídas de rendimiento inesperadas.

Volver al blog
Share:

Entradas relacionadas