Volver al archivo
#ai#llm#glossary#aigen

Caché KV

El modelo añade una respuesta fragmento a fragmento. Ya ha calculado mucha información sobre el texto anterior, de modo que calcularla desde cero en cada paso repetiría el trabajo. Quieres recordar los resultados que siguen siendo válidos.

KV Cache almacena key y value de las capas de attention. Son listas de números que sirven, respectivamente, para establecer correspondencias entre fragmentos y transmitir su información. No almacena una respuesta preparada ni un resumen de la conversación.

Después de procesar A, B y C, el nuevo fragmento D usa las descripciones guardadas de esas posiciones y añade las suyas. En un modelo con bloqueo del acceso al futuro, los nuevos fragmentos no cambian las descripciones anteriores, por lo que pueden reutilizarse si los ajustes coinciden.

Ahorramos repetir cálculos, pero pagamos memoria por los números almacenados. Con un contexto largo, ese coste crece. Prefill prepara la caché de la entrada conocida y Decode la amplía durante la respuesta. Sigue siendo necesario leer y combinar la información necesaria.

Mecanismo y detalles

En un modelo con enmascaramiento causal, los tokens posteriores no cambian las representaciones de las posiciones anteriores. Esto permite reutilizar la caché para el mismo prefijo y los mismos ajustes del modelo. Attention Is All You Need, §3.1 y §3.2.3, describe la base del flujo de información, y la documentación de Hugging Face: How caching works describe la actualización de la caché en cada capa.

Qué queda del paso anterior

Ilustración propia: el modelo ha procesado los tokens A, B y C. Al procesar D, utiliza las K y V guardadas de las tres posiciones anteriores y añade el par de D. Compara la consulta de la posición actual con las claves disponibles; el resultado utiliza los valores correspondientes. La caché no es una respuesta preparada ni un resumen textual de la conversación.

Almacenar los resultados tiene un coste. Un pequeño ejemplo propio para una capa: cuatro posiciones, dos cabezas KV, tres números en cada vector K y V, y cuatro bytes por número:

2⋅4⋅2⋅3⋅4=192 bytes2\cdot4\cdot2\cdot3\cdot4=192\ \text{bytes}

El primer factor 2 representa las claves y los valores separados. El resultado incluye solo los elementos de los tensores, sin la sobrecarga de asignación. Una caché dinámica completa crece con el número de posiciones almacenadas; las variantes con una ventana limitada pueden eliminar las posiciones más antiguas.

El artículo anterior sobre el escalado de la caché KV [Polski] desarrolla el tema del coste de memoria. El artículo sobre la transferencia de caché entre modelos [Polski] trata un problema distinto: que las dimensiones de los tensores coincidan no garantiza que su significado coincida. Cambiar el modelo o el prefijo exige volver a determinar qué parte de la caché sigue siendo válida. Véase también: PagedAttention describe la organización de la memoria por bloques, y la caché de prefijos, la reutilización de las KV de un prefijo compartido.