Accelerate documentation

DataLoaders, Otimizadores e Agendadores

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

DataLoaders, Otimizadores e Agendadores

As classes internas que o Accelerate usa para preparar objetos para treinamento distribuído ao chamar prepare().

Utilitários do DataLoader

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

Parâmetros

  • dataloader (torch.utils.data.dataloader.DataLoader) — O carregador de dados a ser dividido entre vários dispositivos.
  • device (torch.device) — O dispositivo de destino para o DataLoader retornado.
  • num_processes (int, opcional) — O número de processos executados simultaneamente. O valor padrão é o fornecido por PartialState.
  • process_index (int, opcional) — O índice do processo atual. O valor padrão é o fornecido por PartialState.
  • split_batches (bool, optional, defaults to False) — Whether the resulting DataLoader should split the batches of the original data loader across devices or yield full batches (in which case it will yield batches starting at the process_index-th and advancing of num_processes batches at each iteration).

    Outra forma de ver isso é que o tamanho do lote observado será o mesmo do dataloader inicial se essa opção for definida como True, ou o tamanho do lote do dataloader inicial multiplicado por num_processes caso contrário.

    Definir essa opção como True exige que o tamanho do lote do dataloader seja um múltiplo exato de batch_size.

  • put_on_device (bool, opcional, padrão False) — Se os lotes devem ser colocados no device (funciona apenas se os lotes forem listas aninhadas, tuplas ou dicionários de tensores).
  • rng_types (lista de str ou RNGType) — A lista de geradores de números aleatórios a serem sincronizados no início de cada iteração. Deve ser um ou vários dos seguintes:
    • "torch": o gerador de números aleatórios base do torch
    • "cuda": o gerador de números aleatórios CUDA (somente GPU)
    • "xla": o gerador de números aleatórios do XLA (somente TPU)
    • "generator": o torch.Generator do sampler (ou do batch sampler, se não houver sampler no seu dataloader) ou do dataset iterável (se existir), caso o dataset subjacente seja desse tipo.
  • dispatch_batches (bool, opcional) — Se definido como True, o dataloader preparado é iterado apenas no processo principal e, em seguida, os lotes são divididos e transmitidos para cada processo. O valor padrão será True quando o conjunto de dados subjacente for um IterableDataset, caso contrário, False.
  • even_batches (bool, opcional, padrão True) — Se definido como True, em casos em que o tamanho total do lote em todos os processos não divide exatamente o conjunto de dados, as amostras no início do conjunto de dados serão duplicadas para que o lote possa ser dividido igualmente entre todos os workers.
  • 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, opcional, padrão False) — Se deve usar o SeedableRandomSampler em vez de um RandomSampler para melhor reprodutibilidade. Isso pode resultar em desempenhos diferentes devido a algoritmos de embaralhamento diferentes, mas garante que os resultados serão exatamente os mesmos. Deve ser usado em conjunto com set_seed() a cada self.set_epoch
  • data_seed (int, opcional, padrão None) — A semente a ser usada para o gerador subjacente ao usar use_seedable_sampler. Se None, o gerador usará a semente padrão atual do torch.
  • non_blocking (bool, opcional, padrão False) — Se definido como True, o dataloader utilizará transferências não bloqueantes de host para dispositivo. Se o dataloader tiver pin_memory definido como True, isso ajudará a aumentar a sobreposição entre a transferência de dados e os cálculos.
  • use_stateful_dataloader (bool, opcional, padrão False) — “Se definido como true, o dataloader preparado pelo Accelerator será baseado em ” “torchdata.StatefulDataLoader. Isso requer a instalação da versão 0.8.0 ou superior do torchdata que suporte StatefulDataLoader.”
  • torch_device_mesh (torch.distributed.DeviceMesh, opcional, padrão None) — Malha de dispositivos do PyTorch.

Retorna

torch.utils.data.dataloader.DataLoader

Um novo carregador de dados que retornará a porção dos lotes

Envolve um DataLoader do PyTorch para gerar lotes apenas para um dos processos.

Dependendo do valor do atributo drop_last do dataloader passado, a iteração será interrompida no primeiro lote que seria pequeno demais / não estivesse presente em todos os processos, ou será reiniciada com os índices do início.

BatchSamplers com tamanhos de lote variáveis não são habilitados por padrão. Para habilitar esse comportamento, defina even_batches como False

accelerate.skip_first_batches

< >

( dataloadernum_batches = 0 )

Cria um torch.utils.data.DataLoader que ignorará eficientemente as primeiras num_batches. Não deve ser usado se o dataloader original for um StatefulDataLoader.

BatchSamplerShard

classe accelerate.data_loader.BatchSamplerShard

< >

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

Parâmetros

  • batch_sampler (torch.utils.data.sampler.BatchSampler) — O batch sampler para dividir em vários shards.
  • num_processes (int, opcional, padrão 1) — O número de processos executados simultaneamente.
  • process_index (int, opcional, padrão 0) — O índice do processo atual.
  • split_batches (bool, opcional, padrão é False) — Se os shards devem ser criados dividindo um lote para dar uma parte dele a cada processo, ou ao render diferentes lotes completos em cada processo.

    Em dois processos com um sampler de [[0, 1, 2, 3], [4, 5, 6, 7]], isso resultará em:

    • o sampler no processo 0 a produzir [0, 1, 2, 3] e o sampler no processo 1 a produzir [4, 5, 6, 7] se este argumento for definido como False.
    • o sampler no processo 0 para produzir [0, 1] e depois [4, 5] e o sampler no processo 1 para produzir [2, 3] e depois [6, 7] se este argumento for definido como True.
  • even_batches (bool, opcional, padrão True) — Se deve ou não retornar ao início do sampler quando o número de amostras não for um múltiplo exato de (tamanho original do lote / número de processos).

Envolve um BatchSampler do PyTorch para gerar lotes para apenas um dos processos. As instâncias desta classe sempre retornarão um número de lotes que é um múltiplo exato de num_processes e que todos têm o mesmo tamanho. Dependendo do valor do atributo drop_last do lote sampler passado, a iteração será interrompida no primeiro lote que seria pequeno demais / não existiria em todos os processos, ou será repetida com os índices a partir do início.

BatchSamplers com tamanhos de lote variáveis não são habilitados por padrão. Para habilitar esse comportamento, defina even_batches como False

IterableDatasetShard

classe accelerate.data_loader.IterableDatasetShard

< >

( 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) — O batch sampler a ser dividido em vários shards.
  • batch_size (int, opcional, padrão 1) — O tamanho dos lotes por shard (se split_batches=False) ou o tamanho dos lotes (se split_batches=True).
  • drop_last (bool, opcional, padrão False) — Se deve descartar o último lote incompleto ou completar os últimos lotes usando as amostras do início.
  • num_processes (int, opcional, padrão 1) — O número de processos executados simultaneamente.
  • process_index (int, opcional, padrão 0) — O índice do processo atual.
  • split_batches (bool, opcional, padrão é False) — Se os shards devem ser criados dividindo um lote para dar uma parte dele a cada processo, ou ao render diferentes lotes completos em cada processo.

    Em dois processos com um conjunto de dados iterável que gera [0, 1, 2, 3, 4, 5, 6, 7], isso resultará em:

    • o shard no processo 0 para produzir [0, 1, 2, 3] e o shard no processo 1 para produzir [4, 5, 6, 7] se este argumento for definido como False.
    • o shard no processo 0 para produzir [0, 1, 4, 5] e o sampler no processo 1 para produzir [2, 3, 6, 7] se este argumento for definido como True.

Envolve um IterableDataset do PyTorch para gerar amostras para apenas um dos processos. As instâncias desta classe sempre retornarão um número de amostras que é um múltiplo exato do tamanho real do lote (dependendo do valor de split_batches, isso será batch_size ou batch_size x num_processes). Dependendo do valor do atributo drop_last do batch sampler passado, a iteração será interrompida no primeiro lote que seria pequeno demais ou repetirá com os índices a partir do início.

DataLoaderShard

classe 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 )

Parâmetros

  • dataset (torch.utils.data.dataset.Dataset) — O dataset a ser usado para construir este dataloader.
  • device (torch.device, opcional) — Se fornecido, o dispositivo em que todos os lotes serão colocados.
  • rng_types (lista de str ou RNGType) — A lista de geradores de números aleatórios a serem sincronizados no início de cada iteração. Deve ser um ou vários dos seguintes:
    • "torch": o gerador de números aleatórios base do torch
    • "cuda": o gerador de números aleatórios CUDA (somente GPU)
    • "xla": o gerador de números aleatórios do XLA (somente TPU)
    • "generator": um torch.Generator opcional
  • synchronized_generator (torch.Generator, opcional) — Um gerador de números aleatórios para manter sincronizado entre processos.
  • skip_batches (int, opcional, padrão 0) — O número de lotes a serem ignorados no início.
  • use_stateful_dataloader (bool, opcional, padrão False) — Se esta classe deve adaptar o StatefulDataLoader do torchdata em vez do DataLoader regular.
  • **kwargs (argumentos de palavra-chave adicionais, opcional) — Todos os outros argumentos de palavra-chave para passar à inicialização regular do DataLoader.

Subclasse de DataLoaderAdapter que lidará com a colocação de dispositivos e a configuração distribuída atual.

Atributos disponíveis:

  • total_batch_size (int) — Tamanho total do lote do dataloader em todos os processos. Igual ao tamanho original do lote quando split_batches=True; caso contrário, o tamanho original do lote * o número total de processos

  • total_dataset_length (int) — Comprimento total do dataset interno em todos os processos.

DataLoaderDispatcher

classe 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 )

Parâmetros

  • split_batches (bool, opcional, padrão False) — Se o DataLoader resultante deve dividir os lotes do carregador de dados original entre os dispositivos ou entregar lotes completos (nesse caso, ele entregará lotes começando no índice process_index e avançando num_processes lotes a cada iteração). Outra forma de ver isso é que o tamanho do lote observado será o mesmo do dataloader inicial se esta opção for definida como True; caso contrário, será o tamanho do lote do dataloader inicial multiplicado por num_processes. Definir esta opção como True exige que o tamanho do lote do dataloader seja um múltiplo exato de batch_size.
  • skip_batches (int, opcional, padrão 0) — O número de lotes a serem ignorados no início de uma iteração.
  • use_stateful_dataloader (bool, opcional, padrão False) — Se esta classe deve adaptar o StatefulDataLoader do torchdata em vez do DataLoader regular.

Subclasse de DataLoaderAdapter que itera e pré-processa apenas no processo 0 e, em seguida, distribui em cada processo sua parte do lote.

Atributos disponíveis:

  • total_batch_size (int) — Tamanho total do lote do dataloader em todos os processos. Igual ao tamanho original do lote quando split_batches=True; caso contrário, o tamanho original do lote * o número total de processos

  • total_dataset_length (int) — Comprimento total do dataset interno em todos os processos.

AcceleratedOptimizer

classe accelerate.optimizer.AcceleratedOptimizer

< >

( optimizerdevice_placement = Truescaler = None )

Parâmetros

  • optimizer (torch.optim.optimizer.Optimizer) — O otimizador a ser encapsulado.
  • device_placement (bool, opcional, padrão True) — Se o otimizador deve ou não gerenciar o posicionamento de dispositivos. Se sim, ele colocará o dicionário de estado de optimizer no dispositivo correto.
  • scaler (torch.amp.GradScaler ou torch.cuda.amp.GradScaler, opcional) — O scaler a ser usado na função de passo durante o treinamento com precisão mista.

Wrapper interno em torno de um otimizador do torch.

Condicionalmente, executará step e zero_grad se os gradientes devem ser sincronizados ao realizar a acumulação de gradientes.

eval

< >

( )

Define o otimizador no modo “eval”. Útil para otimizadores como schedule_free

treino

< >

( )

Define o otimizador no modo “train”. Útil para otimizadores como schedule_free

AcceleratedScheduler

classe accelerate.scheduler.AcceleratedScheduler

< >

( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )

Parâmetros

  • scheduler (torch.optim.lr_scheduler._LRScheduler) — O scheduler a ser encapsulado.
  • optimizers (um ou uma lista de torch.optim.Optimizer) — Os otimizadores usados.
  • step_with_optimizer (bool, opcional, padrão True) — Se o agendador deve ou não ser avançado a cada passo do otimizador.
  • split_batches (bool, opcional, padrão False) — Se os dataloaders dividem um lote entre os diferentes processos (de modo que o tamanho do lote é o mesmo, independentemente do número de processos) ou criam lotes em cada processo (de modo que o tamanho do lote é o tamanho original do lote multiplicado pelo número de processos).

Um wrapper em torno de um agendador de taxa de aprendizado que só avança quando o(s) otimizador(es) dão um passo de treinamento. Útil para evitar que o agendador avance rápido demais quando os gradientes estouraram e não houve um passo de treinamento (no treinamento em precisão mista)

Ao executar o agendamento de acúmulo de gradientes, os comprimentos não devem ser alterados de acordo, pois o Accelerate sempre executará o passo do agendador para levar isso em conta.

Update on GitHub