Caché KV
Descubra cómo KV Cache optimiza modelos Transformer como los LLM. Descubra cómo esta técnica reduce la latencia de inferencia y aumenta la eficiencia de Ultralytics .
La caché KV (caché clave-valor) es una técnica de optimización fundamental que se utiliza principalmente en
modelos de lenguaje grandes (LLM)
y otras arquitecturas basadas en transformadores para acelerar
la latencia de inferencia y reducir
los costes computacionales. En esencia, la caché KV almacena las matrices de claves y valores generadas por el
mecanismo de atención para
los tokens anteriores en una secuencia. Al guardar estos cálculos intermedios, el modelo evita volver a calcular los estados de atención
para todo el historial de la conversación cada vez que genera un nuevo token. Este proceso transforma la
flujo de trabajo de generación de texto de generación de texto de una
operación de complejidad cuadrática a una lineal, lo que permite interacciones en tiempo real con chatbots y
agentes de IA .
Mecanismo y beneficios
En un transformador estándar Transformer ,
generar la siguiente palabra requiere prestar atención a todas las palabras anteriores para comprender el contexto. Sin almacenamiento en caché,
el modelo tendría que recalcular las relaciones matemáticas para toda la secuencia en cada paso. La caché KV
resuelve esto actuando como un banco de memoria.
-
Mejora de la velocidad: Al recuperar claves y valores precalculados de la memoria, el sistema acelera drásticamente
el motor de inferencia. Esto es esencial para aplicaciones que requieren baja latencia, como la
la inferencia en tiempo real en
los bots de atención al cliente.
-
Eficiencia de recursos: Aunque aumenta el uso de memoria (VRAM), reduce significativamente la capacidad de cálculo
(FLOP) necesaria por token. Esta compensación se gestiona a menudo mediante técnicas como la
cuantificación de modelos o paginación,
de forma similar a como los sistemas operativos gestionan la RAM.
-
Contexto ampliado: la gestión eficiente de la caché KV permite a los modelos manejar un contexto más amplio.
ventana de contexto, lo que les permite procesar documentos largos o mantener conversaciones coherentes durante períodos prolongados.
Aplicaciones en el mundo real
La caché KV es un componente fundamental en la implementación de la IA generativa moderna, pero sus principios también se extienden a la
visión artificial (CV).
-
Chatbots generativos: servicios como
ChatGPT o
Claude dependen en gran medida del almacenamiento en caché de KV. Cuando un usuario
formula una pregunta de seguimiento, el modelo no vuelve a leer todo el historial de 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ídeos: En
comprensión de vídeo ,
los modelos procesan los fotogramas de forma secuencial. Al igual que con los tokens de texto, las características visuales de fotogramas anteriores pueden almacenarse en caché para ayudar
al modelo track o reconocer acciones sin tener que volver a procesar todo el historial del vídeo. Esto es especialmente
relevante para el
el reconocimiento de acciones en las que
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 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 tamaños de lote más grandes
durante el servicio del modelo.
-
Cuantificación de caché KV: Para ahorrar espacio, los desarrolladores suelen aplicar
cuantización de precisión mixta o int8
específicamente a los valores almacenados en caché. Esto reduce el espacio ocupado en memoria, lo que permite
los dispositivos de IA con RAM limitada ejecutar
modelos capaces.
-
Almacenamiento en caché de indicaciones: técnica relacionada en la que los estados KV de una indicación de sistema estático (por ejemplo, «Eres
un asistente de codificación muy útil») se calculan una vez y se reutilizan en muchas sesiones de usuario diferentes. Esta es una
característica fundamental para optimizar la
ingeniería de indicaciones a gran escala
.
Distinguir conceptos relacionados
Es útil diferenciar KV Cache de otros términos relacionados con el almacenamiento en caché y la optimización:
-
Caché KV frente a caché de comandos: La caché KV
normalmente se refiere a la memoria dinámica, token por token, utilizada durante una única secuencia de generación. La caché de comandos
se refiere específicamente al almacenamiento del estado procesado de una instrucción de entrada fija para su reutilización en múltiples
llamadas de inferencia independientes.
-
Caché KV frente a incrustaciones: Las incrustaciones
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 estas incrustaciones dentro de las capas de atención, específicamente con el
propósito de generar secuencias.
-
Caché KV frente a pesos del modelo: Los pesos del modelo
son los parámetros estáticos y aprendidos de la red neuronal. La 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 conocido en el ámbito del procesamiento del lenguaje natural (NLP), el concepto de mantener el estado se aplica a los 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 . Aquí, el rastreador mantiene la identidad de los objetos a lo largo de los fotogramas, de forma conceptualmente similar a como una caché mantiene el
contexto a lo largo 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 deseen gestionar conjuntos de datos e implementar modelos optimizados pueden utilizar la
Ultralytics , que simplifica el proceso desde la anotación de datos hasta la implementación eficiente de
implementación de modelos. 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 almacenamiento en caché.