Batch Size

[bach saiz]

Quanti esempi processi insieme in uno step di training. Iperparametro chiave: troppo piccolo è lento e instabile, troppo grande non ci sta in memoria.

Il batch size è il numero di esempi che il modello vede insieme in uno step di gradient descent. Iperparametro fondamentale, sceglierlo bene è arte di mestiere.

Effetti del batch size:

  • Più grande = più veloce (in termini di esempi/secondo): le GPU sono fatte per parallelizzare. Sotto un certo batch size, sprechi compute.
  • Più grande = gradiente più stabile: media su tanti esempi, meno rumore.
  • Più grande = generalizzazione potenzialmente peggiore: meno rumore = meno "esplorazione" dell'ottimizzatore. Effetto noto, controintuitivo.
  • Più grande = più memoria: ogni esempio occupa VRAM. Ovvio.

Valori tipici:

  • Computer vision (ImageNet): 256-1024.
  • Fine-tuning LLM: 8-64 (limitato da memoria).
  • Pretraining LLM: enormi, anche 4 milioni di token per batch (effettivo, distribuito su cluster).
  • Prototipi su laptop: 4-16.

Trucchi quando il batch size voluto non ci sta:

  • Gradient accumulation: simuli batch grande accumulando gradienti su batch piccoli. Trade tempo contro memoria.
  • Mixed precision (FP16/BF16): dimezzi memoria, raddoppi batch.
  • Gradient checkpointing: ricalcoli attivazioni invece di salvarle. Più tempo, meno memoria.
  • Distribuzione su più GPU: data parallelism.

Relazione con learning rate: la "linear scaling rule" dice che se raddoppi il batch, dovresti raddoppiare il learning rate. Funziona fino a un certo punto, poi degrada. Per batch enormi serve warmup più lungo e schedule customizzati.

Insomma: batch size = compromesso tra velocità, stabilità, memoria, generalizzazione. Niente di magico, solo da regolare con attenzione.