Gradientackumulering

Effektiv AI-modellträning med PyTorch

Dennis Lee

Data Engineer, Amazon

Distribuerad träning

 

 

Flödesschema som illustrerar kursämnena: dataförberedelse, distribuerad träning, effektiv träning och optimerare.

Effektiv AI-modellträning med PyTorch

Effektiv träning

 

 

Flödesschema som illustrerar kursämnena: dataförberedelse, distribuerad träning, effektiv träning och optimerare.

Effektiv AI-modellträning med PyTorch

Förbättra träningseffektiviteten

 

 

Ikoner som representerar minneseffektivitet, kommunikationseffektivitet och beräkningseffektivitet.

Effektiv AI-modellträning med PyTorch

Förbättra träningseffektiviteten

 

 

Ikoner som representerar minneseffektivitet, kommunikationseffektivitet och beräkningseffektivitet.

Effektiv AI-modellträning med PyTorch

Förbättra träningseffektiviteten

 

 

Ikoner som representerar minneseffektivitet, kommunikationseffektivitet och beräkningseffektivitet.

Effektiv AI-modellträning med PyTorch

Gradientackumulering förbättrar minneseffektiviteten

 

 

Ikoner som representerar minneseffektivitet, kommunikationseffektivitet och beräkningseffektivitet.

Effektiv AI-modellträning med PyTorch

Problemet med stora batchstorlekar

  • Stora batchstorlekar: Robusta gradientuppskattningar för snabbare inlärning
  • GPU-minnet begränsar batchstorlekarna

 

 

Diagram som visar att stora batchstorlekar kan leda till minnesfelsmeddelanden, medan mindre batchstorlekar möjliggör lyckad träning.

Effektiv AI-modellträning med PyTorch

Hur fungerar gradientackumulering?

Diagram som visar en stor batch uppdelad i mindre batchar.

  • Gradientackumulering: Summera gradienter över mindre batchar
  • Träna modellen effektivt på en stor batch
  • Uppdatera modellparametrar efter summering av gradienter

Diagram som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

PyTorch, Accelerator och Trainer

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

PyTorch, Accelerator och Trainer

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

PyTorch, Accelerator och Trainer

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med PyTorch

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









Diagram som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Från PyTorch till Accelerator

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

Från PyTorch till Accelerator

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagram som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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 som illustrerar gradientackumulering som summan av gradienter från flera batchar.

Effektiv AI-modellträning med PyTorch

Från Accelerator till Trainer

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

Från Accelerator till Trainer

Diagram som jämför användarvänlighet och anpassningsbarhet för PyTorch, Accelerator och Trainer.

Effektiv AI-modellträning med PyTorch

Gradientackumulering med 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}
Effektiv AI-modellträning med PyTorch

Laten we oefenen!

Effektiv AI-modellträning med PyTorch

Preparing Video For Download...