Salta al contingut
Entendre els LLMs
Bloc 4avançat2-3 h
IntuïtiuMatemàtic

Abans d'això: L'arquitectura Transformer, Anatomia d'un LLM modern

14 · Context llarg i atenció eficient

Idea central: el context llarg és alhora un problema de cost (O(L2)O(L^2)), un problema de generalització posicional (el model mai no ha vist posicions tan altes) i un problema de capacitat d'ús (tenir la informació al context no garanteix fer-ne cas).


1. Els tres problemes, per separat# sense fórmules

ProblemaSímptomaSolucions
Cost computacionallatència i memòria disparadesFlashAttention, atenció esparsa, GQA/MLA, atenció lineal
Extrapolació posicionalel model es trenca més enllà del context entrenatRoPE scaling (NTK, YaRN), ALiBi, entrenament per fases
Ús efectiu del context"es perd al mig", ignora informació presentdades d'entrenament de context llarg, reordenació, RAG

Confondre'ls porta a conclusions errònies del tipus "aquest model té 1M de context però no serveix": la finestra nominal, la finestra entrenada i la finestra efectiva són tres coses diferents.

Els tres problemes, per separat

«1M de context però no serveix» barreja tres coses diferents. Mesura-les una per una sobre el mateix model i mira que no tenen res a veure.

Un mini-GPT de 32 dimensions i 2 capes entrenat amb seqüències de 32 tokens, sobre el mateix corpus en català que la resta del curs. Amb 150 passos ja es veuen els dos efectes; amb 400, la pèrdua baixa per sota de la fita del bigrama (2,30) i el contrast és més net. El problema del cost ja és mesurat i no demana entrenar res.

  • parelles d’atenció: creixen amb L²
  • KV-cache: creix amb L

Les dues rectes tenen pendents diferents i és tota la qüestió: passar de 2k a 32k multiplica el cache per 16 i les parelles d'atenció per 256. El cost d'atenció és el que domina, i és el que FlashAttention i els patrons esparsos van a buscar —cadascun per un costat diferent: l'un no el redueix i l'altre sí.

Quin problema mires

Cadascun es mesura amb una magnitud diferent, i és aquesta la qüestió.

32 tokens

Canviar-ho torna a començar l'entrenament.

128 tokens

4,0× el context entrenat.

passos
0
pèrdua
—
dins del context
—
més enllà
—
finestra efectiva
—
de les que li caben
—
Entrena el model per mesurar els problemes 2 i 3

El primer problema —el cost— es compta sense cap model i ja és al gràfic. Els altres dos demanen un model entrenat, perquè el que es mesura és com de bé prediu: la pèrdua a posicions que no ha vist mai, i si fa cas o no del context que té.

La conseqüència pràctica de la taula: quan llegeixis que un model té un context d'un milió, pregunta tres coses diferents. Quant costa un prompt d'aquella llargada (problema 1), amb quantes dades d'aquella llargada s'ha entrenat (problema 2), i quin benchmark de context llarg ha passat que no sigui NIAH (problema 3). Les tres respostes són independents i cap no implica les altres.

2. FlashAttention: la mateixa matemàtica, molta menys memòria# sense fórmules

L'atenció ingènua materialitza S=QK⊤∈RL×L\mathbf{S}=\mathbf{Q}\mathbf{K}^\top\in\mathbb{R}^{L\times L} a la HBM. Amb L=32,000L=32{,}000 i 32 caps, són desenes de GB només d'scores.

FlashAttention (Dao et al., 2022; v2 2023; v3 2024) reorganitza el càlcul per blocs (tiling) dins la SRAM del xip i usa la softmax en línia (estadístiques acumulatives) per no haver de guardar mai la matriu sencera. En el backward, recomputa el que cal.

  • És exacta (no és una aproximació).
  • Passa de O(L2)O(L^2) a O(L)O(L) de memòria.
  • És IO-aware: el guany ve de reduir moviments de memòria, no FLOPs. Aquesta és la lliçó general del hardware modern: el coll d'ampolla és l'ample de banda de memòria, no el càlcul.

Avui és transparent: F.scaled_dot_product_attention de PyTorch ja en fa servir un kernel equivalent.

FlashAttention: la mateixa resposta, molta menys memòria

Si fa els mateixos FLOPs i dona el mateix resultat, d'on surt el guany? Mou la mida del bloc i mira els dos comptadors alhora.

O(L²)O(L·B)
  • atenció ingènua: la matriu sencera
  • per blocs de 16: només un tros

Les dues escales són logarítmiques. La recta de dalt té pendent 2 i la de baix, 1: doblar L quadruplica la memòria de l'una i només dobla la de l'altra. A 32k tokens la distància és de 2.048×, i és la raó per la qual hi ha models de context llarg.

Les estadístiques acumulatives

El que fa possible no veure la fila sencera abans de començar a sumar són dos números per fila: el màxim corrent mm i la suma corrent ℓ\ell. Quan un bloc nou porta un màxim més gros, el que ja s'havia acumulat es reescala pel factor em−m′e^{m - m'} i s'hi continua sumant:

màxim noum′=max⁡(m,  max⁡blocsj)m' = \max(m,\; \max_{\text{bloc}} s_j)
sumaℓ←ℓ em−m′+∑blocesj−m′\ell \leftarrow \ell\,e^{m-m'} + \textstyle\sum_{\text{bloc}} e^{s_j-m'}
acumuladoro←o em−m′+∑blocesj−m′vj\mathbf{o} \leftarrow \mathbf{o}\,e^{m-m'} + \textstyle\sum_{\text{bloc}} e^{s_j-m'}\mathbf{v}_j
al finalcontext=o/ℓ\text{context} = \mathbf{o}/\ell

Amb els controls d'ara hi ha hagut 59 reescalades sobre 576 visites a un bloc. Les altres no han calgut: quan el màxim no puja, el factor val exactament 1 i no es toca res —i per això la de blocs no acumula error com es podria témer.

L = 96

El càlcul es fa de debò a aquesta longitud. La corba de sota extrapola els comptadors fins a 32k.

16 claus

Amb 16, la matriu de puntuacions es materialitza en 6 trossos de 96×16.

#5

Canvia els vectors. La conclusió no s'hi mou: prova-ho.

memòria ingènua
9,2 k
memòria per blocs
1,5 k
reducció
6,0×
MAC ingènua
148,99 k
MAC per blocs
148,99 k
FLOPs extra
0,67 %
La diferència amb l'atenció ingènua és de 1,3 ULP; una finestra lliscant en fa 2,65·10¹⁵

«Exacta» vol dir que calcula la mateixa funció, no que en surtin els mateixos bits. Reassociar una suma en coma flotant mou l'últim bit, i això és inevitable —és el mateix fenomen que el §6 del fitxer 15 invoca per dir que temperature=0 no dona determinisme bit a bit. El que distingeix una reordenació d'una aproximació és la magnitud, i es veu posant al costat dues tècniques que sí que canvien la resposta:

Contra l'atenció ingènuadiferència màximaen ULPquè és
Softmax en línia per blocs5,55·10⁻¹⁶1,3reordenació de sumes
Finestra lliscant (w = 24)1,182.653,1 Taproximació
Atenció lineal φ(Q)(φ(K)ᵀV)0,891.994,6 Tuna altra funció

Entre 1,3 ULP i 2.653,1 T hi ha uns quants ordres de magnitud, i és tota la diferència entre «l'últim bit balla» i «la resposta és una altra».

Cap de les dues versions no és «la bona»: l'ingènua és a 1,3 ULP de la veritat i la de blocs, a 1,3

La prova que no és una aproximació: es calcula la mateixa atenció una tercera vegada amb suma compensada —que dona gairebé el doble de precisió— i es mira a quina distància n'està cadascuna. Si la versió per blocs fos una aproximació, la seva columna creixeria en fer el bloc més petit, perquè hi hauria més reescalades i cada una perdria una mica. Mira què passa de debò:

blocreescaladesULP de la ingènuaULP de la de blocs
12801,31,3
22261,31,3
41661,31,3
81111,31,3
16591,31,3
32301,31,3
6491,31,3

L'última columna no creix: amb blocs d'una clau hi ha 280 reescalades i amb un sol bloc n'hi ha 0, i la precisió és la mateixa. Aquesta és la prova: una aproximació que acumulés error a cada reescalada no podria donar la mateixa columna amb 280 que amb cap.

Les dues versions queden a 0,0 ULP l'una de l'altra respecte de la referència —1,3 la ingènua i 1,3 la de blocs— i quina de les dues hi queda més a prop és la mateixa a totes dues. Mou la llavor i l'ordre s'intercanvia: cap de les dues no és sistemàticament millor, que és exactament el que vol dir que totes dues siguin arrodoniments correctes del mateix número.

Els MAC coincideixen exacte (148.992) i la memòria es divideix per 6,0

Aquesta és la frase del text —«el guany ve de reduir moviments de memòria, no FLOPs»— amb els dos comptadors al costat. Els productes escalars de QK⊤QK^\top i les acumulacions de PVPV són els mateixos, a la unitat: 148.992 contra 148.992. El que canvia és quanta matriu de puntuacions hi ha viva alhora: 9.216 escalars contra 1.536.

I un matís que el text s'estalvia i que el comptador destapa: els FLOPs no són exactament els mateixos. Reescalar l'acumulador quan apareix un màxim més gros costa 1.003 multiplicacions de més, que aquí són un 0,67 %. Amb blocs de la mida que fa servir un kernel de debò —64 o 128 claus— cauen per sota de l'1 %, i per això el text hi pot dir «els mateixos» sense mentir gaire. És el bescanvi sencer: uns FLOPs de regal a canvi de no tocar la HBM.

La lliçó general va més enllà de l'atenció i és la del maquinari modern sencer: moure un byte costa més que multiplicar-lo. Un algorisme que fa la mateixa feina però la fa a prop del processador guanya, i un que fa menys feina però l'escampa per la memòria perd. El fitxer 15 és aquesta mateixa idea aplicada al serving: generar un token demana llegir tots els pesos, i per això el decode va limitat per l'ample de banda i no per la potència.

3. Patrons d'atenció esparsa# sense fórmules

Si no pots atendre-ho tot, atén selectivament:

  • Finestra lliscant (Mistral, Longformer): cada token mira els ww anteriors. Amb nn capes, el camp receptiu efectiu és n×wn\times w.
  • Atenció global + local: uns quants tokens especials veuen tota la seqüència (BigBird, Longformer).
  • Alternança de capes (Gemma 2/3, Llama 4): capes de finestra local alternades amb capes d'atenció completa (p. ex. 5:1). Retalla molt el KV-cache mantenint la capacitat de fer salts llargs.
  • Atenció esparsa apresa / nativa (NSA de DeepSeek, etc.): el model aprèn quins blocs comprimir, seleccionar o mirar amb finestra.
  • StreamingLLM: manté uns pocs attention sinks inicials + una finestra recent → permet generació infinita amb memòria constant (però sense recordar el mig).

Patrons d'atenció esparsa

Si no pots atendre-ho tot, què hi perds? Mira el camp receptiu i el cache alhora: cada patró els bescanvia d'una manera diferent.

La línia de punts és l'atenció completa, on cada consulta abasta tot el seu passat. La línia plena és el patró triat: quan es queda plana, el camp receptiu ha tocat sostre i per molt llarga que es faci la seqüència, no arribarà més enrere.

Qui pot mirar qui, a la capa 1 i després de les 4

Una capa
230 de 1.176 parelles · 20 %
Abast acumulat després de 4 capes
680 de 1.176 parelles · 58 %

A l'esquerra, la màscara d'una capa; a la dreta, on arriba la influència després de totes. La banda diagonal de l'esquerra s'eixampla a la dreta per acumulació: és així com una finestra estreta acaba veient lluny, i és exactament el que la fórmula n⋅wn\cdot w resumeix. Es dibuixen les primeres 48 posicions.

Cada token mira els w anteriors (Mistral, Longformer). El cache es queda a w tokens passi el que passi, i el camp receptiu creix amb la profunditat.

4 tokens enrere

Quants tokens anteriors pot mirar cadascun.

2

Tokens del principi que tothom pot mirar. Només els fan servir global+local i StreamingLLM.

1 completa de cada 4

Gemma 2/3 fa servir 1:5; Llama 4, una proporció semblant.

4 capes
L = 64
camp receptiu
17 tok
fórmula n·w+1
17
cache / capa
5,0 claus
reducció de cache
12,80×
parelles d’atenció
1,2 k
contra l’atenció completa
15 %
El camp receptiu mesurat és 17 i la fórmula n·w+1 en diu 17

La fila del text diu que «amb nn capes, el camp receptiu efectiu és n×wn \times w». Aquí no s'aplica la fórmula: s'arrenca de la identitat —cada posició s'influeix a si mateixa— i a cada capa es propaga quina posició pot influir quina, componint la màscara d'aquella capa amb l'abast acumulat. Amb finestra lliscant, les dues xifres coincideixen sempre, i el «+1» és la posició mateixa.

La raó de mesurar-ho en comptes de calcular-ho és la fila següent de la taula: amb alternança de capes la fórmula no val, i la propagació sí. Amb finestra 4 i 4 capes, la fórmula diria 17; amb una capa completa cada 4, el que surt de debò és 64. Una sola capa que ho miri tot recupera el camp receptiu sencer, i el cache el paga només aquella capa.

Els cinc patrons, amb els mateixos paràmetres
Patrócamp receptiuarriba al token 0?claus al cachereduccióparelles
Atenció completa64✓2561,00×8,3 k
Finestra lliscant17✗2012,80×1,2 k
Global + local64✓289,14×1,7 k
Alternança de capes64✓793,24×3,0 k
StreamingLLM64✓289,14×1,7 k

La columna «arriba al token 0?» separa dues coses que es confonen. Global+local i StreamingLLM hi arriben en una sola capa, perquè els primers tokens són visibles per a tothom —però només hi arriben a ells: el que hi ha al mig i no és ni global ni recent queda fora del camp receptiu encara que la columna digui que sí. La finestra lliscant, en canvi, hi arriba per acumulació de capes i no es deixa res pel camí.

El bescanvi és sempre el mateix i les dues columnes de la taula el diuen: cada patró compra cache i FLOPs amb camp receptiu. El que fa interessant l'alternança de capes és que en compra molt barat —una capa completa de cada quatre paga el cache sencer una vegada i recupera tot el camp receptiu— i és per això que és el que fan servir els models de 2025 en comptes de la finestra lliscant pura.

4. Extensió de context: RoPE scaling# sense fórmules

Un model entrenat amb 8k tokens falla estrepitosament a 32k perquè les freqüències de RoPE produeixen angles mai vistos. Tècniques per estendre'l:

  • Interpolació posicional (PI): comprimeix les posicions (m→m/sm \to m/s) perquè caiguin dins del rang conegut. Simple però degrada la resolució local.
  • NTK-aware scaling: en lloc d'interpolar totes les freqüències per igual, canvia la base θ\theta, comprimint més les freqüències baixes (que codifiquen distàncies llargues) i preservant les altes (distàncies curtes).
  • YaRN: combina NTK per bandes de freqüència amb un ajust de la temperatura de l'atenció. És el mètode més usat: amb un fine-tuning curt (unes poques centenes de passos) estén el context 8-16×.
  • Entrenament per fases: el més habitual en models grans — preentrenar amb 4-8k (barat), i fer una fase final de long-context training amb dades llargues reals, augmentant la base de RoPE.

RoPE scaling: PI, NTK-aware i YaRN

Els tres mètodes fan que una posició alta doni un angle conegut. La diferència és a quines bandes de freqüència toquen, i és la que decideix què hi perds.

La longitud d'ona de cada banda, abans i després

  • original
  • amb YaRN

L'escala vertical és logarítmica. Com més separades van les dues línies, més s'ha comprimit aquella banda. Amb PI van separades per igual a tot arreu; amb NTK s'ajunten a l'esquerra; amb YaRN hi ha un colze visible a la rampa. Sense escalar, coincideixen.

Per a la segona meitat cal un model entrenat amb context curt. Aquest té 32 dimensions i 2 capes, i s'entrena amb seqüències de 32 tokens sobre el corpus en català. Després se li donen 128 —4,0× el que ha vist— i es mesura la pèrdua amb cada joc d'angles. No es reentrena res entremig: és el cas que el text descriu.

Decideix banda per banda segons quantes voltes dona cada component dins del context entrenat, i ajusta la temperatura de l’atenció. És el que més s’usa.

4,0×

Amb s = 1 els tres mètodes són la identitat. Aquí el context passa de 32 a 128.

10 k

La base original. NTK és l'únic mètode que la mou.

d_h = 64

Els models reals fan servir 64 o 128. El mini-GPT de sota en té 8, i amb quatre bandes la separació de YaRN no es veuria.

32 tokens
compressió banda ràpida
1,00×
compressió banda lenta
4,00×
base efectiva
10,00 k
temperatura
1,139
pèrdua a 128
—
sense escalar
—
Amb s = 1 els quatre mètodes són la identitat exacta; ara s = 4,0

La comprovació que val per a tots tres: un mètode d'extensió que no sigui exactament la identitat quan no s'estira res està trencat, i qualsevol model que no necessiti estirar-se en pagaria el preu. Aquí es comprova a zero de màquina, component a component:

Mètodemàx |θ' − θ| amb s = 1idèntic bit a bitmàx |θ' − θ| amb s = 4,0
Cap (extrapolar)0✓0
Interpolació posicional (PI)0✓0,75
NTK-aware0✓0,05
YaRN0✓0,65

Per a YaRN això no surt sol: la barreja entre interpolar i no interpolar s'ha d'escriure ancorada a l'extrapolació —θ+(1−γ)(θ/s−θ)\theta + (1-\gamma)(\theta/s - \theta)— i no com (1−γ)θ/s+γθ(1-\gamma)\theta/s + \gamma\theta. Les dues són la mateixa recta; amb s=1s=1, la primera dona zero exacte al parèntesi i la segona fa dues multiplicacions i una suma que poden moure l'últim bit.

Què li fa cada mètode a cada banda de freqüència
Mètodebanda ràpida (i = 0)banda mitjanabanda lentaquè vol dir
Cap (extrapolar)1,00×1,00×1,00×res no es toca, i per això es trenca
Interpolació posicional (PI)4,00×4,00×4,00×tot per igual: la resolució local en pateix
NTK-aware1,00×2,05×4,00×la ràpida intacta, la lenta com PI
YaRN1,00×2,61×4,00×per bandes, segons les voltes que hi dona

La fila de PI és la que explica la seva mala fama: comprimeix la banda ràpida 4,0× igual que la lenta, i la banda ràpida és la que distingeix «el token del costat» de «dos més enllà». NTK la deixa a 1,00× —pràcticament intacta— i paga la diferència a la lenta, on comprimeix exactament 4,0×, que és el que PI feia a tot arreu. Aquest no és un accident: l'exponent d/(d−2)d/(d-2) de la base està triat perquè surti així.

YaRN ho decideix explícitament: compta quantes voltes senceres dona cada component dins del context entrenat i, si en dona més de 32, no la toca; si no n'arriba a fer 1, la interpola del tot; i entremig, barreja. De les 32 bandes d'un cap de 64, ara mateix n'hi ha 11 intactes, 9 interpolades del tot i 12 a la rampa.

El fitxer 11 va deixar la base θ com a paràmetre i el widget de RoPE d'allà ja mesurava que pujar-la estira les longituds d'ona. Els tres mètodes d'aquí són tres maneres de triar quines longituds d'ona s'estiren i quines no, i l'única cosa que els separa és aquesta tria. El que no canvia mai és la propietat que fa útil RoPE: el producte escalar continua depenent només de la diferència de posicions.

5. Qualitat efectiva: què mesurar# sense fórmules

  • Needle in a Haystack (NIAH): amaga una frase en un text llarg i pregunta-la. Gairebé tots els models moderns el saturen → ja no discrimina res.
  • Lost in the middle (Liu et al., 2023): el rendiment és alt per a informació al principi i al final del context, i cau al mig. Segueix sent cert en graus diversos. Implicació pràctica: posa el més important al principi o al final del prompt.
  • Benchmarks seriosos de context llarg: RULER (NIAH sintètic multinivell amb variants de traça i agregació), LongBench, ∞Bench, i tasques de multi-hop real sobre documents llargs. Mostren que la longitud efectiva sol ser una fracció (sovint 1/4 o menys) de la nominal.
  • Degradació per distractors: el rendiment cau molt més quan el context conté informació semblant però irrellevant que quan conté text neutre. Aquest és el cas real en RAG.

Es perd al mig? Posa el mateix fet a totes les posicions

El text diu que el rendiment cau al mig del context. Mesura-ho: amaga la mateixa parella a cada posició, una per una, i mira què hi dona el model.

Un mini-GPT de 32 dimensions i 2 capes sobre la tasca de recuperació. Amb 300 passos ja recupera per sobre del 95 % i amb 600 s'acosta al 99, i a partir d'aquí s'hi queda. No és el corpus en català: sobre text de caràcters, un model d'aquesta mida no forma cap induction head i la sonda dona zero a totes les posicions —hi ha la mesura al costat del codi.

Una seqüència de la tasca

················M5v5··············?M5v5?M5v5?M5v5?M5v5

En destacat, l'agulla: la parella marca → valor que s'ha de recuperar. En groc, els distractors, que són parelles del mateix tipus amb una marca diferent. Al final, les consultes. El valor canvia a cada seqüència, de manera que memoritzar no serveix de res: cal buscar la marca enrere i copiar el que hi anava darrere.

32 tokens

Canviar-ho torna a començar l'entrenament.

0 parelles

Parelles del mateix tipus amb marques diferents. Informació semblant però irrellevant, que és el cas real en RAG.

8 tokens
2
passos
0
recuperació mitjana
—
dispersió de la corba
—
hi ha U?
—
amb distractors
—
amb StreamingLLM
—
Entrena el model per fer la sonda

La tasca és la de la dreta: entre farciment aleatori hi ha una parella marca → valor, i al final es repeteix la marca unes quantes vegades. L'única manera d'encertar el valor és buscar la marca enrere i copiar el que hi anava darrere. El valor canvia a cada seqüència, de manera que no hi ha cap associació fixa a memoritzar: o es recupera del context o no es pot saber.

Tres mesures i tres conclusions diferents. La posició de l'agulla no hi fa res a aquesta escala, i això vol dir que la U del text no surt del mecanisme d'atenció sinó de les dades. Els distractors sí que fan mal, i el mecanisme diu per què. I una finestra lliscant no degrada la recuperació: la suprimeix per a tot el que queda fora, que és un comportament molt més brusc que «es perd al mig».

6. Context llarg vs RAG: el debat, resolt en la pràctica# sense fórmules

CriteriContext llargRAG
Cost per consultaalt (pagues tots els tokens)baix (pagues el que recuperes)
Latència (TTFT)alta (prefill llarg)baixa
Corpus de mida arbitrària❌✅
Actualització en temps realrecarregar totactualitzar índex
Raonament sobre tot el corpus✅ si hi caplimitat pel retriever
Atribució de fontsdifusaexplícita
Cache reutilitzable✅ (prompt caching) canvia molt l'economia✅

Resposta pràctica el 2026: no són alternatives. El patró dominant és recuperar bé i després donar molt context — retriever generós + reranker + finestra gran, sovint dins d'un bucle agèntic que decideix quan buscar més. El prompt caching (reutilitzar el KV-cache d'un prefix estable) ha abaratit molt l'opció de context llarg per a corpus petits i estables.

Context llarg contra RAG: la calculadora

No són alternatives, però una de les dues et surt més barata. Quina, i a partir de quantes consultes canvia la resposta?

context llargRAG
  • context llarg: tot el corpus a cada consulta
  • RAG: només el que es recupera

Les dues escales són logarítmiques i les dues corbes són rectes de pendent 1: el cost és lineal en les consultes. El que canvia és el pendent —el cost per consulta— i l'ordenada a l'origen. El cercle marca el creuament, si en queda algun dins del rang. Amb el prompt caching actiu, el primer tram de la corba de context llarg és més costerut: la primera consulta paga el prefix sencer i les altres no.

Els set criteris del §6, amb el que es pot mesurar aquí marcat
CriteriContext llargRAG
Cost per consulta0,07 dòlars0,02 dòlars
Tokens d’entrada200 k4 k
TTFT relatiu50×1× (referència)
Corpus de mida arbitrària✗ limitat per la finestra✓
Actualització en temps realrecarregar totactualitzar índex
Raonament sobre tot el corpus✓ si hi caplimitat pel retriever
Atribució de fontsdifusaexplícita
Cache reutilitzable✓ al 10 % del preu✓
200 k tokens

El que hauries de posar al prompt si ho hi poses tot.

4 k

El patró del 2026 és generós: recuperar molt i deixar que el model triï.

500
1 k
3,00 dòlars

Els preus caduquen. El que no caduca és l'estructura del càlcul.

15,00 dòlars
10 % del preu

Els proveïdors cobren els tokens ja a la memòria cau a una fracció del preu.

Reutilitzar el KV-cache d'un prefix estable. És el que ha canviat l'economia.

context llarg, 1a consulta
0,61 dòlars
context llarg, següents
0,07 dòlars
RAG, per consulta
0,02 dòlars
total a 1 k consultes
68,04 dòlars / 19,50 dòlars
més barat
RAG
creuament
sempre RAG
A 1 k consultes, RAG surt 3,5 vegades més barat

El càlcul té tres termes i val la pena veure'ls separats, perquè quin mana canvia del tot la resposta:

Termetokenscontext llargRAG
Prefill, primera consulta200 k0,60 dòlars0,01 dòlars
Prefill, consultes següents (amb memòria cau)200 k0,06 dòlars0,01 dòlars
Decode5007,50·10⁻³ dòlars7,50·10⁻³ dòlars
Indexar el corpus (una vegada)200 k—4,00·10⁻³ dòlars

La fila que decideix és la segona. Sense prompt caching, cada consulta de context llarg torna a pagar el corpus sencer i RAG guanya de 50× a partir de la primera consulta —que és exactament la ràtio de tokens. Amb prompt caching, les consultes següents paguen el corpus al 10 %, i el creuament es desplaça a un altre règim.

El que el preu no diu: TTFT i qualitat

La taula del §6 té set files i el cost només n'és una. Les altres no es poden posar en dòlars i decideixen igual o més:

  • Latència. El TTFT de context llarg és el prefill de 200 k tokens; el de RAG, el de 4 k. Són 50× de diferència en el temps que l'usuari espera abans de veure la primera lletra, i el prompt caching també l'ataca: amb el prefix a la memòria cau, el TTFT baixa tant com el cost.
  • Mida del corpus. Si el corpus no cap a la finestra, no hi ha debat. Amb 200 k tokens, context llarg hi cap.
  • Ús efectiu. Pagar per 200 k tokens no vol dir que el model els faci servir —és el problema 3 del §1, i el widget d'allà el mesura. I posar-n'hi molts de semblants és fabricar distractors, que és el que el §5 mesura.
  • Actualització i atribució. Un índex es refresca per trossos; un prompt s'ha de tornar a muntar sencer i el seu cache s'invalida del tot. I RAG sap dir d'on ha tret cada cosa.

Per això la resposta del text no és cap de les dues: recuperar bé i després donar molt context. En aquesta calculadora, això és moure «tokens recuperats» cap amunt fins que la qualitat s'aguanti, que és el règim on les dues corbes són a prop i on el que decideix ja no és el preu.

Els preus d'aquesta calculadora són controls i no constants: caducaran, i probablement a la baixa. El que no caduca és l'estructura —un terme que es paga una vegada, un que es paga a cada consulta i un que depèn de la resposta— i la conseqüència que se'n treu: qualsevol cosa que faci baixar el terme repetit mou el creuament ordres de magnitud, i el prompt caching és exactament això.

7. Atenció lineal i alternatives# sense fórmules

Si vols O(L)O(L) de debò, has de renunciar a l'atenció completa:

softmax(QK⊤)V  ⟶  ϕ(Q)(ϕ(K)⊤V)\text{softmax}(\mathbf{Q}\mathbf{K}^\top)\mathbf{V} \;\longrightarrow\; \phi(\mathbf{Q})\left(\phi(\mathbf{K})^\top\mathbf{V}\right)

Canviant l'ordre d'associació, el cost passa de O(L2d)O(L^2d) a O(Ld2)O(Ld^2). La família inclou Performer, Linear Transformer, RetNet, RWKV, GLA i els models d'espai d'estats (Mamba). Tots comparteixen una idea: mantenir un estat de mida fixa en lloc d'un cache creixent.

El compromís empíric conegut: l'atenció completa és millor en tasques de recall precís (recuperar un detall exacte del context) i els mètodes lineals guanyen en cost. Per això el 2026 la resposta guanyadora és híbrida: unes poques capes d'atenció completa entre moltes capes lineals/SSM. Ho desenvolupem a 30pendent.


Atenció lineal: canviar l'ordre d'associació

El mateix argument del fitxer 01, aplicat a l'atenció. Una de les dues coses que passen aquí és gratis i l'altra no: quina?

O(L²d)O(Ld²)
  • primer φ(Q)φ(K)ᵀ: pendent 2
  • primer φ(K)ᵀV: pendent 1

El cercle marca el creuament. A la dreta d'aquest punt, l'ordre lineal guanya, i la distància creix sense aturador: a 64k tokens són 2.048×.

Les dues coses que passen al §7

1. Reassociar és exacte

(φ(Q)φ(K)⊤)V=φ(Q)(φ(K)⊤V)(\varphi(Q)\varphi(K)^\top)V = \varphi(Q)(\varphi(K)^\top V)
Diferència mesurada: 6,66·10⁻¹⁶. És el que dona el O(L).

2. Canviar la softmax no ho és

softmax(QK⊤)V≠φ(Q)(φ(K)⊤V)\text{softmax}(QK^\top)V \neq \varphi(Q)(\varphi(K)^\top V)
Diferència mesurada: 1,31. És el que costa el O(L).

L = 64
d = 16

Amb d_v = 16, el creuament és a L = 31,0.

Mapa de característiques φ

Ha de ser positiu perquè el denominador tingui sentit. És l'única cosa que el softmax donava de franc.

Amb causalitat, la versió lineal manté un estat que s'actualitza token a token: és l'«estat de mida fixa» del text.

#4
cost (φ(Q)φ(K)ᵀ)V
66,56 k
cost φ(Q)(φ(K)ᵀV)
32,77 k
ràtio
2,03×
creuament
L = 31,0
estat de mida fixa
272 esc.
KV-cache equivalent
2.048 esc.
Les dues associacions donen el mateix: 6,66·10⁻¹⁶ de diferència

Això és associativitat de matrius i prou, i per això la diferència és de l'arrodoniment i no de res més. Un cop tens φ(Q)\varphi(\mathbf{Q}) i φ(K)\varphi(\mathbf{K}), pots multiplicar per l'esquerra o per la dreta i obtens el mateix número; el que canvia és què materialitzes pel camí:

Ordrematriu intermèdiamidaMAC
(φ(Q)φ(K)⊤)V(\varphi(\mathbf{Q})\varphi(\mathbf{K})^\top)\mathbf{V}L × L4.09666.560
φ(Q)(φ(K)⊤V)\varphi(\mathbf{Q})(\varphi(\mathbf{K})^\top\mathbf{V})d × d_v25632.768

La segona matriu no creix amb L, i aquí hi ha tota la família: Performer, Linear Transformer, RetNet, RWKV, GLA i els models d'espai d'estats com Mamba comparteixen aquesta idea. Amb causalitat, aquesta d×dvd \times d_v és literalment un estat que s'actualitza token a token i que substitueix el KV-cache: aquí en són 272 escalars fixos contra 2.048 que creixen. A 1M de tokens la diferència deixa de ser una optimització i passa a ser la diferència entre poder i no poder.

Canviar el softmax per φ sí que canvia la resposta: 1,31, que són 2.943,3 T ULP

Aquesta és la meitat que no és gratis, i és la que separa l'atenció lineal de FlashAttention. El pas del §7 no és només reordenar: primer cal canviar softmax(q⊤k)\text{softmax}(\mathbf{q}^\top\mathbf{k}) per φ(q)⊤φ(k)\varphi(\mathbf{q})^\top\varphi(\mathbf{k}), i aquest canvi és una altra funció.

El motiu és concret: l'exponencial d'un producte escalar no es pot escriure com un producte d'una funció de q\mathbf{q} per una de k\mathbf{k}, i sense aquesta factorització no hi ha res a reassociar. Per això s'hi posa una φ\varphi que sí que factoritza, i per això n'hi ha tantes de proposades: cadascuna és un intent d'aproximar millor el que el softmax feia.

Posa-ho al costat del widget de FlashAttention i la taula queda completa: allà la diferència era de ≈ 2 ULP i aquí és de 2.943,3 T. La primera és un algorisme exacte executat en un altre ordre; la segona és un model diferent. És per això que el text diu que l'atenció completa guanya en recall precís: el que es perd amb φ\varphi és justament la capacitat de la softmax de concentrar tot el pes en un token, i recuperar un detall exacte és exactament això.

Per sota de L = 31,0, l'ordre «lineal» surt més car

El creuament no és cap detall: amb d=d = 16 i dv=d_v = 16, les dues expressions valen el mateix a L=31,0L = 31,0, i per sota d'aquí materialitzar la L×LL\times L és més barat que materialitzar la d×dvd\times d_v. És el mateix fenomen que el fitxer 01 mesura amb el cost d'associativitat, i el mateix que el fitxer 11 diu del creuament 2L2d2L^2d contra 4Ld24Ld^2 a L=2dL = 2d.

Amb la LL d'ara (64) l'ordre lineal guanya per 2,03×. Mou dd amunt i el creuament se'n va cap a la dreta: com més ample és el model, més llarg ha de ser el context perquè l'atenció lineal surti a compte.

El compromís que el text resumeix i que aquests tres números expliquen: l'atenció lineal compra O(L) i un estat de mida fixa a canvi de no ser la mateixa funció, i el que hi perd és precisament el recall exacte. Per això la resposta del 2026 és híbrida —unes poques capes d'atenció completa entre moltes de lineals o d'espai d'estats—: les capes completes fan el recall i les lineals porten el gruix del context. Es desenvolupa al fitxer 30.

8. Comprova que ho has entès#

0 de 5 resoltes

  1. Per què FlashAttention és més ràpida si fa els mateixos FLOPs?
  2. Explica la diferència entre interpolació posicional (PI) i NTK-aware scaling.
  3. Què és «lost in the middle» i com afecta la manera com escrius els teus prompts? Fes servir el widget per veure què hi passa amb distractors.

    Objectiu:Al widget de la recuperació, entrena el model i puja els distractors per sobre de 3: la corba que no es movia amb la posició sí que es mou amb informació semblant.

    Vés al widget ↑distractors = per defecte
  4. Per què NIAH (Needle in a Haystack) ja no és un bon benchmark?
  5. Un corpus de 200.000 tokens, preguntes que generen 500 tokens de resposta, i preus de 3 dòlars per milió d'entrada i 15 per milió de sortida. Quant costa una consulta posant el corpus sencer al prompt, sense prompt caching? Dona la xifra en dòlars.
    dòlarsMarge acceptat: 2 %

9. Recursos#

Marca els que hagis llegit
  • Dao et al. (2022), FlashAttention; Dao (2023), FlashAttention-2; Shah et al. (2024), FlashAttention-3.

  • Peng et al. (2023), YaRN: Efficient Context Window Extension.

  • Liu et al. (2023), Lost in the Middle.

  • Hsieh et al. (2024), RULER: What's the Real Context Size of your Long-Context LMs?

  • Xiao et al. (2023), StreamingLLM.