Acúmulo de gradientes

Treinamento Eficiente de Modelos de IA com PyTorch

Dennis Lee

Data Engineer, Amazon

Treino distribuído

 

 

Fluxograma ilustrando os tópicos do curso: preparação de dados, treino distribuído, treino eficiente e otimizadores.

Treinamento Eficiente de Modelos de IA com PyTorch

Treino eficiente

 

 

Fluxograma ilustrando os tópicos do curso: preparação de dados, treino distribuído, treino eficiente e otimizadores.

Treinamento Eficiente de Modelos de IA com PyTorch

Melhorando a eficiência do treino

 

 

Ícones representando eficiência de memória, comunicação e computação.

Treinamento Eficiente de Modelos de IA com PyTorch

Melhorando a eficiência do treino

 

 

Ícones representando eficiência de memória, comunicação e computação.

Treinamento Eficiente de Modelos de IA com PyTorch

Melhorando a eficiência do treino

 

 

Ícones representando eficiência de memória, comunicação e computação.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes melhora a eficiência de memória

 

 

Ícones representando eficiência de memória, comunicação e computação.

Treinamento Eficiente de Modelos de IA com PyTorch

O problema de lotes grandes

  • Lotes grandes: estimativas de gradiente mais estáveis, aprendizado mais rápido
  • Memória da GPU limita o tamanho do lote

 

 

Diagrama mostrando que lotes grandes podem causar erro de memória, enquanto lotes menores permitem concluir o treino.

Treinamento Eficiente de Modelos de IA com PyTorch

Como funciona o acúmulo de gradientes?

Diagrama mostrando um lote grande dividido em menores.

  • Acúmulo de gradientes: soma gradientes de lotes menores
  • Treina como se fosse um lote grande
  • Atualiza os parâmetros após somar os gradientes

Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

PyTorch, Accelerator e Trainer

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

PyTorch, Accelerator e Trainer

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

PyTorch, Accelerator e Trainer

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com PyTorch

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









Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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







Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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







Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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()







Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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):





Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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()

Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

De PyTorch para Accelerator

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

De PyTorch para Accelerator

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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





Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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




Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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)



Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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)



Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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()

Diagrama mostrando acúmulo de gradientes como a soma dos gradientes de vários lotes.

Treinamento Eficiente de Modelos de IA com PyTorch

De Accelerator para Trainer

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

De Accelerator para Trainer

Gráfico comparando facilidade de uso vs. capacidade de customização para PyTorch, Accelerator e Trainer.

Treinamento Eficiente de Modelos de IA com PyTorch

Acúmulo de gradientes com 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}
Treinamento Eficiente de Modelos de IA com PyTorch

Vamos praticar!

Treinamento Eficiente de Modelos de IA com PyTorch

Preparing Video For Download...