Accelerate documentation
DataLoader, Optimizer, Scheduler
DataLoader, Optimizer, Scheduler
Accelerate가 prepare()를 호출할 때 분산 학습을 위해 객체를 준비하는 데 사용하는 내부 클래스
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
매개변수
- dataloader (
torch.utils.data.dataloader.DataLoader) — 여러 디바이스에 나누어 사용할 데이터 로더. - device (
torch.device) — 반환되는DataLoader의 대상 디바이스. - num_processes (
int, 선택 사항) — 동시에 실행되는 프로세스의 수입니다. 기본값은 PartialState가 제공하는 값입니다. - process_index (
int, 선택 사항) — 현재 프로세스의 인덱스입니다. 기본값은 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).이것을 다른 관점에서 보면, 이 옵션이
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 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, 선택 사항, 기본값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로 설정하세요.
torch.utils.data.DataLoader를 생성하여 처음 num_batches개를 효율적으로 건너뜁니다. 원래 dataloader가 StatefulDataLoader인 경우 사용해서는 안 됩니다.
BatchSamplerShard
class accelerate.data_loader.BatchSamplerShard
< source >( 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
< source >( 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
< 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 )
매개변수
- 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
< 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 )
매개변수
- 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
< source >( optimizerdevice_placement = Truescaler = None )
torch 옵티마이저를 감싸는 내부 래퍼입니다.
그라디언트 축적을 수행할 때 그라디언트를 동기화해야 하는 경우에만 step 및 zero_grad를 실행합니다.
옵티마이저를 “eval” 모드로 설정합니다. schedule_free와 같은 옵티마이저에 유용합니다.
옵티마이저를 “train” 모드로 설정합니다. schedule_free와 같은 옵티마이저에 유용합니다.
AcceleratedScheduler
클래스 accelerate.scheduler.AcceleratedScheduler
< source >( 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는 이를 반영하여 항상 스케줄러를 스텝합니다.