Gradient-Akkumulation

Effizientes KI-Modelltraining mit PyTorch

Dennis Lee

Data Engineer, Amazon

Verteiltes Training

 

 

Ablaufdiagramm der Kursthemen: Datenvorbereitung, verteiltes Training, effizientes Training und Optimierer.

Effizientes KI-Modelltraining mit PyTorch

Effizientes Training

 

 

Ablaufdiagramm der Kursthemen: Datenvorbereitung, verteiltes Training, effizientes Training und Optimierer.

Effizientes KI-Modelltraining mit PyTorch

Trainingseffizienz verbessern

 

 

Symbole für Speicher-, Kommunikations- und Recheneffizienz.

Effizientes KI-Modelltraining mit PyTorch

Trainingseffizienz verbessern

 

 

Symbole für Speicher-, Kommunikations- und Recheneffizienz.

Effizientes KI-Modelltraining mit PyTorch

Trainingseffizienz verbessern

 

 

Symbole für Speicher-, Kommunikations- und Recheneffizienz.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation verbessert die Speichereffizienz

 

 

Symbole für Speicher-, Kommunikations- und Recheneffizienz.

Effizientes KI-Modelltraining mit PyTorch

Das Problem großer Batch-Größen

  • Große Batches: Robustere Gradienten, schnelleres Lernen
  • GPU-Speicher limitiert Batch-Größen

 

 

Diagramm: Große Batches führen zu Out-of-Memory-Fehlern; kleinere Batches lassen Training erfolgreich abschließen.

Effizientes KI-Modelltraining mit PyTorch

Wie funktioniert Gradient-Akkumulation?

Diagramm: Ein großer Batch wird in kleinere Batches aufgeteilt.

  • Gradient-Akkumulation: Summiere Gradienten über kleine Batches
  • Effektiv auf großem Batch trainieren
  • Parameter erst nach dem Summieren updaten

Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

PyTorch, Accelerator und Trainer

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

PyTorch, Accelerator und Trainer

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

PyTorch, Accelerator und Trainer

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))









Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss







Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps







Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()







Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()
    if ((index + 1) 
        % gradient_accumulation_steps == 0):





Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()
    if ((index + 1) 
        % gradient_accumulation_steps == 0):
        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()

Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Von PyTorch zu Accelerator

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

Von PyTorch zu Accelerator

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader): inputs, targets = (batch["input_ids"], batch["labels"])

Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):

        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss





Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss




Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss
        accelerator.backward(loss)



Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss
        accelerator.backward(loss)



Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        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()

Diagramm: Gradient-Akkumulation als Summe von Gradienten mehrerer Batches.

Effizientes KI-Modelltraining mit PyTorch

Von Accelerator zu Trainer

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

Von Accelerator zu Trainer

Diagramm: Vergleich Bedienkomfort vs. Anpassbarkeit für PyTorch, Accelerator und Trainer.

Effizientes KI-Modelltraining mit PyTorch

Gradient-Akkumulation mit Trainer

training_args = TrainingArguments(output_dir="./results",
                                  evaluation_strategy="epoch",
                                  gradient_accumulation_steps=2)

trainer = Trainer(model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"], compute_metrics=compute_metrics)
trainer.train()
{'epoch': 1.0, 'eval_loss': 0.73, 'eval_accuracy': 0.03, 'eval_f1': 0.05}
{'epoch': 2.0, 'eval_loss': 0.68, 'eval_accuracy': 0.19, 'eval_f1': 0.25}
Effizientes KI-Modelltraining mit PyTorch

Lass uns üben!

Effizientes KI-Modelltraining mit PyTorch

Preparing Video For Download...