Accelerate documentation

DataLoader、オプティマイザー、スケジューラー

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、オプティマイザー、スケジューラー

The internal classes Accelerate uses to prepare objects for distributed training when calling 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) — 各イテレーションの開始時に同期する乱数生成器のリストです。以下の1つ以上を指定します:
    • "torch": 基本的な torch ランダム数生成器
    • "cuda": CUDA乱数生成器(GPUのみ)
    • "xla": XLA乱数生成器(TPUのみ)
    • "generator": 基盤となるデータセットがそのタイプの場合、サンプラー(dataloader にサンプラーがない場合はバッチサンプラー)またはイテラブルデータセット(存在する場合)の 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は非ブロッキングなホストからデバイスへの転送を利用します。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のデバイスメッシュです。

戻り値

torch.utils.data.dataloader.DataLoader

バッチの一部を生成する新しいデータローダー

PyTorchのDataLoaderをラップし、プロセスの1つにのみバッチを生成します。

渡された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]] のサンプラーを持つ2つのプロセスで、これにより次のようになります:

    • この引数がFalseに設定されている場合、プロセス0のsamplerは[0, 1, 2, 3]を、プロセス1のsamplerは[4, 5, 6, 7]を返します。
    • この引数がTrueに設定されている場合、プロセス0のsamplerは[0, 1]を返し、次に[4, 5]を返し、プロセス1のsamplerは[2, 3]を返し、次に[6, 7]を返します。
  • even_batches (bool、省略可、デフォルトはTrue) — サンプル数が(元のバッチサイズ / プロセス数)の整数倍でない場合、サンプラーの先頭に戻ってループするかどうかを指定します。

PyTorchのBatchSamplerをラップし、プロセスの1つにのみバッチを生成します。このクラスのインスタンスは、常に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) — 最後の不完全なバッチを破棄するか、先頭のサンプルを使用して最後のバッチを補完するかどうかを指定します。
  • num_processes (int, 任意, デフォルトは 1) — 並行して実行されるプロセスの数。
  • process_index (int、省略可能、デフォルトは 0) — 現在のプロセスのインデックスです。
  • split_batches (bool, 省略可, デフォルトは False) — バッチを分割して各プロセスにその一部を割り当てることでシャードを作成するか、各プロセスで異なる完全なバッチを生成するかを指定します。

    [0, 1, 2, 3, 4, 5, 6, 7] を生成するイテラブルなデータセットを2つのプロセスで処理した場合、次のようになります。

    • この引数がFalseに設定されている場合、プロセス0のシャードは[0, 1, 2, 3]を、プロセス1のシャードは[4, 5, 6, 7]を返します。
    • この引数がTrueに設定されている場合、プロセス0のシャードは[0, 1, 4, 5]を、プロセス1のサンプラーは[2, 3, 6, 7]を生成します。

PyTorchのIterableDatasetをラップし、プロセスの1つに対してのみサンプルを生成します。このクラスのインスタンスは、常に実際のバッチサイズの整数倍のサンプル数を生成します(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を構築するために使用するデータセット。
  • device (torch.device, 省略可) — 指定した場合、すべてのバッチを配置するデバイス。
  • rng_types (のリスト str または RNGType) — 各イテレーションの開始時に同期する乱数生成器のリストです。次の1つ以上を指定します:
    • "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

クラス 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

< >

( )

オプティマイザーを“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 1 つまたはリスト)— 使用するオプティマイザーです。
  • step_with_optimizer (bool、省略可、デフォルトはTrue) — スケジューラを各オプティマイザーステップでステップさせるかどうか。
  • split_batches (bool、省略可、デフォルトはFalse) — データローダーがバッチを異なるプロセス間で分割するかどうか(プロセス数に関係なくバッチサイズが同じになる)または、各プロセスでバッチを作成するかどうか(バッチサイズは元のバッチサイズにプロセス数を掛けたものになる)。

学習率スケジューラをラップし、オプティマイザーがトレーニングステップを実行した場合にのみステップを実行するラッパーです。勾配がオーバーフローしてトレーニングステップが実行されなかった場合(混合精度学習時)に、スケジューラが早すぎるペースでステップを進めてしまうのを防ぐのに役立ちます。

勾配蓄積を実行する際、スケジューラの長さをそれに応じて変更する必要はありません。Accelerate は常にスケジューラをステップ実行して、これを考慮します。

Update on GitHub