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.
La memoria caché KV (Key-Value Cache) es una técnica de optimización crítica utilizada principalmente en Large Language Models (LLMs) y otras arquitecturas basadas en Transformer para acelerar la inference latency y reducir los costes computacionales. En esencia, la memoria caché KV almacena las matrices de clave (Key) y valor (Value) generadas por el attention mechanism para los tokens anteriores en una secuencia. Al guardar estos cálculos intermedios, el modelo evita recalcular los estados de atención de 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.
Link to this sectionMecanismo 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 caché, el modelo tendría que recalcular las relaciones matemáticas de toda la secuencia en cada paso. La caché KV soluciona 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 la real-time inference en bots de atención al cliente.
- Eficiencia de recursos: Aunque aumenta el uso de memoria (VRAM), reduce significativamente el cómputo (FLOPs) requerido por token. Este compromiso se gestiona a menudo mediante técnicas como la model quantization o paginación, de forma similar a como los sistemas operativos gestionan la RAM.
- Contexto extendido: Una gestión eficiente de la caché KV permite a los modelos manejar una context window más grande, lo que les permite procesar documentos largos o mantener conversaciones coherentes durante periodos prolongados.
Link to this sectionAplicaciones en el mundo real#
La caché KV es un componente fundamental en el despliegue de la IA generativa moderna, pero sus principios también se extienden a la computer vision (CV).
-
Chatbots generativos: Servicios como ChatGPT o Claude dependen en gran medida de la 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, añade la nueva entrada a los estados almacenados en caché del turno anterior, lo que permite respuestas casi instantáneas.
-
Comprensión de vídeo: En tareas de video understanding, los modelos procesan los fotogramas de forma secuencial. Al igual que los tokens de texto, las características visuales de los fotogramas anteriores se pueden almacenar en caché para ayudar al modelo a seguir objetos o reconocer acciones sin tener que volver a procesar todo el historial del vídeo. Esto es especialmente relevante para el action recognition, donde el contexto temporal es crucial.
Link to this sectionGestió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 de los sistemas operativos, PagedAttention (introducido por vLLM) permite que la caché KV se almacene en bloques de memoria no contiguos. Esto reduce la fragmentación y permite mayores tamaños de lote durante el model serving.
- Cuantización de la caché KV: Para ahorrar espacio, los desarrolladores a menudo aplican mixed precision o cuantización int8 específicamente a los valores almacenados en caché. Esto reduce la huella de memoria, permitiendo que dispositivos de edge AI con RAM limitada ejecuten modelos capaces.
- Caché de prompts: Una técnica relacionada donde los estados KV de un sistema de prompt 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 central para optimizar los flujos de trabajo de prompt engineering a escala.
Link to this sectionDistinguir conceptos relacionados#
Es útil diferenciar la caché KV de otros términos de caché y optimización:
- Caché KV vs. Prompt Caching: La caché KV se refiere normalmente a la memoria dinámica, token a token, utilizada durante un único flujo de generación. La caché de prompts se refiere específicamente al almacenamiento del estado procesado de una instrucción de entrada fija para ser reutilizada en múltiples llamadas de inferencia independientes.
- Caché KV vs. Embeddings: Los embeddings son representaciones vectoriales de datos de entrada (texto o imágenes) que capturan el significado semántico. La 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 vs. Model Weights: Los pesos del modelo son los parámetros estáticos aprendidos de la red neuronal. La caché KV consiste en datos dinámicos temporales generados durante la pasada hacia adelante (forward pass) de una secuencia de entrada específica.
Link to this sectionEjemplo: Contexto en modelos de visión#
Aunque la caché KV es más famosa 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 vídeo utilizando Ultralytics YOLO26. Aquí, el rastreador mantiene la identidad de los objetos a través de los fotogramas, conceptualmente similar a como una 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 un model deployment eficiente. Para aquellos interesados en los mecanismos más profundos de la atención, bibliotecas como PyTorch proporcionan los bloques fundamentales donde se implementan estos mecanismos de caché.






