KV Cache
Descubre cómo el caché KV optimiza modelos de transformadores como los LLM. Aprende cómo esta técnica reduce la latencia de inferencia y aumenta la eficiencia para Ultralytics YOLO26.
KV Cache (caché de clave-valor) es una técnica de optimización crítica utilizada principalmente en Large Language Models (LLMs) y otras arquitecturas basadas en Transformer para acelerar inference latency y reducir los costos computacionales. En su núcleo, el caché KV almacena las matrices de Clave y Valor generadas por el attention mechanism para tokens anteriores en una secuencia. Al guardar estos cálculos intermedios, el modelo evita recalcular los estados de atención para todo el historial de la conversación cada vez que genera un nuevo token. Este proceso transforma el flujo de trabajo de text generation de una operación de complejidad cuadrática a una lineal, haciendo viables las interacciones en tiempo real con chatbots y AI agents.
Mecanismo y beneficios#
En un modelo Transformer estándar, generar la siguiente palabra requiere prestar atención a todas las palabras anteriores para entender el contexto. Sin almacenamiento en caché, el modelo necesitaría recalcular las relaciones matemáticas para toda la secuencia en cada paso. El caché KV resuelve esto actuando como un banco de memoria.
- Mejora de velocidad: Al recuperar claves y valores precalculados de la memoria, el sistema acelera drásticamente el inference engine. Esto es esencial para aplicaciones que requieren baja latencia, como real-time inference en bots de servicio al cliente.
- Eficiencia de recursos: Aunque aumenta el uso de memoria (VRAM), reduce significativamente el cómputo (FLOPs) requerido por token. Este equilibrio a menudo se gestiona mediante técnicas como model quantization o paginación, de manera similar a como los sistemas operativos gestionan la RAM.
- Contexto extendido: La gestión eficiente del caché KV permite a los modelos manejar un context window más grande, permitiéndoles procesar documentos largos o mantener conversaciones coherentes durante períodos prolongados.
Aplicaciones en el mundo real#
El caché KV es un componente fundamental en el despliegue de IA generativa moderna, pero sus principios también se extienden a computer vision (CV).
-
Chatbots generativos: Servicios como ChatGPT o Claude dependen en gran medida del almacenamiento en caché KV. Cuando un usuario hace una pregunta de seguimiento, el modelo no vuelve a leer todo el historial del chat desde cero. En su lugar, agrega la nueva entrada a los estados en caché del turno anterior, permitiendo respuestas casi instantáneas.
-
Comprensión de video: En tareas de video understanding, los modelos procesan fotogramas secuencialmente. De manera similar a los tokens de texto, las características visuales de fotogramas pasados se pueden almacenar en caché para ayudar al modelo a rastrear objetos o reconocer acciones sin reprocesar todo el historial del video. Esto es particularmente relevante para el action recognition, donde el contexto temporal es crucial.
Gestión eficiente de la memoria#
A medida que los modelos crecen, el tamaño de la caché KV puede convertirse en un cuello de botella, consumiendo gigabytes de memoria GPU. Los avances recientes se centran en optimizar este almacenamiento.
- PagedAttention: Inspirado en la memoria virtual en los sistemas operativos, PagedAttention (introducido por vLLM) permite que el caché KV se almacene en bloques de memoria no contiguos. Esto reduce la fragmentación y permite tamaños de lote mayores durante el model serving.
- Cuantización del caché KV: Para ahorrar espacio, los desarrolladores suelen aplicar mixed precision o cuantización int8 específicamente a los valores almacenados en caché. Esto reduce la huella de memoria, permitiendo que los dispositivos de edge AI con RAM limitada ejecuten modelos capaces.
- Almacenamiento en caché de prompts: Una técnica relacionada donde los estados KV de un prompt de sistema estático (por ejemplo, "Eres un asistente de programación útil") se calculan una vez y se reutilizan en muchas sesiones de usuario diferentes. Esta es una característica fundamental para optimizar los flujos de trabajo de prompt engineering a escala.
Distinguir conceptos relacionados#
Es útil diferenciar la caché KV de otros términos de caché y optimización:
- Caché KV frente a Prompt Caching: El caché KV generalmente se refiere a la memoria dinámica token por token utilizada durante un único flujo de generación. El almacenamiento en caché de prompts se refiere específicamente a almacenar el estado procesado de una instrucción de entrada fija para ser reutilizado en múltiples llamadas de inferencia independientes.
- Caché KV frente a Embeddings: Los embeddings son representaciones vectoriales de datos de entrada (texto e imágenes) que capturan significado semántico. El caché KV almacena las activaciones (claves y valores) derivadas de estos embeddings dentro de las capas de atención, específicamente con el propósito de generar secuencias.
- Caché KV frente a Model Weights: Los pesos del modelo son los parámetros estáticos aprendidos de la red neuronal. El caché KV consiste en datos dinámicos y temporales generados durante el paso hacia adelante de una secuencia de entrada específica.
Ejemplo: Contexto en modelos de visión#
Aunque el almacenamiento en caché KV es más famoso en PNL, el concepto de mantener el estado se aplica a modelos de visión avanzados. En el ejemplo siguiente, simulamos la idea de pasar el estado (contexto) en un escenario de seguimiento de video utilizando Ultralytics YOLO26. Aquí, el rastreador mantiene la identidad de los objetos a través de los fotogramas, de manera conceptual similar a cómo un caché mantiene el contexto a través de los tokens.
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")Los desarrolladores que buscan gestionar conjuntos de datos y desplegar modelos optimizados pueden utilizar la Ultralytics Platform, que simplifica el flujo de trabajo desde la anotación de datos hasta el model deployment eficiente. Para aquellos interesados en la mecánica más profunda de la atención, bibliotecas como PyTorch proporcionan los bloques fundamentales donde se implementan estos mecanismos de almacenamiento en caché.






