Accelerate documentation

DataLoader, Optimizer, Scheduler

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, Optimizer, Scheduler

Accelerate가 prepare()를 호출할 때 분산 학습을 위해 객체를 준비하는 데 사용하는 내부 클래스

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

매개변수

  • dataloader (torch.utils.data.dataloader.DataLoader) — 여러 디바이스에 나누어 사용할 데이터 로더.
  • device (torch.device) — 반환되는 DataLoader의 대상 디바이스.
  • num_processes (int, 선택 사항) — 동시에 실행되는 프로세스의 수입니다. 기본값은 PartialState가 제공하는 값입니다.
  • process_index (int, 선택 사항) — 현재 프로세스의 인덱스입니다. 기본값은 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).

    이것을 다른 관점에서 보면, 이 옵션이 True로 설정된 경우 관찰되는 배치 크기는 초기 dataloader의 배치 크기와 동일하며, 그렇지 않은 경우 초기 dataloader의 배치 크기에 num_processes를 곱한 값이 됩니다.

    이 옵션을 True(으)로 설정하려면 dataloader의 배치 크기가 batch_size의 정수 배여야 합니다.

  • put_on_device (bool, 선택 사항, 기본값 False) — 배치를 device에 올릴지 여부(배치가 텐서의 중첩된 리스트, 튜플 또는 사전인 경우에만 작동합니다).
  • rng_types (의 목록 str 또는 RNGType) — 각 반복의 시작 시점에 동기화할 난수 생성기 목록입니다. 다음 중 하나 또는 여러 개여야 합니다:
    • "torch": 기본 torch 난수 생성기
    • "cuda": CUDA 난수 생성기(GPU 전용)
    • "xla": XLA 난수 생성기(TPU 전용)
    • "generator": 기본 데이터셋이 해당 유형인 경우, 샘플러(또는 데이터로더에 샘플러가 없는 경우 배치 샘플러) 또는 반복 가능한 데이터셋(존재하는 경우)의 torch.Generator입니다.
  • dispatch_batches (bool, 선택 사항) — True로 설정하면, 준비된 dataloader는 메인 프로세스에서만 반복되고, 배치들은 각 프로세스로 분할 및 브로드캐스트됩니다. 기본 데이터셋이 IterableDataset인 경우 기본값은 True이고, 그렇지 않으면 False입니다.
  • even_batches (bool, 선택 사항, 기본값 True) — True로 설정하면, 모든 프로세스에 걸친 전체 배치 크기로 데이터셋을 정확히 나누지 못하는 경우, 배치의 균등한 분배를 위해 데이터셋의 앞부분 샘플이 중복됩니다.
  • 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, 선택 사항, 기본값 False) — 재현성을 높이기 위해 RandomSampler 대신 SeedableRandomSampler를 사용할지 여부입니다. 서로 다른 셔플링 알고리즘으로 인해 성능이 달라질 수 있는 비용이 따르지만, 결과가 완전히 동일하도록 보장합니다. 모든 self.set_epoch에서 set_seed()와 함께 사용해야 합니다.
  • data_seed (int, 선택 사항, 기본값 None) — use_seedable_sampler을 사용할 때 내부 생성기에 사용할 시드입니다. None인 경우, 생성기는 torch의 현재 기본 시드를 사용합니다.
  • non_blocking (bool, 선택 사항, 기본값 False) — True로 설정하면 dataloader가 non-blocking host-to-device 전송을 사용합니다. dataloader의 pin_memory가 True로 설정되어 있으면, 데이터 전송과 계산 사이의 오버랩을 늘리는 데 도움이 됩니다.
  • use_stateful_dataloader (bool, 선택 사항, 기본값 False) — “true로 설정하면, Accelerator가 준비한 dataloader는 torchdata.StatefulDataLoader에 의해 뒷받침됩니다. StatefulDataLoader를 지원하는 torchdata 버전 0.8.0 이상이 설치되어 있어야 합니다.”
  • torch_device_mesh (torch.distributed.DeviceMesh, 선택 사항, 기본값 None) — PyTorch device mesh입니다.

반환값

torch.utils.data.dataloader.DataLoader

배치의 일부를 반환하는 새로운 데이터 로더

PyTorch DataLoader를 래핑하여 프로세스 중 하나에만 배치 생성을 수행합니다.

dataloader에 전달된 drop_last 속성의 값에 따라, 너무 작거나 모든 프로세스에 존재하지 않는 첫 번째 배치에서 반복을 중단하거나, 처음부터 인덱스로 순환합니다.

BatchSampler의 다양한 배치 크기는 기본적으로 활성화되어 있지 않습니다. 이 동작을 활성화하려면 even_batches를 False로 설정하세요.

accelerate.skip_first_batches

< >

( dataloadernum_batches = 0 )

torch.utils.data.DataLoader를 생성하여 처음 num_batches개를 효율적으로 건너뜁니다. 원래 dataloader가 StatefulDataLoader인 경우 사용해서는 안 됩니다.

BatchSamplerShard

class accelerate.data_loader.BatchSamplerShard

< >

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

매개변수

  • batch_sampler (torch.utils.data.sampler.BatchSampler) — 여러 개의 샤드로 나누기 위한 배치 샘플러입니다.
  • num_processes (int, 선택 사항, 기본값 1) — 동시에 실행되는 프로세스의 수입니다.
  • process_index (int, 선택 사항, 기본값 0) — 현재 프로세스의 인덱스입니다.
  • split_batches (bool, 선택 사항, 기본값은 False) — 각 프로세스에 배치의 일부를 제공하도록 배치 분할을 통해 샤드를 생성할지, 아니면 각 프로세스에서 서로 다른 전체 배치를 반환할지 여부입니다.

    [[0, 1, 2, 3], [4, 5, 6, 7]] 샘플러를 사용하는 두 프로세스에서, 이는 다음과 같은 결과를 생성합니다:

    • 이 인수가 False로 설정된 경우, 프로세스 0의 샘플러는 [0, 1, 2, 3]을, 프로세스 1의 샘플러는 [4, 5, 6, 7]을 반환하도록 합니다.
    • 이 인수가 True로 설정된 경우, 프로세스 0의 샘플러가 [0, 1]을 반환한 다음 [4, 5]를 반환하고, 프로세스 1의 샘플러가 [2, 3]을 반환한 다음 [6, 7]을 반환합니다.
  • even_batches (bool, 선택 사항, 기본값 True) — 샘플 수가 (원래 배치 크기 / 프로세스 수)의 정수 배가 아닐 때, 샘플러의 처음부터 다시 반복할지 여부입니다.

PyTorch BatchSampler를 래핑하여 프로세스 중 하나에만 배치 생성을 수행합니다. 이 클래스의 인스턴스는 항상 num_processes의 정수 배인 수의 배치를 반환하며, 모든 배치의 크기는 동일합니다. 전달된 배치 샘플러의 drop_last 속성 값에 따라, 너무 작거나 모든 프로세스에 존재하지 않는 첫 번째 배치에서 반복을 중단하거나, 처음부터 인덱스를 다시 사용하여 반복합니다.

BatchSampler의 다양한 배치 크기는 기본적으로 활성화되어 있지 않습니다. 이 동작을 활성화하려면 even_batches를 False로 설정하세요.

IterableDatasetShard

class accelerate.data_loader.IterableDatasetShard

< >

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

매개변수

  • dataset (torch.utils.data.dataset.IterableDataset) — 여러 개의 샤드로 나누기 위한 배치 샘플러.
  • batch_size (int, 선택 사항, 기본값 1) — split_batches=False인 경우 샤드당 배치 크기 또는 split_batches=True인 경우 배치 크기입니다.
  • drop_last (bool, 선택 사항, 기본값 False) — 마지막 불완전한 배치(dropped)를 제거할지, 아니면 배치의 처음 샘플을 사용하여 마지막 배치를 완성할지 여부입니다.
  • num_processes (int, 선택 사항, 기본값 1) — 동시에 실행되는 프로세스의 수입니다.
  • process_index (int, 선택 사항, 기본값 0) — 현재 프로세스의 인덱스입니다.
  • split_batches (bool, 선택 사항, 기본값은 False) — 각 프로세스에 배치의 일부를 제공하도록 배치 분할을 통해 샤드를 생성할지, 아니면 각 프로세스에서 서로 다른 전체 배치를 반환할지 여부입니다.

    [0, 1, 2, 3, 4, 5, 6, 7]를 반환하는 반복 가능한 데이터셋을 두 프로세스에서 사용할 경우, 결과는 다음과 같습니다:

    • 이 인수가 False로 설정된 경우, 프로세스 0의 샤드는 [0, 1, 2, 3]을, 프로세스 1의 샤드는 [4, 5, 6, 7]을 반환합니다.
    • 이 인수가 True로 설정된 경우, 프로세스 0의 샤드는 [0, 1, 4, 5]를, 프로세스 1의 샘플러는 [2, 3, 6, 7]를 반환합니다.

PyTorch IterableDataset를 래핑하여 프로세스 중 하나에만 샘플을 생성합니다. 이 클래스의 인스턴스는 항상 실제 배치 크기의 정수 배에 해당하는 수의 샘플을 반환합니다(split_batches의 값에 따라 batch_size 또는 batch_size x num_processes가 됩니다). 전달된 배치 샘플러의 drop_last 속성 값에 따라, 너무 작아지는 첫 번째 배치에서 반복을 중단하거나 처음부터 인덱스를 다시 사용하여 반복합니다.

DataLoaderShard

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

매개변수

  • dataset (torch.utils.data.dataset.Dataset) — 이 dataloader를 구축하는 데 사용할 dataset입니다.
  • device (torch.device, 선택 사항) — 값이 전달되면, 모든 배치에 사용할 디바이스입니다.
  • rng_types (의 목록 str 또는 RNGType) — 각 반복의 시작 시점에 동기화할 난수 생성기 목록입니다. 다음 중 하나 또는 여러 개여야 합니다:
    • "torch": 기본 torch 난수 생성기
    • "cuda": CUDA 난수 생성기(GPU 전용)
    • "xla": XLA 난수 생성기(TPU 전용)
    • "generator": 선택 사항인 torch.Generator
  • synchronized_generator (torch.Generator, 선택 사항) — 프로세스 간에 동기화를 유지하기 위한 난수 생성기입니다.
  • skip_batches (int, 선택 사항, 기본값 0) — 시작 시 건너뛸 배치의 수입니다.
  • use_stateful_dataloader (bool, 선택 사항, 기본값 False) — 이 클래스가 일반적인 DataLoader 대신 torchdata의 StatefulDataLoader를 적용할지 여부입니다.
  • **kwargs (추가 키워드 인자, 선택 사항) — 일반적인 DataLoader 초기화에 전달할 나머지 모든 키워드 인자입니다.

DataLoaderAdapter의 하위 클래스로, 디바이스 배치와 현재 분산 설정을 처리합니다.

사용 가능한 속성:

  • total_batch_size (int) — 모든 프로세스에 걸친 dataloader의 총 배치 크기. split_batches=True인 경우 원래 배치 크기와 같고, 그렇지 않으면 원래 배치 크기 * 전체 프로세스 수

  • total_dataset_length (int) — 모든 프로세스에 걸쳐 내부 데이터셋의 총 길이.

DataLoaderDispatcher

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

매개변수

  • split_batches (bool, 선택 사항, 기본값 False) — 결과 DataLoader가 원래 데이터 로더의 배치들을 여러 디바이스에 걸쳐 나누어 처리할지, 아니면 전체 배치를 반환할지(이 경우 process_index번째 배치부터 시작하여 각 반복마다 num_processes개의 배치를 건너뛰며 진행)를 결정합니다. 이 옵션을 True로 설정하면 관찰되는 배치 크기는 초기 dataloader와 동일해지고, 그렇지 않으면 초기 dataloader의 배치 크기에 num_processes를 곱한 값이 됩니다. 이 옵션을 True로 설정하려면 dataloader의 배치 크기가 batch_size의 정수 배여야 합니다.
  • skip_batches (int, 선택 사항, 기본값 0) — 반복의 시작 부분에서 건너뛸 배치의 수입니다.
  • use_stateful_dataloader (bool, 선택 사항, 기본값 False) — 이 클래스가 일반적인 DataLoader 대신 torchdata의 StatefulDataLoader를 적용할지 여부입니다.

DataLoaderAdapter의 하위 클래스로, 프로세스 0에서만 반복 및 전처리를 수행한 후 각 프로세스에 배치의 해당 부분을 분배합니다.

사용 가능한 속성:

  • total_batch_size (int) — 모든 프로세스에 걸친 dataloader의 총 배치 크기. split_batches=True인 경우 원래 배치 크기와 같고, 그렇지 않으면 원래 배치 크기 * 전체 프로세스 수

  • total_dataset_length (int) — 모든 프로세스에 걸쳐 내부 데이터셋의 총 길이.

AcceleratedOptimizer

클래스 accelerate.optimizer.AcceleratedOptimizer

< >

( optimizerdevice_placement = Truescaler = None )

매개변수

  • optimizer (torch.optim.optimizer.Optimizer) — 래핑할 옵티마이저입니다.
  • device_placement (bool, 선택 사항, 기본값 True) — 옵티마이저가 디바이스 배치를 처리할지 여부입니다. 처리하도록 설정하면 optimizer의 상태 딕셔너리를 올바른 디바이스에 배치합니다.
  • scaler (torch.amp.GradScaler 또는 torch.cuda.amp.GradScaler, 선택 사항) — 혼합 정밀도로 학습하는 경우 step 함수에서 사용할 스케일러입니다.

torch 옵티마이저를 감싸는 내부 래퍼입니다.

그라디언트 축적을 수행할 때 그라디언트를 동기화해야 하는 경우에만 step 및 zero_grad를 실행합니다.

평가

< >

( )

옵티마이저를 “eval” 모드로 설정합니다. schedule_free와 같은 옵티마이저에 유용합니다.

train

< >

( )

옵티마이저를 “train” 모드로 설정합니다. schedule_free와 같은 옵티마이저에 유용합니다.

AcceleratedScheduler

클래스 accelerate.scheduler.AcceleratedScheduler

< >

( scheduleroptimizersstep_with_optimizer: bool = Truesplit_batches: bool = False )

매개변수

  • scheduler (torch.optim.lr_scheduler._LRScheduler) — 래핑할 스케줄러.
  • optimizers (하나 또는 torch.optim.Optimizer 목록) — 사용되는 옵티마이저입니다.
  • step_with_optimizer (bool, 선택 사항, 기본값 True) — 각 옵티마이저 스텝에서 스케줄러를 스텝할지 여부입니다.
  • split_batches (bool, 선택 사항, 기본값 False) — 데이터로더가 여러 프로세스에 걸쳐 하나의 배치로 나누는지(프로세스 수와 관계없이 배치 크기가 동일해짐) 또는 각 프로세스에서 배치를 생성하는지(배치 크기가 원래 배치 크기에 프로세스 수를 곱한 값이 됨)를 결정합니다.

optimizer가 학습 스텝을 수행할 때만 스텝을 진행하도록 하는 학습률 스케줄러를 감싸는 래퍼입니다. 혼합 정밀도 학습에서 그라디언트 오버플로가 발생하여 학습 스텝이 수행되지 않은 경우, 스케줄러가 너무 빠르게 스텝을 진행하는 것을 방지하는 데 유용합니다.

gradient accumulation을 수행할 때 스케줄러의 길이를 그에 맞게 변경하지 않아야 하며, Accelerate는 이를 반영하여 항상 스케줄러를 스텝합니다.

Update on GitHub