Навчання моделей з Accelerator

Ефективне тренування моделей ШІ з PyTorch

Dennis Lee

Data Engineer, Amazon

Trainer і Accelerator

Діаграма порівняння простоти використання та можливості налаштування для Accelerator і Trainer.

Ефективне тренування моделей ШІ з PyTorch

Кастомні цикли навчання

  • Trainer: без власних циклів навчання
  • Деякі просунуті задачі генеративного ШІ потребують двох мереж

Зображення генеративно-змагальної мережі.

1 https://www.aitude.com/basics-of-generative-adversarial-network-model/
Ефективне тренування моделей ШІ з PyTorch

Trainer і Accelerator

Діаграма порівняння простоти використання та можливості налаштування для Accelerator і Trainer.

Ефективне тренування моделей ШІ з PyTorch

Модифікація базового циклу навчання

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()

 

  • Обнулити градієнти
  • Перенести дані на вказаний пристрій: .to(device)
  • Виконати прямий прохід
  • Обчислити крос-ентропійну втрату
  • Обчислити градієнти у зворотному проході
  • Оновити параметри моделі та швидкість навчання
Ефективне тренування моделей ШІ з PyTorch

Створення об’єкта Accelerator

  • Accelerator надає інтерфейс для розподіленого навчання
from accelerate import Accelerator
accelerator = Accelerator(
    device_placement=True
)
  • device_placement (bool, значення за замовчуванням True): автоматично керує розміщенням на пристроях
Ефективне тренування моделей ШІ з PyTorch

Визначення моделі та оптимізатора

  • Завантажте попередньо навчальну модель
from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-cased", return_dict=True)
  • Оптимізуйте параметри моделі за допомогою Adam
from torch.optim import Adam

optimizer = Adam(params=model.parameters(), lr=2e-5)
Ефективне тренування моделей ШІ з PyTorch

Визначення планувальника

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): оптимізатор PyTorch, наприклад Adam
  • num_warmup_steps (int): кроки лінійного підвищення lr, встановіть int(num_training_steps * 0.1)
  • num_training_steps (int): загальна кількість кроків навчання, встановіть len(train_dataloader) * num_epochs
Ефективне тренування моделей ШІ з PyTorch

Підготовка моделі до ефективного навчання

  • Метод prepare керує розміщенням на пристроях
model, optimizer, dataloader, lr_scheduler = \
    accelerator.prepare(model,

optimizer,
dataloader,
lr_scheduler)
Ефективне тренування моделей ШІ з PyTorch

Побудова циклу навчання з Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch inputs = inputs.to(device) targets = targets.to(device)
  • Обнулити градієнти
  • Раніше дані було перенесено на пристрій
Ефективне тренування моделей ШІ з PyTorch

Побудова циклу навчання з Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
  • Обнулити градієнти
  • Раніше дані було перенесено на пристрій
  • Видаліть рядки з ручним перенесенням даних
Ефективне тренування моделей ШІ з PyTorch

Побудова циклу навчання з Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
outputs = model(inputs)
loss = outputs.loss loss.backward()
  • Обнулити градієнти
  • Раніше дані було перенесено на пристрій
  • Видаліть рядки з ручним перенесенням даних
  • Виконати прямий прохід
  • Обчислити крос-ентропійну втрату та градієнти
Ефективне тренування моделей ШІ з PyTorch

Побудова циклу навчання з Accelerator

for batch in dataloader:

optimizer.zero_grad()
inputs, targets = batch
outputs = model(inputs) loss = outputs.loss
accelerator.backward(loss)
optimizer.step() scheduler.step()
  • Обнулити градієнти
  • Раніше дані було перенесено на пристрій
  • Видаліть рядки з ручним перенесенням даних
  • Виконати прямий прохід
  • Обчислити крос-ентропійну втрату та градієнти
  • Замінити loss.backward на accelerator
  • Оновити параметри моделі та швидкість навчання
Ефективне тренування моделей ШІ з PyTorch

Підсумок змін

До Accelerator

  • Потрібно вручну переносити дані на пристрої
    • inputs.to(device)
    • targets.to(device)
  • Обчислювати градієнти через loss.backward()

Після Accelerator

  • Автоматичне розміщення на пристроях і паралелізм даних
    • accelerator.prepare(model)
    • accelerator.prepare(dataloader)
  • Синхронізація градієнтів через accelerator.backward(loss)
  • Кастомізований цикл
  • Зручний, апаратно-агностичний, масштабований і зручний у підтримці
Ефективне тренування моделей ШІ з PyTorch

Ayo berlatih!

Ефективне тренування моделей ШІ з PyTorch

Preparing Video For Download...