Breve descripción del principio de KVCache

Durante el proceso de razonamiento de GPT, prueba la siguiente palabra (probabilidad) en función de la parte generada de la pregunta y respuesta completa.

Por ejemplo, nuestra pregunta es [El rey del cielo cubre al tigre en la tierra] y la respuesta es [La pagoda suprime al demonio del río. 】.

Entonces, por primera vez, GPT genera [Tesoro] basado en [El Rey cubre el tigre], y luego genera [Torre] basado en [El Rey cubre el tigre, tesoro], y así sucesivamente hasta que encuentra el terminador.

La QKV de la pregunta [El rey del cielo cubre al tigre de la tierra] en realidad se repite muchas veces. Dado que GPT es una atención unidireccional, el KV de la pregunta de cada capa solo se calcula en función del KV de la pregunta de la capa anterior (o el vector de incrustación de la pregunta), y no se calcula en función del KV de ningún carácter en la respuesta. Se pueden almacenar en caché para evitar esto. Cálculo repetido.

Como se muestra abajo:

Insertar descripción de la imagen aquí

Después de la mejora, nuestro GPT genera [Tesoro] basado en [El Rey cubre el tigre] y KV (El Rey cubre el tigre), y luego genera [Torre] y KV basado en KV (El Rey cubre el tigre). y [Tesoro] (El rey del cielo cubre al tigre en la tierra, tesoro), y así sucesivamente.

En cuanto a por qué Q no se almacena en caché, porque en el escenario de razonamiento solo tomamos la última palabra, luego cada capa genera HS [-1]. HS[-1] se calcula en base a todo V y la última fila A[-1] de la matriz de atención, mientras que A[-1] se calcula en base a Q[-1] y todo K. Q[-1] es solo se calcula en función de la última entrada Se calcula un carácter X[-1].

Así que nos aseguramos de que K y V estén completos pasando KVCache. Solo se pasa el último carácter de entrada, que es el carácter generado por el último GPT. Eso es todo.

Supongo que te gusta

Origin blog.csdn.net/wizardforcel/article/details/133131845
Recomendado
Clasificación