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
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.
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
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
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
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
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
El continu acaba 1,58 vegades més de pressa.
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
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
Un model petit i ràpid (el draft) escriu quatre paraules seguides, com faria normalment, però en una fracció del temps.
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
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
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
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
- 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
- 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?
- Una aplicació posa l'hora exacta de la consulta a la primera línia de les seves instruccions. Per què això li surt car?
- En speculative decoding, què passa si l'aprenent és molt dolent i s'equivoca gairebé sempre?