Mixed precision training met basis-PyTorch
Je gaat zwevendekommagetallen met lage precisie gebruiken om de training van je vertaamodel te versnellen. Zo zijn 16-bits zwevendekommagetallen (float16) maar half zo groot als hun 32-bits tegenhangers (float32). Dit versnelt berekeningen voor matrixvermenigvuldigingen en convoluties. Onthoud dat dit inhoudt dat je de gradiënten schaalt en bewerkingen cast naar 16-bits zwevendekommagetallen.
Een aantal objecten is al voor je geladen: dataset, model, dataloader en optimizer.
Deze oefening maakt deel uit van de cursus
Efficiënt AI-modellen trainen met PyTorch
Oefeninstructies
- Definieer vóór de lus een scaler voor de gradiënten met
torch.amp.GradScaler. - Cast in de lus bewerkingen naar het 16-bits zwevendekommagetaltype met
torch.autocastals contextmanager. - Schaal in de lus de loss en roep
.backward()aan om geschaalde gradiënten te maken.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# Define a scaler for the gradients
scaler = torch.amp.____()
for batch in train_dataloader:
inputs, targets = batch["input_ids"], batch["labels"]
# Casts operations to mixed precision
with torch.____(device_type="cpu", dtype=torch.____):
outputs = model(inputs, labels=targets)
loss = outputs.loss
# Compute scaled gradients
scaler.____(loss).backward()
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()