Akumulasi gradien

Pelatihan Model AI Efisien dengan PyTorch

Dennis Lee

Data Engineer, Amazon

Pelatihan terdistribusi

 

 

Bagan alur yang menggambarkan topik kursus: penyiapan data, pelatihan terdistribusi, pelatihan efisien, dan optimizer.

Pelatihan Model AI Efisien dengan PyTorch

Pelatihan efisien

 

 

Bagan alur yang menggambarkan topik kursus: penyiapan data, pelatihan terdistribusi, pelatihan efisien, dan optimizer.

Pelatihan Model AI Efisien dengan PyTorch

Meningkatkan efisiensi pelatihan

 

 

Ikon yang mewakili efisiensi memori, komunikasi, dan komputasi.

Pelatihan Model AI Efisien dengan PyTorch

Meningkatkan efisiensi pelatihan

 

 

Ikon yang mewakili efisiensi memori, komunikasi, dan komputasi.

Pelatihan Model AI Efisien dengan PyTorch

Meningkatkan efisiensi pelatihan

 

 

Ikon yang mewakili efisiensi memori, komunikasi, dan komputasi.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien meningkatkan efisiensi memori

 

 

Ikon yang mewakili efisiensi memori, komunikasi, dan komputasi.

Pelatihan Model AI Efisien dengan PyTorch

Masalah pada batch besar

  • Batch besar: Estimasi gradien lebih andal, belajar lebih cepat
  • Memori GPU membatasi ukuran batch

 

 

Diagram yang menunjukkan batch besar dapat menyebabkan error kehabisan memori, sedangkan batch kecil membantu pelatihan selesai.

Pelatihan Model AI Efisien dengan PyTorch

Bagaimana cara kerja akumulasi gradien?

Diagram yang menunjukkan batch besar dipecah menjadi batch lebih kecil.

  • Akumulasi gradien: Jumlahkan gradien dari batch kecil
  • Secara efektif melatih model pada batch besar
  • Perbarui parameter setelah penjumlahan gradien

Diagram yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

PyTorch, Accelerator, dan Trainer

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

PyTorch, Accelerator, dan Trainer

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

PyTorch, Accelerator, dan Trainer

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan PyTorch

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









Diagram yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Dari PyTorch ke Accelerator

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Dari PyTorch ke Accelerator

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Diagram yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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 yang menggambarkan akumulasi gradien sebagai jumlah gradien dari beberapa batch.

Pelatihan Model AI Efisien dengan PyTorch

Dari Accelerator ke Trainer

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Dari Accelerator ke Trainer

Bagan yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk PyTorch, Accelerator, dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Akumulasi gradien dengan 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}
Pelatihan Model AI Efisien dengan PyTorch

Ayo berlatih!

Pelatihan Model AI Efisien dengan PyTorch

Preparing Video For Download...