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_ctxen 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ón | num_ctx |
|---|---|
| Chat corto | 2048 |
| Chat largo | 4096-8192 |
| RAG de documentos | 8192-16384 |
| Revisión de código larga | 16384-32768 |
| Documentos muy largos | 32768+ |
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_ctxde 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_ctxmá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
- BotServ.de Ollama Performance
- BotServ.de Ollama Benchmarks de modelos
- BotServ.de Ollama RAG
- BotServ.de Ollama Modelfiles
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
- Ollama Modelfile: https://github.com/ollama/ollama/blob/main/docs/modelfile.md
- Visualización de tokenizador: https://platform.openai.com/tokenizer
- KV Cache: https://arxiv.org/abs/1911.02150
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.


