Accelerate documentation
DataLoader'lar, Optimizer'lar ve Scheduler'lar
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
< source >( 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ülenDataLoaderiç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 olarakFalse) — sonuçta oluşanDataLoadercihazlar arasında orijinal veri yükleyicisinin partilerini bölmeli mi yoksa tam partiler mi üretmeli (bu durumdaprocess_index-inci partiden başlayarak ve her yinelemedenum_processespartilik 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
Trueolarak ayarlanırsa gözlemlenen batch boyutunun başlangıçdataloaderile aynı olacağı, aksi halde başlangıçdataloaderbatch boyutununnum_processesile çarpılacağıdır.Bu seçeneği
Trueolarak ayarlamak,dataloaderparti boyutununbatch_size'ın tam bir katı olmasını gerektirir. - put_on_device (
bool, isteğe bağlı, varsayılanFalse) — Toplularındeviceü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
strveya 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ı) —Trueolarak 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 birIterableDatasetise varsayılan olarakTrue, aksi haldeFalseolur. - even_batches (
bool, isteğe bağlı, varsayılanTrue) —Trueolarak 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 acrossnum_processes. Will default to [slice_tensors()](/docs/accelerate/main/en/package_reference/utilities#accelerate.utils.slice_tensors). This argument is used only whendispatch_batchesis set toTrue` and will be ignored otherwise. - use_seedable_sampler (
bool, isteğe bağlı, varsayılanFalse) — Daha iyi tekrarlanabilirlik içinRandomSampleryerineSeedableRandomSamplerkullanılacak mı? Farklı karıştırma algoritmaları nedeniyle performansın farklı olma maliyeti vardır ancak sonuçların aynı olmasını garanti eder. Herself.set_epochçağrısındaset_seed()ile birlikte kullanılmalıdır. - data_seed (
int, isteğe bağlı, varsayılanNone) —use_seedable_samplerkullanılırken altta yatan üreteç için kullanılacak tohum.Noneise üreteç, torch'taki geçerli varsayılan tohumu kullanır. - non_blocking (
bool, isteğe bağlı, varsayılanFalse) —Trueolarak ayarlanırsa, dataloader engellenmeyen (non-blocking) hosttan cihaza aktarmaları kullanır. Dataloader'dapin_memoryTrueolarak 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ılanFalse) — “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 birtorchdatasürümünün yüklü olması gerekir.” - torch_device_mesh (
torch.distributed.DeviceMesh, isteğe bağlı, varsayılanNone) — 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çineven_batchesparametresiniFalseolarak ayarlayın.
İ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
< source >( 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 olarakFalse) — 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
Falseolarak 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ümanTrueolarak ayarlanmışsa.
- bu argüman
- even_batches (
bool, isteğe bağlı, varsayılanTrue) — Ö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çineven_batchesparametresiniFalseolarak ayarlayın.
IterableDatasetShard
sınıf accelerate.data_loader.IterableDatasetShard
< source >( 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=Falseise) veya toplu işlerin boyutu (split_batches=Trueise). - drop_last (
bool, isteğe bağlı, varsayılanFalse) — 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 olarakFalse) — 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
Falseolarak 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
Trueolarak 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.
- bu argüman
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
< source >( 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
strveya 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ı birtorch.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ılanFalse) — Bu sınıfın, normalDataLoaderyerinetorchdatakütüphanesindenStatefulDataLoadersınıfını uyarlamasını sağlar. - **kwargs (ek anahtar kelime argümanları, isteğe bağlı) —
Düzenli
DataLoaderbaş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=Trueolduğ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
< source >( 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ılanFalse) — Sonuçta oluşanDataLoader'ü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 yinelemedenum_processesparti ilerleyerek partiler üretir). Bunu başka bir şekilde görmek için, bu seçenekTrueolarak ayarlanırsa gözlemlenen parti boyutunun başlangıçtakidataloaderile aynı olacağını, aksi halde başlangıçtakidataloaderparti boyutununnum_processesile çarpılacağını söyleyebiliriz. Bu seçeneğiTrueolarak ayarlamak,dataloader'ün parti boyutununbatch_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ılanFalse) — Bu sınıfın, normalDataLoaderyerinetorchdatakütüphanesindenStatefulDataLoadersı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=Trueolduğ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
< source >( optimizerdevice_placement = Truescaler = None )
Parametreler
- optimizer (
torch.optim.optimizer.Optimizer) — Sarmalanacak optimizasyon algoritması. - device_placement (
bool, isteğe bağlı, varsayılanTrue) — Optimizatörün cihaz yerleşimini yönetip yönetmeyeceği. Eğer öyleyse,optimizerdurum sözlüğünü doğru cihaza yerleştirir. - scaler (
torch.amp.GradScalerveyatorch.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.
Optimizatörü “eval” moduna ayarlar. schedule_free gibi optimizatörler için faydalıdır.
Optimizatörü “train” moduna ayarlar. schedule_free gibi optimizatörler için faydalıdır.
AcceleratedScheduler
sınıf accelerate.scheduler.AcceleratedScheduler
< source >( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )
Parametreler
- scheduler (
torch.optim.lr_scheduler._LRScheduler) — Sarmalanacak zamanlayıcı. - optimizers (bir tane veya
torch.optim.Optimizerlistesi) — Kullanılan optimizörler. - step_with_optimizer (
bool, isteğe bağlı, varsayılanTrue) — 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ılanFalse) — 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.