Trenowanie modeli z Accelerator

Efektywne trenowanie modeli AI z PyTorch

Dennis Lee

Data Engineer, Amazon

Trainer i Accelerator

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

Efektywne trenowanie modeli AI z PyTorch

Niestandardowe pętle trenowania

  • Trainer: brak niestandardowych pętli trenowania
  • Niektóre zaawansowane zadania w generatywnej AI wymagają dwóch sieci

Obraz generatywnej sieci antagonistycznej.

1 https://www.aitude.com/basics-of-generative-adversarial-network-model/
Efektywne trenowanie modeli AI z PyTorch

Trainer i Accelerator

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

Efektywne trenowanie modeli AI z PyTorch

Modyfikowanie podstawowej pętli trenowania

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch inputs = inputs.to(device) targets = targets.to(device)
outputs = model(inputs)
loss = outputs.loss
loss.backward()
optimizer.step() scheduler.step()

 

  • Zerowanie gradientów
  • Przeniesienie danych na wskazane urządzenie: .to(device)
  • Przeprowadzenie przejścia w przód
  • Obliczenie straty krzyżowej
  • Obliczenie gradientów w przejściu wstecznym
  • Aktualizacja parametrów modelu i współczynnika uczenia
Efektywne trenowanie modeli AI z PyTorch

Tworzenie obiektu Accelerator

  • Accelerator udostępnia interfejs do trenowania rozproszonego
from accelerate import Accelerator
accelerator = Accelerator(
    device_placement=True
)
  • device_placement (bool, domyślnie True): domyślna obsługa przypisywania urządzeń
Efektywne trenowanie modeli AI z PyTorch

Definiowanie modelu i optymalizatora

  • Wczytanie wstępnie wytrenowanego modelu
from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-cased", return_dict=True)
  • Optymalizacja parametrów modelu z Adam
from torch.optim import Adam

optimizer = Adam(params=model.parameters(), lr=2e-5)
Efektywne trenowanie modeli AI z PyTorch

Definiowanie harmonogramu

from transformers import get_linear_schedule_with_warmup

lr_scheduler = get_linear_schedule_with_warmup(
      optimizer=optimizer,

num_warmup_steps=num_warmup_steps,
num_training_steps=num_training_steps)
  • optimizer (obj): optymalizator PyTorch, np. Adam
  • num_warmup_steps (int): kroki liniowego wzrostu lr, ustaw na int(num_training_steps * 0.1)
  • num_training_steps (int): łączna liczba kroków trenowania, ustaw na len(train_dataloader) * num_epochs
Efektywne trenowanie modeli AI z PyTorch

Przygotowanie modelu do efektywnego trenowania

  • Metoda prepare obsługuje przypisywanie urządzeń
model, optimizer, dataloader, lr_scheduler = \
    accelerator.prepare(model,

optimizer,
dataloader,
lr_scheduler)
Efektywne trenowanie modeli AI z PyTorch

Budowanie pętli trenowania z Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch inputs = inputs.to(device) targets = targets.to(device)
  • Zerowanie gradientów
  • Wcześniejsze przeniesienie danych na urządzenie
Efektywne trenowanie modeli AI z PyTorch

Budowanie pętli trenowania z Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
  • Zerowanie gradientów
  • Wcześniejsze przeniesienie danych na urządzenie
  • Usunięcie linii ręcznie przenoszących dane
Efektywne trenowanie modeli AI z PyTorch

Budowanie pętli trenowania z Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
outputs = model(inputs)
loss = outputs.loss loss.backward()
  • Zerowanie gradientów
  • Wcześniejsze przeniesienie danych na urządzenie
  • Usunięcie linii ręcznie przenoszących dane
  • Przeprowadzenie przejścia w przód
  • Obliczenie straty krzyżowej i gradientów
Efektywne trenowanie modeli AI z PyTorch

Budowanie pętli trenowania z Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
outputs = model(inputs) loss = outputs.loss
accelerator.backward(loss)
optimizer.step() scheduler.step()
  • Zerowanie gradientów
  • Wcześniejsze przeniesienie danych na urządzenie
  • Usunięcie linii ręcznie przenoszących dane
  • Przeprowadzenie przejścia w przód
  • Obliczenie straty krzyżowej i gradientów
  • Zastąpienie loss.backward przez accelerator
  • Aktualizacja parametrów modelu i współczynnika uczenia
Efektywne trenowanie modeli AI z PyTorch

Podsumowanie zmian

Przed Accelerator

  • Ręczne przenoszenie danych na urządzenia
    • inputs.to(device)
    • targets.to(device)
  • Obliczanie gradientów z loss.backward()

Po Accelerator

  • Automatyczne przypisywanie urządzeń i równoległość danych
    • accelerator.prepare(model)
    • accelerator.prepare(dataloader)
  • Synchronizacja gradientów z accelerator.backward(loss)
  • Konfigurowalna pętla
  • Przyjazny, niezależny od sprzętu, skalowalny i łatwy w utrzymaniu
Efektywne trenowanie modeli AI z PyTorch

Czas na ćwiczenia!

Efektywne trenowanie modeli AI z PyTorch

Preparing Video For Download...