Akumulacja gradientów

Efektywne trenowanie modeli AI z PyTorch

Dennis Lee

Data Engineer, Amazon

Trening rozproszony

 

 

Schemat blokowy ilustrujący tematy kursu: przygotowanie danych, trening rozproszony, efektywne uczenie i optymalizatory.

Efektywne trenowanie modeli AI z PyTorch

Efektywne uczenie

 

 

Schemat blokowy ilustrujący tematy kursu: przygotowanie danych, trening rozproszony, efektywne uczenie i optymalizatory.

Efektywne trenowanie modeli AI z PyTorch

Poprawa efektywności uczenia

 

 

Ikony reprezentujące wydajność pamięci, komunikacji i obliczeń.

Efektywne trenowanie modeli AI z PyTorch

Poprawa efektywności uczenia

 

 

Ikony reprezentujące wydajność pamięci, komunikacji i obliczeń.

Efektywne trenowanie modeli AI z PyTorch

Poprawa efektywności uczenia

 

 

Ikony reprezentujące wydajność pamięci, komunikacji i obliczeń.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów poprawia wydajność pamięci

 

 

Ikony reprezentujące wydajność pamięci, komunikacji i obliczeń.

Efektywne trenowanie modeli AI z PyTorch

Problem z dużymi rozmiarami batchy

  • Duże rozmiary batchy: stabilne estymaty gradientów dla szybszego uczenia
  • Pamięć GPU ogranicza rozmiar batcha

 

 

Diagram pokazujący, że duże rozmiary batchy mogą powodować błędy braku pamięci, a mniejsze umożliwiają pomyślne uczenie.

Efektywne trenowanie modeli AI z PyTorch

Jak działa akumulacja gradientów?

Diagram przedstawiający podział dużego batcha na mniejsze.

  • Akumulacja gradientów: sumowanie gradientów z mniejszych batchy
  • Efektywne uczenie modelu na dużym batchu
  • Aktualizacja parametrów modelu po zsumowaniu gradientów

Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

PyTorch, Accelerator i Trainer

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

PyTorch, Accelerator i Trainer

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

PyTorch, Accelerator i Trainer

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z PyTorch

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









Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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







Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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







Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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()







Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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):





Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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()

Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Od PyTorch do Accelerator

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

Od PyTorch do Accelerator

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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





Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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




Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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)



Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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)



Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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()

Diagram przedstawiający akumulację gradientów jako sumę gradientów z wielu batchy.

Efektywne trenowanie modeli AI z PyTorch

Od Accelerator do Trainer

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

Od Accelerator do Trainer

Wykres porównujący łatwość użycia i możliwość dostosowania dla PyTorch, Accelerator i Trainer.

Efektywne trenowanie modeli AI z PyTorch

Akumulacja gradientów z 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}
Efektywne trenowanie modeli AI z PyTorch

Czas na ćwiczenia!

Efektywne trenowanie modeli AI z PyTorch

Preparing Video For Download...