Por que cada palavra seguinte continua barata de gerar.

SRC·13 Source
Para acrescentar uma palavra, deveria reler todo o chat. Mas não relê.

Para acrescentar uma palavra, deveria reler todo o chat. Mas não relê.

Um chatbot solta palavras quase tão rápido quanto você lê. Mas, para escolher cada palavra seguinte, um modelo é feito para olhar para trás tudo o que já foi dito. Faça isso do zero a cada palavra e uma conversa longa andaria a passo de tartaruga. Ela não se arrasta — ela jorra. O truque que a mantém jorrando é toda a história daqui.
Cada palavra nova relê todas as anteriores. Vai se acumulando.

Cada palavra nova relê todas as anteriores. Vai se acumulando.

t=1nt=n(n+1)2n22\sum_{t=1}^{n} t = \frac{n(n+1)}{2} \approx \frac{n^2}{2}
Um modelo escreve uma palavra de cada vez e, para escolher cada uma, olha para trás todo o prefixo. A palavra 2 relê a 1, a 100 relê a 99, a 1000 relê a 999. Como uma mesa telefônica reconectada à mão a cada chamada: a mesma fiação refeita de novo e de novo. Some todo esse retrabalho e o custo sobe com o quadrado do comprimento — o dobro de chat, o quádruplo de trabalho.
Mas o passado nunca muda. Então por que recalculá-lo?

Mas o passado nunca muda. Então por que recalculá-lo?

kj=xjWK,vj=xjWVk_j = x_j W_K, \qquad v_j = x_j W_V
Quando o modelo transforma uma palavra anterior nas duas coisas de que a atenção precisa — uma Key e um Value — elas dependem só daquela palavra. Palavras acrescentadas depois não conseguem voltar e alterá-las. Como uma marca de mão pressionada no cimento fresco: assim que ele endurece, fica fixa para sempre. Calcule uma vez, e pronto.
Então guarde-os. Mantenha uma tabela contínua de Keys e Values.

Então guarde-os. Mantenha uma tabela contínua de Keys e Values.

Attn=softmax ⁣(qtK1:td)V1:t\mathrm{Attn} = \mathrm{softmax}\!\left(\frac{q_t\,K_{1:t}^{\top}}{\sqrt{d}}\right) V_{1:t}
Não refaça o passado — guarde-o. Cada Key e Value que o modelo calcula cai numa tabela que cresce. Para escrever a próxima palavra, ele forma uma Query nova e a consulta contra toda essa tabela guardada. Como o mise en place de um chef: prepare cada ingrediente uma vez e depois é só pegar o que precisa. Essa tabela é a KV cache.
Agora cada palavra nova é barata: codifique uma, dê uma olhada no resto.

Agora cada palavra nova é barata: codifique uma, dê uma olhada no resto.

O(d2)one new word+O(td)the glance    O(td2)re-encode all t\underbrace{O(d^2)}_{\text{one new word}} + \underbrace{O(t\,d)}_{\text{the glance}} \;\ll\; \underbrace{O(t\,d^2)}_{\text{re-encode all } t}
Com a tabela guardada, acrescentar uma palavra quase não custa nada. O modelo codifica só aquela única palavra — um custo fixo, por mais longa que seja a conversa — e depois dá uma olhada rápida nas linhas em cache. Como asfaltar uma estrada: você não repavimenta os quilômetros que ficaram para trás, só adiciona asfalto novo na ponta que avança. A cara recodificação de todo o prefixo simplesmente some.
O porém: essa tabela só cresce. A memória é a nova conta.

O porém: essa tabela só cresce. A memória é a nova conta.

cache bytes=2Lndmodelb\text{cache bytes} = 2 \cdot L \cdot n \cdot d_{\text{model}} \cdot b
Você comprou velocidade com espaço. A cache guarda dois vetores por camada, para cada palavra até agora — e só incha conforme a conversa avança. Em contextos longos ela dispara para gigabytes, e isso, não o processamento, vira a parede. Como um trilheiro que nunca larga nada: as anotações que te mantêm rápido também se empilham nas suas costas, passo após passo.
Leia o prompt uma vez. Depois transmita — uma palavra barata por vez.

Leia o prompt uma vez. Depois transmita — uma palavra barata por vez.

Isso é a KV cache: trocar memória por tempo, para que o passado nunca seja recalculado. Ela divide o trabalho em dois — leia todo o seu prompt numa passada paralela para preencher a tabela e depois transmita cada palavra acrescentando uma única linha e olhando para trás. Como um trem de carga: você não o reconstrói para ir mais longe — engata mais um vagão e segue rolando.
Ele pode acrescentar à sua memória. Nunca pode revisá-la.

Ele pode acrescentar à sua memória. Nunca pode revisá-la.

🌱 A cache é somente-acréscimo. Cada palavra que o modelo viu fica fixa no instante em que cai — guardada com perfeição, nunca reescrita, como um disco gravado uma vez e apenas reproduzido. E cada novo pensamento ainda precisa olhar para trás tudo isso. Então, uma memória à qual você só pode acrescentar — nunca editar, nunca encurtar — é uma forma de liberdade, ou um peso que só pode crescer?
toque →deslize ↑ para maisdeslize ↓ para sair