Salta al contingut
Entendre els LLMs
🧭 Camí intuïtiuBloc 440-50 min
IntuïtiuMatemàtic

La versió sense fórmules de 15 · Inferència, decodificació i serving. Cada secció diu on és la seva part matemàtica.

15 · Del model a la resposta

Entrenar un model és una feina que es fa una vegada. Fer-lo servir, la inferència (inference), es fa milions de vegades al dia, i per a qui treballa amb models és gairebé tota la feina. Entre una manera ingènua de fer-ho i una de bona hi pot haver una diferència de deu a cinquanta vegades. Aquest capítol explica d'on surt aquesta diferència, i la resposta cap en una idea: el que costa no és calcular, és portar els pesos fins a la calculadora.

1. Llegir i escriure: dues feines diferents#

Quan envies una pregunta a un model, passen dues coses molt diferents. Primer, el model llegeix la pregunta sencera: totes les paraules alhora, perquè ja les té totes. A això se'n diu prefill. Després escriu la resposta, i aquí no pot anar de pressa: cada paraula depèn de l'anterior, així que les ha de fer una a una. A això se'n diu decode. (Aquí diem «paraula» per simplificar: de fet, el model llegeix i escriu tokens, els trossos de paraula del capítol 10.)

La diferència important és una altra. Una targeta de càlcul té una calculadora rapidíssima i un magatzem on guarda els pesos del model. Per fer qualsevol cosa, els pesos han de viatjar del magatzem a la calculadora. Quan llegeix, un viatge serveix per a totes les paraules de la pregunta. Quan escriu, cada paraula nova necessita un viatge sencer.

Llegir és un viatge; escriure, un viatge per paraula

1/5Llegir: totes les paraules alhora

magatzempesosExplica’mquèésunLLM.viatges al magatzem: 1paraules llegides: 6 · escrites: 0

El prefill. Les sis paraules de la pregunta passen pel model juntes. Els pesos s’han d’anar a buscar al magatzem de la targeta una vegada, i serveixen per a les sis: aquí la màquina treballa a ple.

La calculadora de la targeta és molt més ràpida que el camí que porta els pesos fins a ella. Llegir aprofita cada viatge per a moltes paraules; escriure, per a una.

Per això escriure va limitat per la memòria, no pel càlcul: la calculadora passa la major part del temps esperant. I d'aquí surt el primer gran truc: si moltes converses esperen la seva paraula següent, el mateix viatge serveix per a totes. Es diu agrupar-les en un lot (batching). Els models d'experts del capítol 13 també hi ajuden: per a una sola conversa, només cal portar els especialistes que treballen. Amb lots grans, però, entre totes les converses es fan servir gairebé tots, i el viatge torna a ser de tots els pesos.

Compartir el viatge surt gratis, fins a un punt

1416642561.024converses al lotlínia contínua, en total: 209 tokens per segonlínia discontínua, cada conversa: 209 per segon
Un model de 8.000 milions de paràmetres a 16 bits en una H100, en un cas ideal en què només compten els pesos. Fins a unes 300 converses, afegir-ne al lot no alenteix ningú: el temps el posa el viatge dels pesos. Més enllà, la calculadora passa a ser el límit. A la pràctica, els apunts de cada conversa també s’han de llegir, i el punt arriba abans.

Quan algú mesura un servei, mira sobretot tres coses: el temps fins a la primera paraula (time to first token), que depèn de llegir la pregunta i creix amb la seva llargada; el temps entre paraules, que depèn del viatge dels pesos; i quantes paraules per segon treu la màquina en total, que és el que decideix el preu. Hi ha un estira-i-arronsa entre les dues últimes: lots més grans abarateixen cada paraula, però cada conversa va una mica més lenta. Cal decidir quina de les dues importa abans de configurar res.

2. Els apunts: el KV-cache#

Ja vas veure al capítol 12 que el model guarda uns apunts de cada paraula, l'etiqueta i el contingut (les keys i els values), perquè les paraules següents hi puguin mirar. Aquí es veu per què són imprescindibles: sense apunts, per escriure cada paraula nova el model hauria de tornar a calcular les etiquetes i els continguts de totes les anteriors.

Els apunts que no cal tornar a prendre

calculadallegidaCaselles calculades36creix amb el quadrat
Apunts
Cada fila és una paraula nova; cada casella, l’etiqueta i el contingut (la key i el value) d’una paraula, que el model necessita per mirar enrere. Sense apunts, a cada paraula les torna a calcular totes. Amb apunts, només calcula la de la paraula nova i llegeix la resta. El preu és haver-les de guardar: el problema que ja vas veure al capítol 12.

El preu és que els apunts ocupen, i molt. Llama 3 70B, amb converses de 8.000 tokens, en fa servir uns 2,7 GB per conversa. Amb cent converses obertes, 270 GB només d'apunts. Gestionar bé aquesta memòria és la meitat de l'ofici.

Reservar per blocs (PagedAttention). La manera ingènua de guardar els apunts és reservar per a cada conversa l'espai de la llargada màxima, per si de cas. Com que la majoria de converses no hi arriben, gran part de la memòria queda reservada i buida: als sistemes d'abans de vLLM es perdia entre el 60 i el 80 %. La solució és la de la memòria d'un ordinador: donar-li blocs petits a mesura que els necessita.

Reservar la fila sencera o aparcar per blocs

Reservades sense fer servir: 34 de 64 (53 %)Lliures per a altres converses: 0
Reserva
Converses
Quatre converses que poden arribar a 16 tokens. Reservar-los de cop és com guardar una filera sencera del pàrquing per a cada cotxe per si de cas; per blocs, cadascú ocupa places de 4 en 4 on n’hi hagi de lliures. Prova «totes al màxim»: els dos mètodes empaten. El que malbarata memòria no és reservar, és que les converses siguin de llargades diferents.

Reaprofitar els apunts d'un principi comú. Moltes peticions comencen igual: les mateixes instruccions d'una aplicació, el mateix document, la mateixa conversa fins ara. Els apunts d'aquest principi es poden calcular una vegada i reaprofitar (prefix caching, o prompt caching als proveïdors). És, de lluny, l'optimització que més rendeix per l'esforç que costa: estalvia entre el 50 i el 90 % del cost i del temps fins a la primera paraula. Amb una condició estricta.

Els apunts compartits acaben al primer bloc diferent

Ainstr. 1instr. 2instr. 3instr. 410:02preg. ABinstr. 1instr. 2instr. 3instr. 410:07preg. BBlocs reaprofitats: 4 de 6La petició B es salta la lectura de les instruccions.
L’hora va
Dues peticions d’una mateixa aplicació, amb les mateixes instruccions i l’hora de la consulta. Només es poden reaprofitar els apunts dels blocs idèntics des del primer token. Posar l’hora o el nom de l’usuari al principi els invalida tots: el que canvia va al final.

Dues coses més que es fan amb els apunts: guardar-los amb menys bits, la meitat de memòria amb una pèrdua de qualitat molt petita; i llençar els que gairebé no es miren, a canvi d'arriscar-se a perdre alguna cosa. I un detall que s'oblida: reaprofitar els apunts estalvia la lectura de la pregunta, no l'escriptura. Els apunts reaprofitats s'han de continuar llegint a cada paraula nova.

3. L'autobús que no espera#

Imagina un autobús turístic que surt amb quatre passatgers i no torna a l'estació fins que ha deixat l'últim. Si un baixa a la primera parada i un altre a la cinquantena, el seient del primer va buit tot el trajecte. Així funciona el lot estàtic: es fan quatre converses juntes, i fins que la resposta més llarga no s'ha acabat no n'entra cap de nova.

Un autobús urbà funciona d'una altra manera: quan algú baixa, algú altre puja a la parada. Això és el lot continu (continuous batching): a cada pas, si una conversa ha acabat, n'entra una altra al seu lloc.

L’autobús que no espera que baixi tothom

Estàtic: 112 passos123467891011121314151719202123s1s2s3s4Continu: 71 passos123467891011121314151719202123s1s2s3s4

El continu acaba 1,58 vegades més de pressa.

Vint-i-quatre peticions, quatre seients (quatre converses al lot). Cada barra és una petició, de quan entra a quan acaba la resposta. Les zones grises són seients buits mentre la màquina treballa igual. Amb totes les respostes iguals de llargues, els dos autobusos empaten: el guany ve de la variació.

El guany típic en serveis reals és de dues a quatre vegades més paraules per segon, i és la raó principal per fer servir eines com vLLM, SGLang o TensorRT-LLM en lloc d'un programa senzill. El simulador hi afegeix el matís que fa creïble la xifra: si totes les respostes fossin igual de llargues, no hi hauria cap guany, perquè els dos autobusos acabarien exactament alhora. Tot el benefici ve de la variació.

Dos trucs més del mateix ofici: trossejar la lectura de preguntes molt llargues, perquè no aturi les converses que ja estan escrivint (chunked prefill); i separar llegir i escriure en màquines diferents, cadascuna preparada per a la seva feina, perquè són feines amb necessitats oposades.

4. Arrodonir els pesos#

Si escriure és lent perquè cal portar els pesos, una manera directa d'anar més de pressa és fer que els pesos ocupin menys. Cada pes és un número; guardar-lo amb menys xifres és com arrodonir preus: 3,47 euros passa a ser 3,50. Se'n diu quantitzar (quantization). Amb 8 bits en lloc de 16, el model ocupa la meitat, i cada viatge porta el doble de pesos.

Quantitzar és arrodonir

pesosarrodonitsValors permesos: 15Error mitjà: 8 % de la mida d’un pesPesos normals que queden a zero: 2 de 24
Bits per pes
Un pes gegant
A dalt, 24 pesos tal com són; a baix, arrodonits al valor permès més proper. Amb menys bits hi ha menys valors permesos i l’arrodoniment és més gruixut. L’escala la posa el pes més gran: si n’hi ha un de gegant, els valors permesos s’espaien tant que molts pesos normals queden arrodonits a zero: a 4 bits, més de la meitat; a 2 o 3, gairebé tots. Aquest és el problema central de quantitzar.

La figura ensenya el problema central. Uns pocs números gegants (outliers), molt més grans que la resta, fan que l'escala s'eixampli tant que molts dels normals queden arrodonits a zero. Bona part de l'enginyeria de la quantització consisteix a domar aquests gegants: protegir els canals més importants, passar part de la dificultat d'un lloc a un altre, o girar els números perquè cap no sobresurti tant. Un truc senzill que sempre ajuda una mica és fer servir una escala diferent per a cada fila de pesos, en lloc d'una per a tota la matriu.

Es pot quantitzar un model ja entrenat (el més habitual, i barat), o entrenar-lo ja sabent que es quantitzarà (millor qualitat, molt més car). A 8 bits, la pèrdua sol ser mínima; a 4 bits, petita o moderada; a 2 o 3 bits, es nota.

5. Un aprenent i un mestre#

Hi ha un truc enginyós que aprofita que revisar és més barat que escriure. Un model petit i ràpid, l'aprenent, escriu unes quantes paraules seguides. El model gran, el mestre, les revisa totes de cop. Revisar-ne quatre li costa gairebé el mateix que escriure'n una, perquè el viatge dels pesos és un de sol, com quan llegeix la pregunta.

Un aprenent que proposa i un mestre que valida

1/5L’aprenent proposa

Elgats’haenfilataprenent:alateuladade

Un model petit i ràpid (el draft) escriu quatre paraules seguides, com faria normalment, però en una fracció del temps.

Aquesta tècnica es diu speculative decoding. Les frases són d’exemple.

El més important és el que garanteix: la resposta segueix exactament les mateixes probabilitats que si l'hagués escrit el mestre sol. No és una aproximació. Un matís que el camí matemàtic subratlla: les probabilitats són les mateixes, però això no vol dir que, amb atzar pel mig, surtin exactament les mateixes paraules que hauria escrit el mestre sol. Si a més vols les mateixes paraules, es pot fer, a canvi d'acceptar menys propostes.

Hi ha variants que no necessiten aprenent: petits afegits al mateix model que endevinen dues o tres paraules endavant (Medusa, EAGLE), copiar trossos de la mateixa pregunta quan la resposta en repeteix molt, com quan s'edita codi, o entrenar el model mateix per proposar-ne diverses de cop (DeepSeek-V3).

6. Triar la paraula#

Al final de cada pas, el model no dona una paraula: dona un repartiment de cent fitxes entre totes les possibles. Com es tria, és com apostar.

  • Sempre la favorita (greedy): l'aposta segura. Útil quan hi ha una resposta correcta, i per avaluar.
  • La temperatura canvia com d'arriscada és l'aposta: per sota d'1, la favorita s'emporta encara més fitxes; per sobre, es reparteixen més, i surten paraules menys probables.
  • Top-k: només poden sortir les k favorites. Senzill, però sempre en deixa el mateix nombre, tant si n'hi ha una de clara com si n'hi ha vint d'igual de bones.
  • Top-p (nucleus sampling): es queda el grup més petit de favorites que sumen, per exemple, el 90 % de les fitxes. S'adapta: si una és molt clara, en queden poques; si hi ha molts dubtes, en queden més. És el més usat.
  • Min-p: descarta les que tenen menys d'una fracció de les fitxes de la favorita. Aguanta bé temperatures altes.

Apostar més segur o més arriscat

bonic36assolellat24fred16llarg9gris7estrany4tranquil3verd1Paraules que poden sortir: 8 de 8
«Avui fa un dia molt…»: el model reparteix cent fitxes entre les paraules que podrien venir (preferències d’exemple). La temperatura aplana el repartiment (més d’1) o el punxa (menys d’1); a zero, sempre surt la favorita. El top-p descarta la cua: es queda el grup més petit de favorites que sumen aquell percentatge de fitxes, i hi reparteix totes les fitxes.

Tres errors habituals. Avaluar un model amb atzar pel mig (una temperatura de 0,7, per exemple) i sorprendre's que doni respostes diferents cada vegada. Castigar les repeticions en tasques de codi, que és repetitiu per naturalesa, i trencar-ne la sintaxi. I creure que temperatura zero dona sempre exactament el mateix resultat.

Els mateixos números, un altre ordre, un altre resultat

0,10,20,3suma parcial dels ressaltats: 0,30000000000000004total0,6000000000000001
Ordre
L’ordinador guarda els números amb un nombre fix de xifres, i cada suma arrodoneix. Per això l’ordre importa a l’última xifra. En una GPU, l’ordre de les sumes depèn de com es reparteix la feina, i aquest repartiment canvia amb la mida del lot: dues paraules gairebé empatades poden intercanviar-se fins i tot a temperatura zero.

Aquesta és la segona causa de respostes que no es repeteixen; la primera, la dels especialistes amb places limitades, la vas veure al capítol 13.

També hi ha una cerca que prova diverses continuacions alhora i es queda la frase sencera més probable (beam search). Va bé per traduir i per a respostes curtes, on hi ha una resposta bona. Per a text obert és mala idea: la frase més probable no és la que escriuria una persona, sinó la més previsible, i el resultat és avorrit i repetitiu.

I un recurs molt útil: obligar el model a escriure en un format concret, com un JSON vàlid, prohibint a cada pas les paraules que el trencarien (constrained decoding). És gairebé gratis i elimina tota una classe d'errors. Amb un compte: si el format és massa estret i el model «volia» raonar abans de respondre, la qualitat del contingut en pot sortir perjudicada.

7. Quant costa#

Tot el capítol es pot resumir en dues preguntes que es fa qui posa un model en marxa. Quanta memòria em cal? Els pesos, més els apunts de cada conversa, més un marge. I quina velocitat en trauré? Com a molt, la que permet llegir aquella memòria a cada pas.

Quantes targetes, i quina velocitat

pesos 141 GBapunts 43 GBmargeTargetes H100 de 80 GB: 3Sostre per conversa: 55 tokens per segon
Model
Bits dels pesos
Context per conversa
La memòria són els pesos, els apunts de cada conversa i un marge del 15 % per a la resta. La velocitat és un sostre: a cada pas cal llegir els pesos i els apunts de totes les converses, i les targetes només en poden llegir una quantitat fixa per segon. Mou les converses i el context: és la barra dels apunts la que dispara la factura.

Prova de passar de 8.000 a 128.000 tokens de context amb unes quantes converses: els pesos no es mouen, i els apunts s'enfilen fins a demanar màquines senceres. És la mateixa lliçó del capítol 12, ara amb factura.

Què t'has d'endur#

On som: el viatge d’una pregunta pel model

El model: el mateix bloc, desenes de vegades12× 30 a 80 capesi torna a entrarLa teva preguntaLlegir-la senceraprefill: totes les paraules alhora15Atenció: mirar enrereetiquetes i continguts compartits · fins on mira12 · 14Peça de càlculun sol bloc, o un equip d’especialistes (MoE)13Escriure una parauladecode: triar-la i tornar a començar15Els apuntsKV-cache12 · 15La resposta
Les peces ressaltades són les d’aquest capítol. El número petit de cada caixa diu en quin capítol del bloc s’explica.
  • Llegir la pregunta (prefill) aprofita cada viatge dels pesos per a totes les paraules; escriure (decode) en fa un per paraula. Per això escriure va limitat per la memòria, no pel càlcul.
  • Agrupar converses en lots comparteix el viatge; el lot continu omple els seients que queden lliures, i el seu guany ve del fet que les respostes són de llargades diferents.
  • Els apunts (KV-cache) eviten recalcular-ho tot, però ocupen per conversa: reservar-los per blocs i reaprofitar els d'un principi comú són les optimitzacions més rendibles.
  • Quantitzar és arrodonir: menys bits vol dir menys a portar, i els números gegants són el que ho complica.
  • Un aprenent que proposa i un mestre que valida dona el mateix resultat, en probabilitat, que el mestre sol, i més de pressa.
  • La temperatura i el top-p decideixen com d'arriscada és l'aposta; i ni a temperatura zero una GPU no garanteix el mateix resultat.

Comprova que ho has entès#

0 de 3 resoltes

  1. Una empresa compra una GPU amb el doble de potència de càlcul però el mateix camí de memòria. Què li passa a la velocitat amb què una sola conversa rep paraules?
  2. Una aplicació posa l'hora exacta de la consulta a la primera línia de les seves instruccions. Per què això li surt car?
  3. En speculative decoding, què passa si l'aprenent és molt dolent i s'equivoca gairebé sempre?