# 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()](/docs/accelerate/main/tr/package_reference/accelerator#accelerate.Accelerator.save_state) kullanın
- Daha önceki bir `save_state` ile kaydedilen her şeyi yüklemek için [load_state()](/docs/accelerate/main/tr/package_reference/accelerator#accelerate.Accelerator.load_state) kullanın

[save_state()](/docs/accelerate/main/tr/package_reference/accelerator#accelerate.Accelerator.save_state) ile durumların nerede ve nasıl kaydedileceğini daha da özelleştirmek için [ProjectConfiguration](/docs/accelerate/main/tr/package_reference/utilities#accelerate.utils.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()](/docs/accelerate/main/tr/package_reference/accelerator#accelerate.Accelerator.register_for_checkpointing) kullanarak, önceki iki işlev tarafından otomatik olarak saklanacak veya yüklenecek özel nesneleri kaydedebilirsiniz,
Nesnenin `state_dict` **ve** `load_state_dict` işlevselliğine sahip olması yeterlidir. Bu, bir öğrenme hızı zamanlayıcısı gibi nesneleri de 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:

```python
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()](/docs/accelerate/main/tr/package_reference/accelerator#accelerate.Accelerator.skip_first_batches) işlevini kullanabilirsiniz.

```python
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
```

