Накопление градиентов

Эффективное обучение моделей ИИ с PyTorch

Dennis Lee

Data Engineer, Amazon

Распределённое обучение

 

 

Блок-схема тем курса: подготовка данных, распределённое обучение, эффективное обучение и оптимизаторы.

Эффективное обучение моделей ИИ с PyTorch

Эффективное обучение

 

 

Блок-схема тем курса: подготовка данных, распределённое обучение, эффективное обучение и оптимизаторы.

Эффективное обучение моделей ИИ с PyTorch

Повышение эффективности обучения

 

 

Иконки, представляющие эффективность памяти, коммуникации и вычислений.

Эффективное обучение моделей ИИ с PyTorch

Повышение эффективности обучения

 

 

Иконки, представляющие эффективность памяти, коммуникации и вычислений.

Эффективное обучение моделей ИИ с PyTorch

Повышение эффективности обучения

 

 

Иконки, представляющие эффективность памяти, коммуникации и вычислений.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов повышает эффективность памяти

 

 

Иконки, представляющие эффективность памяти, коммуникации и вычислений.

Эффективное обучение моделей ИИ с PyTorch

Проблема больших размеров батча

  • Большие размеры батча: надёжные оценки градиента для ускоренного обучения
  • Память GPU ограничивает размер батча

 

 

Диаграмма: большой размер батча приводит к ошибке нехватки памяти, малый — позволяет завершить обучение.

Эффективное обучение моделей ИИ с PyTorch

Как работает накопление градиентов?

Диаграмма: большой батч разбивается на меньшие.

  • Накопление градиентов: суммирование градиентов по малым батчам
  • Эффективное обучение модели на большом батче
  • Обновление параметров после суммирования градиентов

Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

PyTorch, Accelerator и Trainer

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

PyTorch, Accelerator и Trainer

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

PyTorch, Accelerator и Trainer

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с PyTorch

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









Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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







Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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







Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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()







Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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):





Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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()

Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

От PyTorch к Accelerator

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

От PyTorch к Accelerator

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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





Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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




Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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)



Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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)



Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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()

Диаграмма накопления градиентов как суммы градиентов из нескольких батчей.

Эффективное обучение моделей ИИ с PyTorch

От Accelerator к Trainer

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

От Accelerator к Trainer

График сравнения удобства использования и возможности настройки для PyTorch, Accelerator и Trainer.

Эффективное обучение моделей ИИ с PyTorch

Накопление градиентов с 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}
Эффективное обучение моделей ИИ с PyTorch

Lass uns üben!

Эффективное обучение моделей ИИ с PyTorch

Preparing Video For Download...