Accelerate documentation

DataLoader'lar, Optimizer'lar ve Scheduler'lar

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

DataLoader'lar, Optimizer'lar ve Scheduler'lar

Distributed training için nesneleri hazırlamak üzere prepare() çağrıldığında Accelerate'ın kullandığı iç sınıflar

DataLoader yardımcıları

accelerate.data_loader.prepare_data_loader

< >

( dataloader: DataLoaderdevice: torch.device | None = Nonenum_processes: int | None = Noneprocess_index: int | None = Nonesplit_batches: bool = Falseput_on_device: bool = Falserng_types: list[str | accelerate.utils.dataclasses.RNGType] | None = Nonedispatch_batches: bool | None = Noneeven_batches: bool = Trueslice_fn_for_dispatch: typing.Callable | None = Noneuse_seedable_sampler: bool = Falsedata_seed: int | None = Nonenon_blocking: bool = Falseuse_stateful_dataloader: bool = Falsetorch_device_mesh = None ) → torch.utils.data.dataloader.DataLoader

Parametreler

  • dataloader (torch.utils.data.dataloader.DataLoader) — Birden fazla cihaz arasında bölünmek üzere kullanılan veri yükleyici.
  • device (torch.device) — Döndürülen DataLoader için hedef cihaz.
  • num_processes (int, isteğe bağlı) — Eşzamanlı olarak çalışan süreç sayısı. Varsayılan olarak PartialState tarafından verilen değeri kullanır.
  • process_index (int, isteğe bağlı) — Mevcut sürecin indeksi. Varsayılan olarak PartialState tarafından verilen değeri kullanır.
  • split_batches (bool, isteğe bağlı, varsayılan olarak False) — sonuçta oluşan DataLoader cihazlar arasında orijinal veri yükleyicisinin partilerini bölmeli mi yoksa tam partiler mi üretmeli (bu durumda process_index-inci partiden başlayarak ve her yinelemede num_processes partilik ilerlemeli). Bu seçeneğin True olarak ayarlanması, veri yükleyicisinin parti boyutunun batch_size'ın tam bir katı olmasını gerektirir.

    Bunun başka bir bakış açısı, bu seçenek True olarak ayarlanırsa gözlemlenen batch boyutunun başlangıç dataloader ile aynı olacağı, aksi halde başlangıç dataloader batch boyutunun num_processes ile çarpılacağıdır.

    Bu seçeneği True olarak ayarlamak, dataloader parti boyutunun batch_size'ın tam bir katı olmasını gerektirir.

  • put_on_device (bool, isteğe bağlı, varsayılan False) — Topluların device üzerine yerleştirilip yerleştirilmeyeceği (yalnızca toplular, tensörlerin iç içe listeleri, demetleri veya sözlükleri olduğunda çalışır).
  • rng_types (liste str veya RNGType) — Her iterasyonun başında senkronize edilecek rastgele sayı üreteçlerinin listesi. Şunlardan biri veya birkaçı olmalıdır:
    • "torch": temel torch rastgele sayı üreteci
    • "cuda": CUDA rastgele sayı üreteci (yalnızca GPU)
    • "xla": XLA rastgele sayı üreteci (yalnızca TPU)
    • "generator": altta yatan veri seti bu türdeyse, örnekleyicinin (dataloader'ınızda örnekleyici yoksa batch örnekleyicinin) veya yinelebilir veri setinin (varsa) torch.Generator'ı.
  • dispatch_batches (bool, isteğe bağlı) — True olarak ayarlanırsa, hazırlanan dataloader yalnızca ana süreçte iterasyon edilir ve ardından toplamlar bölünerek her sürece yayınlanır. Altta yatan veri seti bir IterableDataset ise varsayılan olarak True, aksi halde False olur.
  • even_batches (bool, isteğe bağlı, varsayılan True) — True olarak ayarlanırsa, tüm süreçler arasındaki toplam batch boyutu veri setini tam olarak bölmediğinde, batch'in tüm işçiler arasında eşit şekilde bölünebilmesi için veri setinin başındaki örnekler kopyalanır.
  • slice_fn_for_dispatch (Callable, optional) -- If passed, this function will be used to slice tensors across num_processes. Will default to [slice_tensors()](/docs/accelerate/main/en/package_reference/utilities#accelerate.utils.slice_tensors). This argument is used only when dispatch_batchesis set toTrue` and will be ignored otherwise.
  • use_seedable_sampler (bool, isteğe bağlı, varsayılan False) — Daha iyi tekrarlanabilirlik için RandomSampler yerine SeedableRandomSampler kullanılacak mı? Farklı karıştırma algoritmaları nedeniyle performansın farklı olma maliyeti vardır ancak sonuçların aynı olmasını garanti eder. Her self.set_epoch çağrısında set_seed() ile birlikte kullanılmalıdır.
  • data_seed (int, isteğe bağlı, varsayılan None) — use_seedable_sampler kullanılırken altta yatan üreteç için kullanılacak tohum. None ise üreteç, torch'taki geçerli varsayılan tohumu kullanır.
  • non_blocking (bool, isteğe bağlı, varsayılan False) — True olarak ayarlanırsa, dataloader engellenmeyen (non-blocking) hosttan cihaza aktarmaları kullanır. Dataloader'da pin_memory True olarak ayarlanmışsa, bu, veri aktarımı ile hesaplamalar arasındaki örtüşmeyi artırmaya yardımcı olur.
  • use_stateful_dataloader (bool, isteğe bağlı, varsayılan False) — “true olarak ayarlanırsa, Accelerator tarafından hazırlanan dataloader, torchdata.StatefulDataLoader tarafından desteklenir. Bunun için StatefulDataLoader’ı destekleyen 0.8.0 veya daha yüksek bir torchdata sürümünün yüklü olması gerekir.”
  • torch_device_mesh (torch.distributed.DeviceMesh, isteğe bağlı, varsayılan None) — PyTorch cihaz ızgarası.

Dönüş değeri

torch.utils.data.dataloader.DataLoader

Partiyelerin bölümünü verecek yeni bir veri yükleyici

Bir PyTorch DataLoader'ı sarar ve yalnızca süreçlerden biri için toplamlar üretir.

Geçirilen dataloader'ın drop_last özniteliğinin değerine bağlı olarak, ya çok küçük olacak / tüm süreçlerde mevcut olmayacak ilk partiyle birlikte yinelemeyi durdurur ya da baştan indekslerle döngüye devam eder.

Farklı parti boyutlarına sahip BatchSamplerlar varsayılan olarak etkinleştirilmez. Bu davranışı etkinleştirmek için even_batches parametresini False olarak ayarlayın.

accelerate.skip_first_batches

< >

( dataloadernum_batches = 0 )

İlk num_batches öğesini verimli bir şekilde atlayacak bir torch.utils.data.DataLoader oluşturur. Orijinal dataloader bir StatefulDataLoader ise kullanılmamalıdır.

BatchSamplerShard

sınıf accelerate.data_loader.BatchSamplerShard

< >

( batch_sampler: BatchSamplernum_processes: int = 1process_index: int = 0split_batches: bool = Falseeven_batches: bool = True )

Parametreler

  • batch_sampler (torch.utils.data.sampler.BatchSampler) — Birden fazla parçaya bölmek için kullanılacak batch örnekleme birimi.
  • num_processes (int, isteğe bağlı, varsayılan 1) — Eşzamanlı olarak çalışan süreç sayısı.
  • process_index (int, isteğe bağlı, varsayılan 0) — Mevcut sürecin indeksi.
  • split_batches (bool, isteğe bağlı, varsayılan olarak False) — Parçaların (shard), bir batch'in bölünerek her işlemciye bir parça verilmesi yoluyla mı yoksa her işlemcide farklı tam batch'lerin üretilmesi yoluyla mı oluşturulacağı.

    [[0, 1, 2, 3], [4, 5, 6, 7]] örnekleme aygıtına sahip iki işlemde, bu şu sonuca yol açar:

    • bu argüman False olarak ayarlanırsa, 0 numaralı işlemdeki örnekleyicinin [0, 1, 2, 3] ve 1 numaralı işlemdeki örnekleyicinin [4, 5, 6, 7] değerlerini üretmesini sağlar.
    • 0. işlemdeki örnekleyici [0, 1] ardından [4, 5] değerlerini, 1. işlemdeki örnekleyici ise [2, 3] ardından [6, 7] değerlerini üretir, bu argüman True olarak ayarlanmışsa.
  • even_batches (bool, isteğe bağlı, varsayılan True) — Örnek sayısı, (orijinal parti boyutu / süreç sayısı) değerinin tam bir katı olmadığında, örnekleyicinin başına dönüp dönmeyeceğini belirtir.

Bir PyTorch BatchSampler'ı sarar ve yalnızca süreçlerden biri için toplamlar üretir. Bu sınıfın örnekleri, her zaman num_processes'in tam bir katı sayıda ve hepsi aynı boyutta toplamlar verir. Geçirilen batch sampler'ın drop_last özniteliğinin değerine bağlı olarak, ya tüm süreçlerde bulunmayan / çok küçük olacak ilk toplamda yinelemeyi durdurur ya da baştan indekslerle döngüye girer.

Farklı parti boyutlarına sahip BatchSamplerlar varsayılan olarak etkinleştirilmez. Bu davranışı etkinleştirmek için even_batches parametresini False olarak ayarlayın.

IterableDatasetShard

sınıf accelerate.data_loader.IterableDatasetShard

< >

( dataset: IterableDatasetbatch_size: int = 1drop_last: bool = Falsenum_processes: int = 1process_index: int = 0split_batches: bool = False )

Parametreler

  • dataset (torch.utils.data.dataset.IterableDataset) — Birden fazla parçaya bölmek için kullanılan batch sampler.
  • batch_size (int, isteğe bağlı, varsayılan 1) — Pay başına toplu iş boyutu (split_batches=False ise) veya toplu işlerin boyutu (split_batches=True ise).
  • drop_last (bool, isteğe bağlı, varsayılan False) — Son eksik partiyi atlayıp atlamayacağına veya baştaki örnekleri kullanarak son partileri tamamlayıp tamamlamayacağına karar verir.
  • num_processes (int, isteğe bağlı, varsayılan 1) — Eşzamanlı olarak çalışan süreç sayısı.
  • process_index (int, isteğe bağlı, varsayılan 0) — Mevcut sürecin indeksi.
  • split_batches (bool, isteğe bağlı, varsayılan olarak False) — Parçaların (shard), bir batch'in bölünerek her işlemciye bir parçasının verilmesiyle mi yoksa her işlemcide farklı tam batch'lerin üretilmesiyle mi oluşturulacağı.

    [0, 1, 2, 3, 4, 5, 6, 7] üreten bir iterable veri setiyle iki işlemde, bu şu sonuca yol açar:

    • bu argüman False olarak ayarlanırsa, 0. işlemdeki parçanın [0, 1, 2, 3], 1. işlemdeki parçanın ise [4, 5, 6, 7] değerlerini üretmesini sağlar.
    • bu argüman True olarak ayarlanırsa, 0. işlemdeki parçanın [0, 1, 4, 5], 1. işlemdeki örnekleme cihazının ise [2, 3, 6, 7] değerlerini üretmesini sağlar.

Bir PyTorch IterableDataset sarmalar ve örnekleri yalnızca süreçlerden birine üretir. Bu sınıfın örnekleri, her zaman gerçek batch boyutunun tam bir katı olan sayıda örnek verir (split_batches değerine bağlı olarak bu, batch_size veya batch_size x num_processes olur). Geçirilen batch sampler'ın drop_last özniteliğinin değerine bağlı olarak, ya çok küçük olacak ilk batch'te iterasyonu durdurur ya da baştan indekslerle döngüye girer.

DataLoaderShard

sınıf accelerate.data_loader.DataLoaderShard

< >

( datasetdevice = Nonerng_types = Nonesynchronized_generator = Noneskip_batches = 0use_stateful_dataloader = False_drop_last: bool = False_non_blocking: bool = Falsetorch_device_mesh = Noneiteration = 0**kwargs )

Parametreler

  • dataset (torch.utils.data.dataset.Dataset) — Bu dataloader'ı oluşturmak için kullanılacak veri seti.
  • device (torch.device, isteğe bağlı) — Verilirse, tüm partilerin yerleştirileceği cihaz.
  • rng_types (liste str veya RNGType) — Her iterasyonun başında senkronize edilecek rastgele sayı üreteçlerinin listesi. Şunlardan biri veya birkaçı olmalıdır:
    • "torch": temel torch rastgele sayı üreteci
    • "cuda": CUDA rastgele sayı üreteci (yalnızca GPU)
    • "xla": XLA rastgele sayı üreteci (yalnızca TPU)
    • "generator": isteğe bağlı bir torch.Generator
  • synchronized_generator (torch.Generator, isteğe bağlı) — Süreçler arasında senkronize tutulacak bir rastgele sayı üreteci.
  • skip_batches (int, isteğe bağlı, varsayılan 0) — Başlangıçta atlanacak parti sayısı.
  • use_stateful_dataloader (bool, isteğe bağlı, varsayılan False) — Bu sınıfın, normal DataLoader yerine torchdata kütüphanesinden StatefulDataLoader sınıfını uyarlamasını sağlar.
  • **kwargs (ek anahtar kelime argümanları, isteğe bağlı) — Düzenli DataLoader başlatılmasına iletilecek diğer tüm anahtar kelime argümanları.

Cihaz yerleşimi ve mevcut dağıtık kurulumla ilgilenecek DataLoaderAdapter alt sınıfı.

Kullanılabilir öznitelikler:

  • total_batch_size (int) — Tüm süreçler arasında dataloader'ın toplam batch boyutu. split_batches=True olduğunda orijinal batch boyutuna eşittir; aksi halde orijinal batch boyutu * toplam süreç sayısı

  • total_dataset_length (int) — Tüm süreçler boyunca iç veri setinin toplam uzunluğu.

DataLoaderDispatcher

sınıf accelerate.data_loader.DataLoaderDispatcher

< >

( datasetsplit_batches: bool = Falseskip_batches = 0use_stateful_dataloader = False_drop_last: bool = False_non_blocking: bool = Falseslice_fn = Nonetorch_device_mesh = Noneiteration = 0**kwargs )

Parametreler

  • split_batches (bool, isteğe bağlı, varsayılan False) — Sonuçta oluşan DataLoader'ün, orijinal veri yükleyicisinin partilerini cihazlar arasında bölüp bölmeyeceği veya tam partiler üretip üretmeyeceği (bu durumda, process_index'den başlayarak ve her yinelemede num_processes parti ilerleyerek partiler üretir). Bunu başka bir şekilde görmek için, bu seçenek True olarak ayarlanırsa gözlemlenen parti boyutunun başlangıçtaki dataloader ile aynı olacağını, aksi halde başlangıçtaki dataloader parti boyutunun num_processes ile çarpılacağını söyleyebiliriz. Bu seçeneği True olarak ayarlamak, dataloader'ün parti boyutunun batch_size'ın tam bir katı olmasını gerektirir.
  • skip_batches (int, isteğe bağlı, varsayılan 0) — Bir yinelemede başlangıçta atlanacak parti sayısı.
  • use_stateful_dataloader (bool, isteğe bağlı, varsayılan False) — Bu sınıfın, normal DataLoader yerine torchdata kütüphanesinden StatefulDataLoader sınıfını uyarlamasını sağlar.

DataLoaderAdapter'ın, yalnızca 0 numaralı işlem üzerinde yineleme ve ön işleme yapıp ardından her işlemde partiye ait kısmı dağıtan alt sınıfı.

Kullanılabilir öznitelikler:

  • total_batch_size (int) — Tüm süreçler arasında dataloader'ın toplam batch boyutu. split_batches=True olduğunda orijinal batch boyutuna eşittir; aksi halde orijinal batch boyutu * toplam süreç sayısı

  • total_dataset_length (int) — Tüm süreçler boyunca iç veri setinin toplam uzunluğu.

AcceleratedOptimizer

sınıf accelerate.optimizer.AcceleratedOptimizer

< >

( optimizerdevice_placement = Truescaler = None )

Parametreler

  • optimizer (torch.optim.optimizer.Optimizer) — Sarmalanacak optimizasyon algoritması.
  • device_placement (bool, isteğe bağlı, varsayılan True) — Optimizatörün cihaz yerleşimini yönetip yönetmeyeceği. Eğer öyleyse, optimizer durum sözlüğünü doğru cihaza yerleştirir.
  • scaler (torch.amp.GradScaler veya torch.cuda.amp.GradScaler, isteğe bağlı) — Karışık hassasiyetle eğitim yapıldığında step fonksiyonunda kullanılacak ölçekleyici.

Bir torch optimizörünün iç sarmalayıcısı.

Gradyan biriktirme sırasında gradyanların senkronize edilmesi gerekiyorsa koşullu olarak step ve zero_grad işlemleri gerçekleştirilir.

değerlendirme

< >

( )

Optimizatörü “eval” moduna ayarlar. schedule_free gibi optimizatörler için faydalıdır.

eğit

< >

( )

Optimizatörü “train” moduna ayarlar. schedule_free gibi optimizatörler için faydalıdır.

AcceleratedScheduler

sınıf accelerate.scheduler.AcceleratedScheduler

< >

( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )

Parametreler

  • scheduler (torch.optim.lr_scheduler._LRScheduler) — Sarmalanacak zamanlayıcı.
  • optimizers (bir tane veya torch.optim.Optimizer listesi) — Kullanılan optimizörler.
  • step_with_optimizer (bool, isteğe bağlı, varsayılan True) — Zamanlayıcının (scheduler) her optimizasyon adımı (optimizer step) sırasında ilerletilip ilerletilmeyeceğini belirtir.
  • split_batches (bool, isteğe bağlı, varsayılan False) — Dataloaders'ın bir batch'i farklı süreçler arasında bölüp bölmediği (bu durumda batch boyutu, süreç sayısından bağımsız olarak aynı kalır) yoksa her süreçte ayrı batch'ler oluşturup oluşturmadığı (bu durumda batch boyutu, orijinal batch boyutunun süreç sayısı ile çarpımıdır).

Bir öğrenme hızı zamanlayıcısının etrafındaki bir sarmalayıcıdır; yalnızca optimizör(ler) bir eğitim adımı yaptığında adım atar. Gradyanlar taşma yaptığında ve bir eğitim adımı yapılmadığında (karışık hassasiyetli eğitimde) zamanlayıcının çok hızlı adım atmasını önlemek için faydalıdır.

Gradyan biriktirme sırasında zamanlayıcı uzunlukları buna göre değiştirilmemelidir; Accelerate bunu dikkate alarak zamanlayıcıyı her zaman adım atar.

Update on GitHub