20 · Ajustar un model a la teva feina
Els capítols anteriors explicaven com es fa un model gran. Aquest és el que et pot tocar a tu: agafar un model que ja existeix i ajustar-lo (fine-tuning) a una feina concreta, amb les teves dades. La primera pregunta, però, no és com fer-ho sinó si cal. En la gran majoria de casos, la resposta és que no, i saber-ho estalvia setmanes.
1. Cal ajustar-lo?#
Ajustar un model és tornar-lo a entrenar una mica amb exemples teus. És una eina potent i cara, i abans d'agafar-la cal saber per què falla el model a la teva tasca, perquè cada motiu té un remei diferent.
Cal ajustar el model?
L'ajust guanya clarament quan es vol reduir cost i latència (un model petit ajustat pot igualar-ne un de gran en una sola tasca), quan cal un format de sortida molt estricte, en dominis amb un vocabulari i unes convencions pròpies, per a un estil de marca constant, i en tasques de molt volum i poca variació. Perd quan el coneixement canvia sovint (llavors el lloc és el context, amb documents i cerca: el capítol 22), quan les tasques són poques i variades (llavors, millors instruccions: el capítol 21) i, sobretot, quan no tens una manera sòlida de mesurar si ha millorat.
La regla d'or ve d'aquí: no ajustis res abans de tenir una avaluació. Si no pots mesurar la millora, i amb un marge d'error, no saps si has millorat ni si has espatllat alguna cosa. I una qüestió de diners que sovint es passa per alt: sovint no pesa tant l'ajust com tenir el model encès. Amb un ajust de 5.000 dòlars que s'ha de pagar en un any, un model gran que costa 5 dòlars per milió de tokens i un de petit que en costa 0,30 però demana 700 dòlars al mes de GPU, l'ajust no surt a compte per sota d'uns 238 milions de tokens al mes. D'aquests 238, uns 150 els posa només la GPU.
2. LoRA: un post-it en comptes de reescriure el llibre#
Ajustar un model sencer vol dir corregir tots els seus milers de milions de números, i pagar per a cadascun la memòria d'entrenar del capítol 17: 16 bytes per número. La tècnica que ho va canviar tot, LoRA (low-rank adaptation), parteix d'una hipòtesi: el canvi que cal per adaptar un model a una tasca és molt més senzill que el model, i es pot escriure amb molt pocs números.
La manera de fer-ho és una correcció feta amb peces, la mateixa idea de les «tires primes» del capítol 1. Cada capa del model està feta de taules de números (les matrius), i en comptes d'aprendre una correcció sencera per a cada taula, LoRA n'aprèn una de construïda amb unes quantes columnes i files, com una taula de multiplicar.
Una correcció feta amb poques peces
1/4Una correcció sencera
Una de les taules de números del model, en petit: 8 × 8 = 64 números. Corregir-la sencera vol dir aprendre els 64. En un model de debò, cada taula en té milions.
Amb aquesta peça, la imatge útil és la d'un llibre que no es pot reescriure i on s'hi enganxen post-its.
Un post-it en comptes de reescriure el llibre
1/6El llibre, congelat
Els milers de milions de números del model són un llibre que no es toca. Ni es corregeix ni se'n guarden gradients ni memòries de l'optimitzador.
Els botons principals de LoRA són tres. El rang, el nombre de parelles de columnes i files: habitualment entre 8 i 64, i més per a tasques difícils, però més rang no és sempre millor. A quines taules s'aplica: a totes les de cada capa (les de l'atenció i les del bloc de càlcul); limitar-ho a dues de l'atenció, com es feia al principi, és una pràctica antiga i pitjor. I el ritme d'aprenentatge (learning rate, la mida de cada pas de l'entrenament), que amb LoRA ha de ser més alt que amb l'ajust complet. La raó: la correcció comença a zero i només es mou a través del producte de les dues peces, de manera que cada pas la mou menys que un pas sobre la taula sencera.
Aquí convé separar el que es diu del que es mesura.
El que es diu de LoRA, i el que es mesura
Se sol dir que el ritme ha de ser «de 10 a 100 vegades més alt», i que LoRA és «menys propens a oblidar» el que el model ja sabia. Amb el model petit que el camí matemàtic entrena de debò, la primera surt en la mateixa direcció però amb una altra xifra (7 vegades), i la segona surt al revés. La raó més probable és la mida: en un model petit, una correcció de rang 4 ja és una part gran de cada taula, i el resultat publicat que diu que LoRA «aprèn menys i oblida menys» és sobre models de 7.000 milions. La lliçó no és cap de les dues xifres, sinó que aquestes regles s'han de comprovar a l'escala on es faran servir. També la mida dels post-its depèn del rang: es diu que pesen «desenes de MB», i és cert amb rangs baixos, però amb rang 32 a les set taules de cada capa d'un model de 8.000 milions ja en fan uns 170.
Hi ha variants: QLoRA, que guarda el model comprimit a 4 bits mentre s'entrenen els post-its i deixa l'ajust d'un model de 70.000 milions a tocar d'una sola GPU de 48 GB (amb una configuració normal en surten 48,2, i cal retallar la llargada dels textos o alguna altra cosa perquè hi càpiga); DoRA, LoRA+ i rsLoRA, que en milloren detalls. I hi ha altres tècniques que només entrenen una part petita del model (afegir petites capes noves, aprendre unes quantes «paraules virtuals» al principi del text, ajustar només uns pocs números de cada capa), però LoRA i les seves variants han guanyat amb diferència.
3. Les dades: la part que realment decideix#
Si el capítol 16 deia que les dades decideixen el preentrenament, en l'ajust encara més: la major part de l'èxit és el conjunt d'exemples. Unes quantes regles:
- Quants. Per a una tasca concreta, entre 500 i 5.000 exemples excel·lents solen bastar. Per canviar un comportament ampli, desenes de milers.
- Llegeix-los. A mà, cent a l'atzar com a mínim. Sempre hi ha sorpreses desagradables.
- Que siguin consistents. Si un 20 % dels exemples tenen un format diferent, el model aprendrà a barrejar els dos formats, en una proporció semblant a la de les dades. Al camí matemàtic, a més, la barreja fa el model pitjor en la tasca.
- Que cobreixin el que trobarà, també els casos estranys i les peticions que ha de rebutjar.
- Si els generes amb un model, filtra'ls amb una comprovació o amb un jutge i revisa'n una mostra. La recepta més fiable és generar-ne diversos i quedar-se els que passen una prova, sabent que la prova només garanteix el que comprova, i que els casos més difícils hi passen menys i acaben poc representats.
- Separa'ls des del principi en entrenament, validació i prova, i afegeix-hi un conjunt de «regressions» per comprovar que no trenques el que ja funcionava.
Llegir-ne cent a mà
4. Quanta memòria cal#
La pregunta pràctica de qualsevol ajust és si et cap a la GPU que tens. El compte és el del capítol 17: el que s'entrena paga 16 bytes per número i el que està congelat, 2 (o mig, si està comprimit a 4 bits). A sobre hi ha la feina del moment, els resultats intermedis, que creixen amb la llargada dels textos i amb quants se'n processen alhora.
Quanta memòria cal per ajustar un model
Les xifres de referència són aproximades: un model de 8.000 milions demana de l'ordre de 120 a 160 GB per a l'ajust complet (diverses GPU), uns 20 amb LoRA i uns 8 o 10 amb QLoRA; un de 70.000 milions, més d'un terabyte complet, uns 160 GB amb LoRA i uns 46-48 amb QLoRA. Amb textos llargs, la memòria de la feina del moment creix molt, i es redueix refent càlculs en comptes de desar-los, processant pocs exemples alhora i acumulant-ne els resultats, i empaquetant els exemples curts (la secció 7).
5. Destil·lar i fusionar#
Destil·lar és passar el que sap un model gran (el mestre) a un de petit (l'alumne). La manera més senzilla, i la que fa tothom, és entrenar l'alumne amb les respostes del mestre: és una de les raons per les quals els models petits han millorat tant. (Compte amb les condicions d'ús del mestre, que sovint ho prohibeixen.) Una manera més rica és entrenar-lo amb com repartia el mestre les seves fitxes a cada paraula, que porta molta més informació per exemple. Al camí matemàtic en diuen destil·lació de logits, que són les puntuacions de les quals surt aquest repartiment.
Aprendre de la resposta o del dubte
Al camí matemàtic es veu bé on guanya: amb només dues seqüències del mestre, l'alumne que aprèn de les respostes se les memoritza i davant de text nou fa pitjor que si endevinés a l'atzar, mentre que el que aprèn dels repartiments ja n'aprèn alguna cosa; amb més dades, la diferència s'escurça. La tercera manera, destil·lar raonaments, és avui la més rendible, i és la del capítol 19.
Una tècnica germana sona a trampa i funciona sorprenentment bé: fusionar models (model merging). S'agafen dos ajustos diferents del mateix model base i se'n fa, literalment, la mitjana dels números (o variants més fines, que retallen els canvis petits o resolen els que es contradiuen). No cal entrenar res.
Fer la mitjana de dos models
Funciona perquè els dos ajustos parteixen del mateix model i guarden les coses als mateixos llocs. I no és gratis: els dos canvis s'interfereixen una mica, i el model fusionat sol perdre una mica més del que sabia fer abans que cap dels dos per separat.
6. Com saber si ha servit#
Un ajust no s'acaba quan acaba l'entrenament, sinó quan saps què ha canviat. Les cinc comprovacions:
- Una avaluació de la tasca, amb marge d'error i comparant el model ajustat amb el de partida sobre les mateixes preguntes.
- Una avaluació de regressions: les capacitats generals que no vols perdre, i els casos que ja funcionaven.
- Comprovar si ha oblidat coses que sabia.
- Llegir a mà de 30 a 50 respostes. No hi ha res que ho substitueixi.
- Mesurar el cost: la latència i el preu per consulta, abans i després.
El punt 1 té un matís que marca la diferència. Les preguntes d'una avaluació són molt diferents entre elles, i aquesta variació és soroll. Si compares les dues notes mitjanes com si fossin de dos exàmens diferents, per veure una millora de 2 punts sobre un 70 % et calen unes 8.000 preguntes. Si compares pregunta a pregunta, el soroll de la dificultat desapareix i en calen moltes menys.
Comparar text a text
7. Receptes ràpides#
Una recepta típica d'ajust lleuger amb LoRA, en paraules: correccions de rang 32 a totes les taules de cada capa; un ritme d'aprenentatge més alt que el d'un ajust complet; dues passades per les dades; quatre exemples per GPU i acumular-ne vuit tandes abans de cada correcció; números de 16 bits; empaquetar els exemples curts i refer càlculs per estalviar memòria. Per a l'ajust de preferències (DPO, del capítol 18), una sola passada i un ritme encara més petit.
No fer càlcul sobre el buit
Les eines que ho fan sense haver de programar-ho tot: les biblioteques de Hugging Face (TRL i PEFT), Axolotl i LLaMA-Factory (que es configuren amb un fitxer de text), Unsloth (molt ràpida i estalviadora amb una sola GPU) i torchtune.
Què t'has d'endur#
- Abans d'ajustar un model, pregunta't per què falla. La majoria de vegades el remei és donar-li informació o demanar-li millor les coses, i sense una avaluació no ajustis res.
- LoRA no reescriu el model: hi afegeix una correcció petita, feta amb unes quantes columnes i files, que comença en blanc i es pot treure, canviar o fusionar.
- Les regles que corren sobre LoRA (quant més alt ha de ser el ritme d'aprenentatge, si oblida més o menys) depenen de la mida del model: comprova-les a la teva.
- Les dades decideixen l'ajust: poques, excel·lents, consistents, revisades a mà i amb proves per als defectes rars.
- Destil·lar d'un mestre i fusionar ajustos del mateix model són maneres barates de passar capacitat d'un model a un altre.
- Compara el model ajustat amb el de partida pregunta a pregunta, i mira també el que pot haver espatllat.
D'on surt un ChatGPT: on som
Comprova que ho has entès#
0 de 3 resoltes
- Un assistent intern s'equivoca sobre els preus dels vostres productes, que canvien cada setmana. Què hi faries?
- Per què el post-it de LoRA ha de començar en blanc (una de les dues peces a zero)?
- Has ajustat un model i la nota mitjana a la teva avaluació ha pujat 2 punts, però el marge d'error és més gran que la millora: la de debò podria ser zero. Què hauries de provar abans de concloure que no ha millorat?