Erät: enemmän esimerkkejä yhden päivityksen takana
Erä (batch) kokoaa esimerkkejä laskentaa tai koulutuspäivitystä varten. Koulutuksessa sen tavoitteista saadut gradientit yhdistetään ennen parametrien muuttamista. Usean esimerkin käsittely yhdessä antaa myös matriisioperaatioille enemmän rinnakkaista työtä.
Suurempi erä ei tarkoita yhden esimerkin pidempää kontekstia. Eräkoko ja jonon pituus ovat eri ulottuvuuksia, vaikka molemmat vaikuttavat muistiin ja tokenien kokonaismäärään.
Kerrytä suurempi erä pienistä osista
Gradienttien kerryttäminen (gradient accumulation) käsittelee pienempiä mikroeriä, laskee gradientit yhteen ja tekee sen jälkeen yhden optimointiaskeleen. Tämä PyTorch-esimerkki keskiarvoistaa koko tehollisen erän kelvolliset tavoitetokenit. microbatches on lista syöte- ja tavoitetensorien pareista. Malli palauttaa valmiiksi kohdistetut logitit; tavoite -100 tarkoittaa ohitettavaa sijaintia.
import torch.nn.functional as F
def accumulated_step(model, optimizer, microbatches):
total = sum((y != -100).sum().item() for _, y in microbatches)
optimizer.zero_grad()
for inputs, targets in microbatches:
logits = model(inputs)
loss = F.cross_entropy(
logits.reshape(-1, logits.shape[-1]), targets.reshape(-1),
reduction="sum", ignore_index=-100)
(loss / total).backward()
optimizer.step()
Mikroerän häviöiden summa ja yhteinen tokenimäärän nimittäjä ovat tärkeitä, kun kelvollisten tavoitteiden määrät eroavat. Erillisten keskiarvojen tasapainotus antaisi lyhyelle ja pitkälle mikroerälle saman vaikutuksen.
Sama tavoite, erilainen suoritus
Yhdistetty gradientti edustaa valittua tokenien keskiarvotavoitetta. Erästä riippuvat kerrokset ja satunnaiset operaatiot voivat silti erottaa suorituksen yhdestä suuresta laskentavaiheesta. Kerrytettäessä tehdään myös useita laskentakertoja: menetelmä säästää aktivaatioiden huippumuistia eikä poista työtä.
Mallin ajossa eräkäsittely puolestaan yhdistää pyyntöjä laitteiston tehokkaaksi käyttämiseksi. Niiden historiat ja tulokset pysyvät erillisinä. Palvelin voi ottaa uusia pyyntöjä vanhojen valmistuessa; hyödyllinen yksikkö on aktiivinen työ, ei pysyvä käyttäjäryhmä.