Tích lũy gradient

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Dennis Lee

Data Engineer, Amazon

Huấn luyện phân tán

 

 

Lưu đồ minh họa các chủ đề khóa học: chuẩn bị dữ liệu, huấn luyện phân tán, huấn luyện hiệu quả và bộ tối ưu.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Huấn luyện hiệu quả

 

 

Lưu đồ minh họa các chủ đề khóa học: chuẩn bị dữ liệu, huấn luyện phân tán, huấn luyện hiệu quả và bộ tối ưu.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Cải thiện hiệu quả huấn luyện

 

 

Biểu tượng cho hiệu quả bộ nhớ, hiệu quả giao tiếp và hiệu quả tính toán.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Cải thiện hiệu quả huấn luyện

 

 

Biểu tượng cho hiệu quả bộ nhớ, hiệu quả giao tiếp và hiệu quả tính toán.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Cải thiện hiệu quả huấn luyện

 

 

Biểu tượng cho hiệu quả bộ nhớ, hiệu quả giao tiếp và hiệu quả tính toán.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient cải thiện hiệu quả bộ nhớ

 

 

Biểu tượng cho hiệu quả bộ nhớ, hiệu quả giao tiếp và hiệu quả tính toán.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Vấn đề với batch lớn

  • Batch lớn: Ước lượng gradient ổn định, học nhanh hơn
  • Bộ nhớ GPU giới hạn kích thước batch

 

 

Sơ đồ cho thấy batch lớn có thể gây lỗi hết bộ nhớ, trong khi batch nhỏ giúp huấn luyện hoàn tất.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient hoạt động thế nào?

Sơ đồ cho thấy một batch lớn được chia thành các batch nhỏ hơn.

  • Tích lũy gradient: Cộng gradient qua các batch nhỏ
  • Huấn luyện tương đương batch lớn
  • Cập nhật tham số sau khi cộng gradient

Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

PyTorch, Accelerator và Trainer

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

PyTorch, Accelerator và Trainer

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

PyTorch, Accelerator và Trainer

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với PyTorch

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









Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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







Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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







Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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()







Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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):





Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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()

Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Từ PyTorch đến Accelerator

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Từ PyTorch đến Accelerator

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

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

Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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





Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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




Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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)



Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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)



Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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()

Sơ đồ mô tả tích lũy gradient là tổng gradient từ nhiều batch.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Từ Accelerator đến Trainer

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Từ Accelerator đến Trainer

Biểu đồ so sánh dễ dùng và khả năng tùy biến của PyTorch, Accelerator và Trainer.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tích lũy gradient với 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}
Huấn luyện Mô hình AI Hiệu quả với PyTorch

Hãy thực hành!

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Preparing Video For Download...