Salta al contingut
Entendre els LLMs
Bloc 5pràctic3 h
IntuïtiuMatemàtic

Abans d'això: Postentrenament: SFT, RLHF i DPO, Àlgebra lineal per a deep learning

20 · Fine-tuning pràctic i PEFT

La pregunta que has de fer-te primer: realment necessito fer fine-tuning? En la gran majoria de casos de 2026, la resposta és no — i saber-ho t'estalvia setmanes.


1. L'arbre de decisió# sense fórmules

El model actual falla en la teva tasca?
├─ No → no facis res
└─ Sí → per què falla?
   ├─ Li falta informació        → RAG / context / eines
   ├─ No entén què vols          → millors prompts, exemples, sortides estructurades
   ├─ Format o to incorrectes    → prompt + few-shot (i si persisteix: SFT lleuger)
   ├─ Massa lent o massa car     → model més petit + fine-tuning (destil·lació)
   ├─ Domini molt especialitzat  → fine-tuning (o RAG, mesura'ls tots dos)
   └─ Necessites comportament    → fine-tuning amb dades de preferència
      molt específic i consistent

Casos on el fine-tuning guanya clarament: reduir cost i latència (model petit que iguala un de gran en una tasca), formats de sortida molt estrictes, dominis amb vocabulari i convencions pròpies, estil de marca consistent, tasques d'alt volum i baixa variabilitat.

Casos on perd: coneixement que canvia sovint (usa RAG), tasques poques i variades (usa prompting), quan no tens un conjunt d'avaluació sòlid (llavors no sabràs ni si ha millorat).

Cal fer fine-tuning?

Abans d'entrenar res: per què falla el model, i a partir de quin volum un model petit ajustat surt més barat que un de gran per API?

El model actual falla en la teva tasca?

Respon la primera pregunta per recórrer l’arbre del text.

  • model gran per API
  • model petit ajustat
  • el teu volum
  • punt d’equilibri
5.000 dòlars

Sobretot hores de persones: construir i revisar les dades, i l’eval.

5,00 dòlars
0,30 dòlars
700 dòlars

Una GPU reservada costa de l’ordre d’un dòlar l’hora: uns 700 al mes, si una de sola basta per al volum. Zero si el serveix un proveïdor per token.

12 mesos
50 milions de tokens
punt d’equilibri
238 milions de tokens al mes
API, 12 mesos
3.000 dòlars
propi, 12 mesos
13.580 dòlars
surt a compte?
no
Per sota de 238 milions de tokens al mes, el fine-tuning no surt a compte: amb 50 milions, l’API costa 3.000 dòlars i el propi 13.580 dòlars

El punt d’equilibri és on els dos costos s’igualen: ajust + (fix + propi·V)·mesos = API·V·mesos, és a dir V = (ajust/mesos + fix) / (API − propi). Cada milió de tokens que passa pel model propi estalvia 4,70 dòlars, i aquest estalvi ha de pagar dues coses: l’ajust repartit en 12 mesos, que demana 89 milions de tokens al mes, i el cost fix de tenir-lo servint, que en demana 149 milions. Aquí pesa més el cost fix que l’ajust: el que decideix no és quant costa entrenar, sinó quant costa tenir el model encès.

Caldria 4,8 vegades el volum actual. I el compte suposa que el model petit iguala el gran en aquesta tasca, que és justament el que una eval ha de demostrar abans de fer-lo servir.


2. LoRA: la tècnica que ho va canviar tot# sense fórmules

En lloc d'actualitzar W∈Rd×k\mathbf{W}\in\mathbb{R}^{d\times k}, aprèn una actualització de rang baix:

W′=W0+αrBA,B∈Rd×r, A∈Rr×k, r≪min⁡(d,k)\mathbf{W}' = \mathbf{W}_0 + \frac{\alpha}{r}\mathbf{B}\mathbf{A}, \qquad \mathbf{B}\in\mathbb{R}^{d\times r},\ \mathbf{A}\in\mathbb{R}^{r\times k},\ r\ll\min(d,k)

W0\mathbf{W}_0 es congela. A\mathbf{A} s'inicialitza aleatòriament i B\mathbf{B} a zero, de manera que al començament ΔW=0\Delta\mathbf{W}=0 i el model és idèntic a l'original.

Per què és tan bo:

  • Entrenes el 0,1-2% dels paràmetres → estats d'optimitzador i gradients minúsculs.
  • Els adaptadors pesen de desenes a uns pocs centenars de MB (uns 168 MB amb la recepta de la secció 7 sobre un 8B): pots tenir-ne centenars per a un mateix model base i servir-los simultàniament amb batching (multi-LoRA serving).
  • Es poden fusionar amb els pesos base (W0+αrBA\mathbf{W}_0 + \frac{\alpha}{r}\mathbf{BA}) per no tenir latència afegida en inferència.
  • Se sol dir que és menys propens a l'oblit catastròfic que el fine-tuning complet. No sempre: a l'escala petita del mini-GPT d'aquest tema, LoRA oblida més, i el widget d'entrenament ho mesura.

Hiperparàmetres:

ParàmetreValors típicsNotes
rr8-64 (128+ per a tasques dures)més rang ≠ sempre millor
α\alphasovint 2r2rl'escala efectiva és α/r\alpha/r
mòdulstotes les matrius lineals (q,k,v,o + les de l'FFN)limitar-ho a q,v és una pràctica antiga i pitjor
dropout0-0,1útil amb poques dades
LR1e-41\text{e-}4 a 3e-43\text{e-}4més alt que en fine-tuning complet: se sol dir 10-100×, i al mini-GPT d'aquest tema el millor surt 7× més alt

Variants: QLoRA (base quantitzat a NF4 de 4 bits + adaptadors en bf16, amb paged optimizers i double quantization) porta el fine-tuning d'un model de 70B a tocar d'una sola GPU de 48 GB: amb els valors per defecte del calculador de VRAM en surten 48,2, i cal retallar el context o el lot perquè hi càpiga. DoRA separa magnitud i direcció i sol millorar LoRA amb rangs baixos. LoRA+ usa LRs diferents per a A\mathbf{A} i B\mathbf{B}. rsLoRA corregeix l'escalat per a rangs alts.

Altres PEFT: adapters clàssics, prefix/prompt tuning (aprendre tokens virtuals), (IA)³, BitFit. LoRA i les seves variants han guanyat àmpliament.

LoRA, entrenat de debò

Si només entrenes dues matrius primes al costat de cada matriu del model, què pots aprendre, què costa, i què no es compleix del que se'n diu?

Descarregant els pesos del model base (236 kB)…

El complet primer, perquè Eckart–Young es calcula sobre el seu ΔW.

ajustentrenablespèrdua SFTfets nous‖ΔW − ΔW_c‖ ≥ EY

Pèrdua sobre fets que l'SFT no veu, i pèrdua del corpus, per a cada LR.

  • fine-tuning complet
  • LoRA, r = 4
8

Per a les comprovacions exactes i el recompte d’entrenables.

Mòduls adaptats
entrenables
—
logits idèntics amb B = 0
—
gradient contra dif. finites
—
LR òptim, LoRA / complet
—
fusió, ULP a l’escala
—
Entrena el complet i cinc rangs per veure la pèrdua contra r

150 passos cadascun, el complet amb LR 3·10⁻⁴ i LoRA amb 3·10⁻³, α = 2r.

Fes l’escombrada de LR per comparar el LR òptim i l’oblit

6 LR del complet i 6 de LoRA amb r = 4, 150 passos cadascun.


3. Dades: la part que realment decideix# sense fórmules

El 90% de l'èxit d'un fine-tuning és el dataset.

  • Quantitat: 500-5.000 exemples excel·lents per a una tasca concreta sol ser suficient. Per a canvis de comportament amplis, desenes de milers.
  • Qualitat: revisa'ls a mà. Llegeix-ne 100 a l'atzar. Sempre hi trobaràs sorpreses desagradables.
  • Consistència: si el 20% dels exemples segueixen un format diferent, el model aprendrà a barrejar-los.
  • Diversitat: cobreix la distribució real d'entrades, incloent-hi casos límit i entrades que s'han de rebutjar.
  • Generació sintètica: genera candidats amb un model fort, filtra'ls amb verificació o amb un jutge, i revisa una mostra. El rejection sampling (generar kk, quedar-se amb els que passen un test) és la recepta més fiable.
  • Divisió: train/val/test des del principi, i un conjunt de "regressions" per comprovar que no trenques el que ja funcionava.

Les dades decideixen

Si una part de les dades té un altre format, què aprèn el model? Filtrar mostres les fa bones? I quantes n'has de llegir per veure un defecte?

Descarregant els pesos del model base (236 kB)…

El mateix SFT quatre vegades, amb més o menys exemples en format curt («verd.» en lloc de «és verd.»).

dades curtessortides curtesgreedyencert, si llargaencert, si curtaben formadesencert total
  • sortides curtes, mostrejant
  • la diagonal: si copiés les dades

El rejection sampling fa servir els quatre fine-tunings com a generadors: entrena’ls primer.

Llegir-ne cent: amb p = 2,0 %, P(cap defecte en 100) = 0,1326.

Generador per al rejection sampling
Test que ha de passar
8
2,0 %
sortida curta (20 %)
—
cobertura, k = 8
—
qualitat, k = 8
—
veure’n un en 100, p = 2,0 %
86,7 %
Entrena els quatre fine-tunings per mesurar què fa el format barrejat

150 passos d’SFT cadascun, amb el 0, el 10, el 20 i el 40 % de les 80 entitats en format curt. Després, les setze respostes possibles de cada entitat, amb la seva probabilitat exacta.

Amb un 2,0 % de defectes, llegint-ne 100 a l’atzar en veus almenys un amb probabilitat 86,7 %; per a un 95 % en caldria llegir 149

1 − (1−p)^100: cada exemple llegit és net amb probabilitat 1 − p, i els cent ho són alhora amb (1 − p)^100. La regla de llegir-ne cent caça un defecte que afecti el 3 % del conjunt amb un 95,2 % de probabilitat, però un que n’afecti un de cada cent se li escapa una vegada de cada tres (36,6 %). Els defectes rars no es troben llegint: es troben amb tests.


4. Costos reals de VRAM (referència ràpida)# sense fórmules

ModelFine-tuning completLoRA (bf16)QLoRA (4-bit)
7-8B~120-160 GB (multi-GPU)~20-24 GB~8-10 GB
13B~250 GB~32-40 GB~12-16 GB
70B~1,1 TB (FSDP, 8-16 GPUs)~160 GB~46-48 GB

Xifres aproximades per a longituds de seqüència moderades; el context llarg augmenta molt la memòria d'activacions. Redueix-la amb gradient checkpointing, batch petit + acumulació, i packing.

La VRAM, comptada

Què ocupa la memòria d'un fine-tuning, i com hi cap un model de 70.000 milions de paràmetres en una GPU de 48 GB?

24 GB48 GB80 GB
  • pesos
  • adaptador
  • gradients
  • Adam: còpia fp32 i moments
  • activacions
  • logits i el seu gradient
modelCompletLoRAQLoRA
Llama 3 8B
✓ 131,4 GB
text: ~120-160 GB
✓ 19,7 GB
text: ~20-24 GB
✓ 9,30 GB
text: ~8-10 GB
Llama 2 13B
✗ 210,0 GB
text: ~250 GB
✗ 28,8 GB
text: ~32-40 GB
✗ 9,92 GB
text: ~12-16 GB
Llama 3 70B
✓ 1,13 TB
text: ~1,1 TB
✓ 149,8 GB
text: ~160 GB
✓ 48,2 GB
text: ~46-48 GB
NF4int4
Model
Mètode
16
2.048 tokens
1

L’acumulació de gradients no hi compta: el lot efectiu pot ser més gran sense més memòria.

bitsandbytes només quantitza les capes lineals dels blocs.

Llama 3 8B, Complet
131,4 GB
pesos
16,1 GB
gradients i Adam
112,4 GB
activacions i logits
2,92 GB
70B amb QLoRA en 48 GB?
no, 48,2 GB
Amb seqüències de 2.048 tokens, lot 1 i checkpointing, 6 de les 9 caselles del text surten dins del seu rang

Cada casella es compta sola: el que s’entrena paga 2 bytes de pesos, 2 de gradient, 4 de còpia mestra en fp32 i 8 dels dos moments d’Adam, 16 en total; el que està congelat, només els pesos (2 bytes en bf16, 4,127 bits en NF4). A sobre, les activacions (34·s·b·h bytes per capa, o l’entrada de cada capa i una de recalculada amb checkpointing) i els logits en fp32 amb el seu gradient.

  • 13B complet: 210,0 GB contra ~250 GB. La part fixa —pesos, gradients i estats— és 208,3 GB, i les activacions i logits 1,72 GB: el text hi compta més activacions, i amb un lot de 4 ja hi entra.
  • 13B LoRA: 28,8 GB contra ~32-40 GB. La part fixa —pesos, gradients i estats— és 27,0 GB, i les activacions i logits 1,72 GB: el text hi compta més activacions, i amb un lot de 2 ja hi entra.
  • 13B QLoRA: 9,92 GB contra ~12-16 GB. La part fixa —pesos, gradients i estats— és 8,20 GB, i les activacions i logits 1,72 GB: el text hi compta més activacions, i amb un lot de 2 ja hi entra.

El text avisa que són «xifres aproximades per a longituds de seqüència moderades», i és on es nota: la part fixa no depèn de res més que del model i del mètode, i les activacions creixen amb la seqüència i el lot. Mou-los i mira quines caselles entren i surten.

Un 70B amb QLoRA, amb aquesta configuració, no hi cap: 48,2 GB, 0,18 GB de més

Els pesos del 70B en NF4 amb doble quantització, amb l’embedding i el cap en bf16, fan 39,5 GB; l’adaptador de rang 16 (207.093.760 paràmetres) amb el seu gradient i els estats d’Adam, 3,31 GB; les activacions, 3,25 GB; els logits, 2,10 GB. El que ho fa cabre és que els 70.000 milions de paràmetres congelats passen de 2 bytes a mig byte, i que només els de l’adaptador paguen els 16 bytes de l’entrenament. Amb un sol canvi hi cabria: seqüències de 1.024 tokens; l’embedding i el cap també en NF4; rang 8.

El compte de l’exercici, amb 70·10⁹ paràmetres i només els pesos: a 4,127 bits, 36,1 GB; a 4 bits exactes, sense escales, 35,0 GB; sense doble quantització, a 4,5 bits, 39,4 GB; en bf16, 140,0 GB. Amb els 70.553.706.496 de Llama 3 70B quantitzats tots, 36,4 GB. I el que el compte no inclou —el context de CUDA, la fragmentació, els pesos desquantitzats d’una capa mentre es fan servir— és el que els paged optimizers de QLoRA cobreixen: quan la GPU s’omple, els estats d’Adam passen a la RAM.

Els setze nivells d’NF4 coincideixen amb els de bitsandbytes a 1,08·10⁻⁷; la doble quantització els deixa a 4,127 bits, i NF4 s’equivoca un 14 % menys que int4

Els nivells d’NF4 són quantils d’una normal: n’hi ha més a prop de zero, on hi ha més pesos. Es fan amb 8 quantils per a la banda positiva i 7 per a la negativa, més el zero exacte, i es normalitzen a [−1, 1]. Cada bloc de 64 pesos es divideix pel seu màxim absolut i cada pes va al nivell més proper.

Els bits: 4 per pes, més l’escala del bloc en fp32, 32/64 = 0,5, fan 4,500. La doble quantització quantitza les escales a 8 bits en blocs de 256, amb una segona escala en fp32 per bloc: 4 + 8/64 + 32/(64·256) = 4,126953125, el 4,127 del paper. L’error relatiu sobre 32.768 pesos gaussians: NF4 9,17 %, NF4 amb doble quantització 9,18 %, int4 10,69 %.


5. Destil·lació# sense fórmules

Transferir capacitat d'un model gran (professor) a un de petit (estudiant):

  • De resposta (black-box): entrena l'estudiant amb les sortides del professor. És el que fa tothom, i és el que fa que els models petits hagin millorat tant. Compte amb les condicions d'ús del professor.
  • De logits (white-box): minimitza DKL(pprof∥pest)D_{KL}(p_{prof}\|p_{est}) amb temperatura. Molt més eficient en dades, però requereix accés als logits i el mateix tokenitzador.
  • De traces de raonament: vegeu 19 — actualment la forma més rendible de destil·lació.

Destil·lació de logits

Què guanya un estudiant que veu les probabilitats del professor, i no només el que el professor escriu?

Descarregant els pesos del model base (236 kB)…

Primer, el professor escriu 128 seqüències; després, cada estudiant n’aprèn de 2, 8, 32 o 128.

  • aprèn de les mostres
  • aprèn dels logits
2,00

La finestra de dalt es recalcula a l’instant; l’entrenament fa servir la T que hi ha quan el comences.

T²·KL a T = 2,00
—
gradient contra dif. finites
—
‖∇‖ amb T² · sense
—
KL amb 32 seqüències
—
Entrena els vuit estudiants per mesurar l’eficiència en dades

Amb 2, 8, 32 i 128 seqüències del professor, un estudiant aprèn de les mostres i un altre dels logits.

Model merging: combinar diversos models fine-tunejats sobre la mateixa base (mitjana de pesos, task arithmetic, TIES, DARE, SLERP). Sona dubtós i funciona sorprenentment bé. És barat: no requereix cap entrenament.

Fusionar models

Si fas la mitjana dels pesos de dos models ajustats, obtens un model que fa les dues coses, o un model que no en fa cap?

Descarregant els pesos del model base (236 kB)…

La tasca A, fets; la B, un domini de text nou. B′ és la B des de la còpia permutada.

  • tasca A: fets
  • tasca B: el temps
  • corpus original

Les rectes apareixen quan acaba l’entrenament.

Recta
1,00
1,00
barrera, mateix base (A · B)
—
barrera, base permutat (A · B)
—
fusió: tasca A · tasca B
—
corpus de la fusió
—
Entrena els tres fine-tunings per veure les rectes

A (fets) i B (el temps) des del base, i B′ des de la còpia permutada, 150 passos cadascun; després, la pèrdua de totes dues tasques i la del corpus a 11 punts de cada recta.


6. Avaluació del teu fine-tuning# sense fórmules

  1. Eval específica de la tasca amb barres d'error i comparació aparellada contra el baseline (03).
  2. Eval de regressió: capacitats generals que no vols perdre (un subconjunt de benchmarks estàndard, més els teus casos antics).
  3. Comprovació d'oblit catastròfic: el model segueix sabent el que sabia?
  4. Inspecció manual de 30-50 sortides. No hi ha substitut.
  5. Mesura del cost: latència i preu per consulta abans i després.

Avaluar el fine-tuning

Com saps si el fine-tuning ha millorat de debò, i com saps que no ha espatllat res?

Una avaluació simulada: la mateixa millora, mirada com si les preguntes fossin independents i pregunta a pregunta

no aparellataparellat
  • com si fossin independents
  • pregunta a pregunta

I un fine-tuning de debò: millora la tasca, però què ha espatllat?

Descarregant els pesos del model base (236 kB)…

L’SFT de fets sobre el model base, amb el LR triat, i les dues avaluacions contra el base.

70 %
+3,0 punts
0,60

Com de sovint encerten i fallen les mateixes preguntes. Dos models del mateix base s’assemblen molt.

1.000

Una altra mostra de preguntes amb les mateixes probabilitats.

LR del fine-tuning de debò
millora mesurada
1,9 punts
interval no aparellat
±3,95 punts
interval aparellat
±2,53 punts
McNemar, p
0,1637 (exacte 0,1635)
Sobre les mateixes 1.000 preguntes, l’interval aparellat és 1,6 vegades més estret que el no aparellat

La diferència és la mateixa es miri com es miri: 1,90 punts. El que canvia és la incertesa. Tractades com a independents, les variàncies de les dues avaluacions se sumen. Ítem a ítem, les 833 preguntes que tots dos encerten o tots dos fallen no diuen res de la diferència i es cancel·len; només compten les 167 discordants: 93 que només encerta l’ajustat i 74 que només encerta el base.

McNemar fa el test sobre aquestes discordances: χ² = (|b − c| − 1)² / (b + c) = 1,94, p = 0,1637; el test binomial exacte, p = 0,1635. Al 5 %, no es pot dir que siguin diferents. Aparellar és gratis —les dues avaluacions ja són sobre les mateixes preguntes— i com més s’assemblen els dos models, més val: amb una correlació de 0,60, l’interval s’estreny 1,6 vegades. Dos models del mateix base s’assemblen molt. És la comparació aparellada del fitxer 03.

Per veure una millora de 2 punts sobre un 70 % amb una potència del 80 %: 8.077 preguntes tractant les avaluacions com a independents, 3.238 aparellades

sampleSizeForDifference suma les variàncies de les dues proporcions, i per a 2 punts en demana 8.077. Aparellades, el test de McNemar només mira les discordances: amb aquesta correlació, un 16,5 % de les preguntes, i en calen 3.238 (Connor, 1987). Amb una eval de 200 preguntes, l’interval aparellat faria ±5,6 punts: més ample que la millora que es vol veure.

Entrena un fine-tuning de debò per veure la regressió

150 passos d’SFT sobre el model base, amb el LR triat; després, les dues avaluacions contra el base.


7. Receptes ràpides# sense fórmules

SFT lleuger amb LoRA (HF TRL):

from trl import SFTTrainer, SFTConfig
from peft import LoraConfig

peft_cfg = LoraConfig(r=32, lora_alpha=64, lora_dropout=0.05, task_type="CAUSAL_LM",
                      target_modules=["q_proj","k_proj","v_proj","o_proj",
                                      "gate_proj","up_proj","down_proj"])
cfg = SFTConfig(learning_rate=2e-4, num_train_epochs=2, per_device_train_batch_size=4,
                gradient_accumulation_steps=8, bf16=True, packing=True,
                gradient_checkpointing=True, logging_steps=10, eval_strategy="steps")
SFTTrainer(model="...", train_dataset=ds, peft_config=peft_cfg, args=cfg).train()

La recepta, traduïda

Què vol dir cada número del LoraConfig i de l'SFTConfig, en paràmetres, en passos i en memòria?

peft_cfg = LoraConfig(
    r=32, lora_alpha=64, lora_dropout=0.05,
    task_type="CAUSAL_LM",
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
                    "gate_proj", "up_proj", "down_proj"],
)
cfg = SFTConfig(
    learning_rate=2e-4, num_train_epochs=2,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,
    bf16=True, packing=True, max_seq_length=2048,
    gradient_checkpointing=True, logging_steps=10,
)
Rang, r (lora_alpha = 2r)
target_modules
4
8
1
500
300
max_seq_length
2

Omplir cada seqüència amb diversos exemples seguits, en lloc d’un per seqüència amb farciment.

trainable params
83.886.080
trainable%
1,0338 %
lot efectiu
32 seqüències
passos en total
6
memòria per GPU
29,1 GB
Amb r = 32 i els set mòduls: 83.886.080 paràmetres entrenables (1,0338 % de 8.114.147.328), la xifra exacta que imprimeix PEFT

Cada mòdul adaptat afegeix r·(d_in + d_out) paràmetres per capa. Amb les formes de Llama 3 8B (d = 4.096, FFN de 14.336, 8 caps de KV de 128): q_proj 262.144, k_proj 163.840, v_proj 163.840, o_proj 262.144, gate_proj 589.824, up_proj 589.824, down_proj 589.824; en total 2.621.440 per capa, i per 32 capes, 83.886.080. print_trainable_parameters() divideix pel total del model amb l’adaptador, 8.030.261.248 + 83.886.080 = 8.114.147.328: d’aquí l’1,03 % amb r = 32. Doblar r dobla els paràmetres; amb r = 16, la meitat.

L’adaptador desat en bf16 pesa 168 MB. El text diu «desenes de MB»: és cert per a rangs baixos o menys mòduls; amb aquest rang i els set mòduls, ja són centenars. L’escala efectiva és α/r = 2: amb lora_alpha = 2r no canvia amb el rang.

Lot efectiu 4 × 8 × 1 = 32 seqüències, 65.536 tokens per pas: 3 passos per època i 6 en total

El lot efectiu és el que veu cada pas de l’optimitzador: per_device × gradient_accumulation × GPU. Amb packing, els 500 exemples de ~300 tokens es posen un darrere l’altre en seqüències de 2.048: 74 seqüències plenes. 6 passos és molt poc: amb logging_steps=10 no es veu cap punt de la corba de pèrdua, i l’escalfament del LR —si n’hi ha— se’n menja una part. Amb pocs exemples, un lot efectiu més petit dona més passos.

Memòria per GPU: 29,1 GB, hi cap en una de 48 GB

Amb el compte del widget de la VRAM, per a un lot per GPU de 4 i seqüències de 2.048: pesos 16,1 GB (bf16), adaptador i estats d’Adam 1,3 GB, activacions amb checkpointing 3,3 GB, i els logits en fp32 amb el seu gradient, 8,4 GB. L’acumulació de gradients no hi afegeix res: fa el lot efectiu gran sense tenir-lo tot a la memòria alhora. Amb el vocabulari de 128.256 tokens de Llama 3, els logits pesen més que totes les activacions: és la raó que moltes biblioteques calculin la pèrdua per trossos.

Alineament de preferències: DPOTrainer amb parelles (chosen, rejected), β≈0.1\beta\approx0.1, LR ∼5e-6\sim5\text{e-}6 (o 1e-41\text{e-}4 amb LoRA), 1 època.

Eines de l'ecosistema: Hugging Face TRL/PEFT (flexible), Axolotl i LLaMA-Factory (configuració declarativa YAML), Unsloth (molt més ràpid i eficient en memòria per a una sola GPU), torchtune.


8. Comprova que ho has entès#

0 de 6 resoltes

  1. Quan no hauries de fer fine-tuning? Dona tres casos.
  2. A LoRA, W′=W0+αrBA\mathbf{W}' = \mathbf{W}_0 + \tfrac{\alpha}{r}\mathbf{B}\mathbf{A}. Per què s'inicialitza B\mathbf{B} a zero i A\mathbf{A} a l'atzar?
  3. Per què el learning rate de LoRA és més alt que el del fine-tuning complet?
  4. QLoRA guarda els pesos congelats en NF4 amb doble quantització: 4 bits per pes més les escales dels blocs, 4,127 bits per paràmetre en total. Quants GB ocupen els pesos d'un model de 70·10⁹ paràmetres? (1 GB = 10⁹ bytes.)
    GBMarge acceptat: ± 0,400
  5. Al widget de la VRAM, configura un fine-tuning de Llama 3 70B amb QLoRA que càpiga en una GPU de 48 GB. La longitud de seqüència, el lot i la resta els tries tu.

    Objectiu:Al widget «La VRAM, comptada», tria Llama 3 70B i QLoRA, i ajusta la configuració fins que el total baixi de 48 GB.

    Vés al widget ↑model = per defecte · metode = per defecte · rang = per defecte · seq = per defecte · lot = per defecte · cp = per defecte · dq = per defecte · emb = per defecte
  6. Quines dues avaluacions has de fer sempre després d'un fine-tuning?

9. Recursos#

Marca els que hagis llegit
  • Hu et al. (2021), LoRA: Low-Rank Adaptation of Large Language Models.

  • Dettmers et al. (2023), QLoRA: Efficient Finetuning of Quantized LLMs.

  • Sebastian Raschka, Practical Tips for Finetuning LLMs Using LoRA.

  • Documentació de TRL, PEFT, Axolotl i Unsloth.

  • Yadav et al. (2023), TIES-Merging; Ilharco et al. (2022), Task Arithmetic.