Gradientenakkumulation mit Accelerator
Du trainierst ein Sprachmodell, um Übersetzungen zu vereinfachen, indem du komplexe Sätze umschreibst, aber deinem Grafikprozessor geht der Speicher aus. Die Gradientenakkumulation ermöglicht es dem Modell, effektiv auf größeren Stapeln zu trainieren, indem es kleine Stapel verwendet, die in den Speicher passen. Du ziehst es vor, die Trainingsschleife explizit zu schreiben, um ihre Struktur zu sehen, also benutzt du Accelerator
. Beachte, dass diese Übung tatsächlich auf der CPU läuft, aber der Code bleibt für die GPU derselbe.
Die Felder model
, train_dataloader
, optimizer
und lr_scheduler
sind vordefiniert.
Diese Übung ist Teil des Kurses
Effizientes KI-Modelltraining mit PyTorch
Anleitung zur Übung
- Konfiguriere
Accelerator()
so, dass es eine Gradientenakkumulation mit zwei Schritten verwendet. - Richte einen
Accelerator
Kontextmanager ein, um die Akkumulation von Gradienten für diemodel
zu ermöglichen.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# Configure Accelerator
accelerator = ____(____=____)
model, optimizer, train_dataloader, lr_scheduler = accelerator.prepare(model, optimizer, train_dataloader, lr_scheduler)
for batch in train_dataloader:
# Set up an Accelerator context manager
with ____.____(____):
inputs, targets = batch["input_ids"], batch["labels"]
outputs = model(inputs, labels=targets)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
print(f"Loss = {loss}")