Accelerate documentation

Kontrol Noktası Alma

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Kontrol Noktası Alma

Bir PyTorch modelini Accelerate ile eğitirken, eğitim durumunu kaydetmeye ve kaldığınız yerden devam etmeye sıkça ihtiyaç duyabilirsiniz. Bunun için modelin, optimizasyoncunun, RNG üreteçlerinin ve GradScaler'ın kaydedilmesi ve yüklenmesi gerekir. Accelerate içinde bunu hızlı bir şekilde gerçekleştirmek için iki kolaylaştırıcı işlev bulunur:

  • Yukarıda bahsedilen her şeyi bir klasör konumuna kaydetmek için save_state() kullanın
  • Daha önceki bir save_state ile kaydedilen her şeyi yüklemek için load_state() kullanın

save_state() ile durumların nerede ve nasıl kaydedileceğini daha da özelleştirmek için ProjectConfiguration sınıfı kullanılabilir. Örneğin, automatic_checkpoint_naming etkinleştirildiyse, her kaydedilen checkpoint Accelerator.project_dir/checkpoints/checkpoint_{checkpoint_number} konumunda bulunur.

Bu durumların aynı eğitim betiğinden geldiği varsayılmaktadır; iki ayrı betikten gelmemelidir.

  • register_for_checkpointing() kullanarak, nesnenin state_dict ve load_state_dict işlevselliğine sahip olması koşuluyla, özel nesnelerin yukarıdaki iki fonksiyon tarafından otomatik olarak saklanmasını veya yüklenmesini sağlayabilirsiniz. Bu, bir öğrenme hızı zamanlayıcısı gibi nesneleri içerebilir.

Aşağıda, eğitim sırasında bir durumu kaydetmek ve yeniden yüklemek için checkpointing kullanan kısa bir örnek bulunmaktadır:

from accelerate import Accelerator
import torch

accelerator = Accelerator(project_dir="my/save/path")

my_scheduler = torch.optim.lr_scheduler.StepLR(my_optimizer, step_size=1, gamma=0.99)
my_model, my_optimizer, my_training_dataloader = accelerator.prepare(my_model, my_optimizer, my_training_dataloader)

# Register the LR scheduler
accelerator.register_for_checkpointing(my_scheduler)

# Save the starting state
accelerator.save_state()

device = accelerator.device
my_model.to(device)

# Perform training
for epoch in range(num_epochs):
    for batch in my_training_dataloader:
        my_optimizer.zero_grad()
        inputs, targets = batch
        inputs = inputs.to(device)
        targets = targets.to(device)
        outputs = my_model(inputs)
        loss = my_loss_function(outputs, targets)
        accelerator.backward(loss)
        my_optimizer.step()
    my_scheduler.step()

# Restore the previous state
accelerator.load_state("my/save/path/checkpointing/checkpoint_0")

DataLoader durumunu geri yükleme

Kontrol noktasından devam ettikten sonra, durum bir epoch'un ortasında kaydedildiyse, aktif DataLoader'da belirli bir noktadan devam etmek de faydalı olabilir. Bunu yapmak için skip_first_batches() işlevini kullanabilirsiniz.

from accelerate import Accelerator

accelerator = Accelerator(project_dir="my/save/path")

train_dataloader = accelerator.prepare(train_dataloader)
accelerator.load_state("my_state")

# Assume the checkpoint was saved 100 steps into the epoch
skipped_dataloader = accelerator.skip_first_batches(train_dataloader, 100)

# After the first iteration, go back to `train_dataloader`

# First epoch
for batch in skipped_dataloader:
    # Do something
    pass

# Second epoch
for batch in train_dataloader:
    # Do something
    pass
Update on GitHub