Acumularea gradienților

Antrenament eficient al modelelor AI cu PyTorch

Dennis Lee

Data Engineer, Amazon

Antrenament distribuit

 

 

Diagramă care ilustrează subiectele cursului: pregătirea datelor, antrenament distribuit, antrenament eficient și optimizatori.

Antrenament eficient al modelelor AI cu PyTorch

Antrenament eficient

 

 

Diagramă care ilustrează subiectele cursului: pregătirea datelor, antrenament distribuit, antrenament eficient și optimizatori.

Antrenament eficient al modelelor AI cu PyTorch

Îmbunătățirea eficienței antrenamentului

 

 

Pictograme reprezentând eficiența memoriei, eficiența comunicării și eficiența computațională.

Antrenament eficient al modelelor AI cu PyTorch

Îmbunătățirea eficienței antrenamentului

 

 

Pictograme reprezentând eficiența memoriei, eficiența comunicării și eficiența computațională.

Antrenament eficient al modelelor AI cu PyTorch

Îmbunătățirea eficienței antrenamentului

 

 

Pictograme reprezentând eficiența memoriei, eficiența comunicării și eficiența computațională.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților îmbunătățește eficiența memoriei

 

 

Pictograme reprezentând eficiența memoriei, eficiența comunicării și eficiența computațională.

Antrenament eficient al modelelor AI cu PyTorch

Problema loturilor mari

  • Loturi mari: estimări robuste ale gradienților pentru învățare mai rapidă
  • Memoria GPU limitează dimensiunea loturilor

 

 

Diagramă care arată că loturile mari pot cauza erori de memorie insuficientă, în timp ce loturile mici permit finalizarea cu succes a antrenamentului.

Antrenament eficient al modelelor AI cu PyTorch

Cum funcționează acumularea gradienților?

Diagramă care arată un lot mare împărțit în loturi mai mici.

  • Acumularea gradienților: suma gradienților pe loturi mici
  • Antrenament efectiv pe un lot mare
  • Actualizarea parametrilor după sumarea gradienților

Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

PyTorch, Accelerator și Trainer

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

PyTorch, Accelerator și Trainer

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

PyTorch, Accelerator și Trainer

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu PyTorch

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









Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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ă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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ă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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ă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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ă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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ă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

De la PyTorch la Accelerator

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

De la PyTorch la Accelerator

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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





Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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




Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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)



Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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)



Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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()

Diagramă care ilustrează acumularea gradienților ca sumă a gradienților din mai multe loturi.

Antrenament eficient al modelelor AI cu PyTorch

De la Accelerator la Trainer

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

De la Accelerator la Trainer

Grafic comparând ușurința utilizării vs. capacitatea de personalizare pentru PyTorch, Accelerator și Trainer.

Antrenament eficient al modelelor AI cu PyTorch

Acumularea gradienților cu 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}
Antrenament eficient al modelelor AI cu PyTorch

Să exersăm!

Antrenament eficient al modelelor AI cu PyTorch

Preparing Video For Download...