Akumulace gradientů

Efficient AI Model Training with PyTorch

Dennis Lee

Data Engineer, Amazon

Distribuované trénování

 

 

Vývojový diagram ilustrující témata kurzu: příprava dat, distribuované trénování, efektivní trénování a optimalizátory.

Efficient AI Model Training with PyTorch

Efektivní trénování

 

 

Vývojový diagram ilustrující témata kurzu: příprava dat, distribuované trénování, efektivní trénování a optimalizátory.

Efficient AI Model Training with PyTorch

Zlepšování efektivity trénování

 

 

Ikony představující efektivitu paměti, komunikace a výpočtů.

Efficient AI Model Training with PyTorch

Zlepšování efektivity trénování

 

 

Ikony představující efektivitu paměti, komunikace a výpočtů.

Efficient AI Model Training with PyTorch

Zlepšování efektivity trénování

 

 

Ikony představující efektivitu paměti, komunikace a výpočtů.

Efficient AI Model Training with PyTorch

Akumulace gradientů zlepšuje efektivitu paměti

 

 

Ikony představující efektivitu paměti, komunikace a výpočtů.

Efficient AI Model Training with PyTorch

Problém velkých dávek

  • Velké dávky: robustní odhady gradientů pro rychlejší učení
  • Paměť GPU omezuje velikost dávek

 

 

Diagram znázorňující, že velké dávky mohou způsobit chybu nedostatku paměti, zatímco menší dávky umožní úspěšné trénování.

Efficient AI Model Training with PyTorch

Jak funguje akumulace gradientů?

Diagram znázorňující rozdělení velké dávky na menší dávky.

  • Akumulace gradientů: součet gradientů přes menší dávky
  • Efektivně trénuje model na velké dávce
  • Parametry modelu se aktualizují po součtu gradientů

Diagram znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

PyTorch, Accelerator a Trainer

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

PyTorch, Accelerator a Trainer

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

PyTorch, Accelerator a Trainer

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

Akumulace gradientů s PyTorch

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









Diagram znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s 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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s 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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s 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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s 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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s 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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Od PyTorch k Acceleratoru

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

Od PyTorch k Acceleratoru

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagram znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Acceleratorem

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 znázorňující akumulaci gradientů jako součet gradientů z více dávek.

Efficient AI Model Training with PyTorch

Od Acceleratoru k Traineru

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

Od Acceleratoru k Traineru

Graf porovnávající snadnost použití a možnosti přizpůsobení pro PyTorch, Accelerator a Trainer.

Efficient AI Model Training with PyTorch

Akumulace gradientů s Trainerem

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}
Efficient AI Model Training with PyTorch

Lass uns üben!

Efficient AI Model Training with PyTorch

Preparing Video For Download...