Accelerate documentation
DataLoaders, Optimizers y Schedulers
DataLoaders, Optimizers y Schedulers
Las clases internas que utiliza Accelerate para preparar objetos para el entrenamiento distribuido al llamar a prepare().
Utilidades de DataLoader
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
Parámetros
- dataloader (
torch.utils.data.dataloader.DataLoader) — El cargador de datos para dividir entre varios dispositivos. - device (
torch.device) — El dispositivo de destino para elDataLoaderdevuelto. - num_processes (
int, opcional) — El número de procesos que se ejecutan de forma concurrente. Por defecto, tomará el valor indicado por PartialState. - process_index (
int, opcional) — El índice del proceso actual. Por defecto, tomará el valor proporcionado por PartialState. - split_batches (
bool, optional, defaults toFalse) — Whether the resultingDataLoadershould split the batches of the original data loader across devices or yield full batches (in which case it will yield batches starting at theprocess_index-th and advancing ofnum_processesbatches at each iteration).Otra forma de verlo es que el tamaño de lote observado será el mismo que el del
dataloaderinicial si esta opción se establece enTrue, y el tamaño de lote deldataloaderinicial multiplicado pornum_processesen caso contrario.Establecer esta opción en
Truerequiere que el tamaño de lote deldataloadersea un múltiplo exacto debatch_size. - put_on_device (
bool, opcional, valor predeterminadoFalse) — Indica si se deben colocar los lotes endevice(solo funciona si los lotes son listas anidadas, tuplas o diccionarios de tensores). - rng_types (lista de
stro RNGType) — La lista de generadores de números aleatorios que se deben sincronizar al inicio de cada iteración. Debe ser uno o varios de los siguientes:"torch": el generador de números aleatorios base de torch"cuda": el generador de números aleatorios de CUDA (solo GPU)- El tipo de dispositivo de cualquier acelerador de PyTorch registrado: su generador de números aleatorios de dispositivo.
"xla": el generador de números aleatorios de XLA (solo TPU)"generator": eltorch.Generatordel sampler (o del batch sampler si no hay sampler en su dataloader) o del dataset iterable (si existe) si el dataset subyacente es de ese tipo.
- dispatch_batches (
bool, opcional) — Si se establece enTrue, el dataloader preparado solo se itera en el proceso principal y luego los lotes se dividen y se difunden a cada proceso. El valor predeterminado seráTruecuando el conjunto de datos subyacente sea unIterableDataset, yFalseen caso contrario. - even_batches (
bool, opcional, valor predeterminadoTrue) — Si se establece enTrue, en los casos en que el tamaño total del lote en todos los procesos no divide exactamente al conjunto de datos, se duplicarán las muestras del inicio del conjunto de datos para que el lote pueda dividirse equitativamente entre todos los trabajadores. - 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, opcional, valor predeterminadoFalse) — Si se debe usarSeedableRandomSampleren lugar deRandomSamplerpara una mejor reproducibilidad. Esto conlleva un coste de posibles diferencias de rendimiento debido a los distintos algoritmos de barajado, pero garantiza que los resultados serán exactamente los mismos. Debe usarse junto conset_seed()en cadaself.set_epoch - data_seed (
int, opcional, valor predeterminadoNone) — La semilla que se utilizará para el generador subyacente al usaruse_seedable_sampler. Si esNone, el generador utilizará la semilla predeterminada actual de torch. - non_blocking (
bool, opcional, valor predeterminadoFalse) — Si se establece enTrue, el dataloader utilizará transferencias no bloqueantes de host a dispositivo. Si el dataloader tienepin_memoryestablecido enTrue, esto ayudará a aumentar la superposición entre la transferencia de datos y los cálculos. - use_stateful_dataloader (
bool, opcional, valor predeterminadoFalse) — “Si se establece en true, el dataloader preparado por el Accelerator estará respaldado por torchdata.StatefulDataLoader. Esto requiere que esté instalada la versión 0.8.0 o superior detorchdataque admita StatefulDataLoader.” - torch_device_mesh (
torch.distributed.DeviceMesh, opcional, valor predeterminadoNone) — Malla de dispositivos de PyTorch.
Devuelve
torch.utils.data.dataloader.DataLoader
Un nuevo cargador de datos que generará la porción de los lotes
Envuelve un DataLoader de PyTorch para generar lotes solo para uno de los procesos.
Dependiendo del valor del atributo drop_last del dataloader pasado, la iteración se detendrá en el primer lote que sea demasiado pequeño / no esté presente en todos los procesos, o bien se repetirá con los índices desde el principio.
Los
BatchSamplercon tamaños de lote variables no están habilitados de forma predeterminada. Para habilitar este comportamiento, establezcaeven_batchesigual aFalse
Crea un torch.utils.data.DataLoader que omitirá de manera eficiente los primeros num_batches. No debe usarse si el dataloader original es un StatefulDataLoader.
BatchSamplerShard
clase accelerate.data_loader.BatchSamplerShard
< source >( batch_sampler: BatchSamplernum_processes: int = 1process_index: int = 0split_batches: bool = Falseeven_batches: bool = True )
Parámetros
- batch_sampler (
torch.utils.data.sampler.BatchSampler) — El batch sampler para dividir en varios shards. - num_processes (
int, opcional, valor predeterminado 1) — El número de procesos que se ejecutan de forma concurrente. - process_index (
int, opcional, valor predeterminado 0) — El índice del proceso actual. - split_batches (
bool, opcional, por defectoFalse) — Si los fragmentos deben crearse dividiendo un lote para dar una parte de él a cada proceso, o generando lotes completos diferentes en cada proceso.En dos procesos con un muestreador de
[[0, 1, 2, 3], [4, 5, 6, 7]], esto resultará en:- el sampler en el proceso 0 para producir
[0, 1, 2, 3]y el sampler en el proceso 1 para producir[4, 5, 6, 7]si este argumento se establece enFalse. - el sampler en el proceso 0 para producir
[0, 1]y luego[4, 5]y el sampler en el proceso 1 para producir[2, 3]y luego[6, 7]si este argumento se establece enTrue.
- el sampler en el proceso 0 para producir
- even_batches (
bool, opcional, valor predeterminadoTrue) — Indica si se debe volver al principio del muestreador cuando el número de muestras no es un múltiplo exacto de (tamaño original del lote / número de procesos).
Envuelve un BatchSampler de PyTorch para generar lotes para uno de los procesos. Las instancias de esta clase siempre producirán un número de lotes que es un múltiplo exacto de num_processes y que todos tienen el mismo tamaño. Dependiendo del valor del atributo drop_last del lote de muestreo pasado, la iteración se detendrá en el primer lote que sea demasiado pequeño / no esté presente en todos los procesos o se repetirá con los índices desde el principio.
Los
BatchSamplercon tamaños de lote variables no están habilitados de forma predeterminada. Para habilitar este comportamiento, establezcaeven_batchesigual aFalse
IterableDatasetShard
clase accelerate.data_loader.IterableDatasetShard
< source >( dataset: IterableDatasetbatch_size: int = 1drop_last: bool = Falsenum_processes: int = 1process_index: int = 0split_batches: bool = False )
Parámetros
- dataset (
torch.utils.data.dataset.IterableDataset) — El batch sampler que se dividirá en varios fragmentos. - batch_size (
int, opcional, valor predeterminado 1) — El tamaño de los lotes por fragmento (sisplit_batches=False) o el tamaño de los lotes (sisplit_batches=True). - drop_last (
bool, opcional, valor predeterminadoFalse) — Indica si se debe descartar el último lote incompleto o completar los últimos lotes utilizando las muestras del principio. - num_processes (
int, opcional, valor predeterminado 1) — El número de procesos que se ejecutan de forma concurrente. - process_index (
int, opcional, valor predeterminado 0) — El índice del proceso actual. - split_batches (
bool, opcional, el valor predeterminado esFalse) — Si los fragmentos deben crearse dividiendo un lote para dar una parte de él a cada proceso, o bien generando lotes completos diferentes en cada proceso.En dos procesos con un conjunto de datos iterable que produce
[0, 1, 2, 3, 4, 5, 6, 7], esto resultará en:- el fragmento en el proceso 0 para producir
[0, 1, 2, 3]y el fragmento en el proceso 1 para producir[4, 5, 6, 7]si este argumento se establece enFalse. - el fragmento en el proceso 0 para producir
[0, 1, 4, 5]y el muestreador en el proceso 1 para producir[2, 3, 6, 7]si este argumento se establece enTrue.
- el fragmento en el proceso 0 para producir
Envuelve un IterableDataset de PyTorch para generar muestras solo para uno de los procesos. Las instancias de esta clase siempre producirán un número de muestras que es un múltiplo exacto del tamaño real del lote (según el valor de split_batches, esto será batch_size o batch_size x num_processes). Dependiendo del valor del atributo drop_last del muestreador de lotes pasado, la iteración se detendrá en el primer lote que sea demasiado pequeño o se repetirá con los índices desde el principio.
DataLoaderShard
clase 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 )
Parámetros
- dataset (
torch.utils.data.dataset.Dataset) — El conjunto de datos que se usará para construir este dataloader. - device (
torch.device, opcional) — Si se especifica, el dispositivo en el que se colocarán todos los lotes. - rng_types (lista de
stro RNGType) — La lista de generadores de números aleatorios que se deben sincronizar al inicio de cada iteración. Debe ser uno o varios de los siguientes:"torch": el generador de números aleatorios base de torch"cuda": el generador de números aleatorios de CUDA (solo GPU)- El tipo de dispositivo de cualquier acelerador de PyTorch registrado: su generador de números aleatorios de dispositivo.
"xla": el generador de números aleatorios de XLA (solo TPU)"generator": untorch.Generatoropcional
- synchronized_generator (
torch.Generator, opcional) — Un generador de números aleatorios para mantenerlo sincronizado entre procesos. - skip_batches (
int, opcional, valor predeterminado 0) — El número de lotes que se omiten al principio. - use_stateful_dataloader (
bool, opcional, valor predeterminadoFalse) — Si se debe adaptar esta clase para usarStatefulDataLoaderdetorchdataen lugar delDataLoaderregular. - **kwargs (argumentos de palabra clave adicionales, opcional) —
Todos los demás argumentos de palabra clave para pasar a la inicialización regular de
DataLoader.
Subclase de DataLoaderAdapter que se encargará de la colocación en el dispositivo y de la configuración distribuida actual.
Attributos disponibles:
total_batch_size (
int) — Tamaño total del lote del dataloader en todos los procesos. Igual al tamaño de lote original cuandosplit_batches=True; de lo contrario, el tamaño de lote original * el número total de procesostotal_dataset_length (
int) — Longitud total del conjunto de datos interno en todos los procesos.
DataLoaderDispatcher
clase 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 )
Parámetros
- split_batches (
bool, opcional, valor predeterminadoFalse) — Si elDataLoaderresultante debe dividir los lotes del cargador de datos original entre los dispositivos o devolver lotes completos (en cuyo caso devolverá lotes comenzando en el índiceprocess_indexy avanzandonum_processeslotes en cada iteración). Otra forma de verlo es que el tamaño de lote observado será el mismo que el deldataloaderinicial si esta opción se establece enTrue, y el tamaño de lote deldataloaderinicial multiplicado pornum_processesen caso contrario. Establecer esta opción enTruerequiere que el tamaño de lote deldataloadersea un múltiplo exacto debatch_size. - skip_batches (
int, opcional, valor predeterminado 0) — El número de lotes que se omiten al principio de una iteración. - use_stateful_dataloader (
bool, opcional, valor predeterminadoFalse) — Si se debe adaptar esta clase para usarStatefulDataLoaderdetorchdataen lugar delDataLoaderregular.
Subclase de DataLoaderAdapter que iterará y preprocesará solo en el proceso 0 y luego distribuirá en cada proceso su parte del lote.
Attributos disponibles:
total_batch_size (
int) — Tamaño total del lote del dataloader en todos los procesos. Igual al tamaño de lote original cuandosplit_batches=True; de lo contrario, el tamaño de lote original * el número total de procesostotal_dataset_length (
int) — Longitud total del conjunto de datos interno en todos los procesos.
AcceleratedOptimizer
clase accelerate.optimizer.AcceleratedOptimizer
< source >( optimizerdevice_placement = Truescaler = None )
Parámetros
- optimizer (
torch.optim.optimizer.Optimizer) — El optimizador que se va a envolver. - device_placement (
bool, opcional, valor predeterminadoTrue) — Indica si el optimizador debe gestionar la colocación de dispositivos. Si es así, colocará el diccionario de estado deoptimizeren el dispositivo correcto. - scaler (
torch.amp.GradScalerotorch.cuda.amp.GradScaler, opcional) — El escalador que se utilizará en la función de paso si el entrenamiento se realiza con precisión mixta.
Envoltorio interno de un optimizador de torch.
De forma condicional, se ejecutará step y zero_grad si las gradiente deben sincronizarse al realizar la acumulación de gradientes.
Establece el optimizador en modo “eval”. Útil para optimizadores como schedule_free
Establece el optimizador en modo “train”. Útil para optimizadores como schedule_free
AcceleratedScheduler
clase accelerate.scheduler.AcceleratedScheduler
< source >( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )
Parámetros
- scheduler (
torch.optim.lr_scheduler._LRScheduler) — El scheduler que se va a envolver. - optimizers (uno o una lista de
torch.optim.Optimizer) — Los optimizadores utilizados. - step_with_optimizer (
bool, opcional, valor predeterminadoTrue) — Indica si el programador debe actualizarse en cada paso del optimizador. - split_batches (
bool, opcional, valor predeterminadoFalse) — Indica si los dataloaders dividen un lote entre los diferentes procesos (de modo que el tamaño del lote sea el mismo independientemente del número de procesos) o si crean lotes en cada proceso (de modo que el tamaño del lote sea el tamaño original del lote multiplicado por el número de procesos).
Un envoltorio para un programador de tasa de aprendizaje que solo avanzará cuando los optimizadores realicen un paso de entrenamiento. Útil para evitar que el programador avance demasiado rápido cuando los gradientes se desbordaron y no hubo un paso de entrenamiento (en entrenamiento de precisión mixta).
Al realizar la acumulación de gradientes, las longitudes del programador de aprendizaje no deben modificarse en consecuencia; Accelerate siempre avanzará el programador para tenerlo en cuenta.