Accelerate documentation
DataLoader、オプティマイザー、スケジューラー
DataLoader、オプティマイザー、スケジューラー
The internal classes Accelerate uses to prepare objects for distributed training when calling 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) — 各イテレーションの開始時に同期する乱数生成器のリストです。以下の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 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は非ブロッキングなホストからデバイスへの転送を利用します。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に設定してください。
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]]のサンプラーを持つ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
< 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) — 最後の不完全なバッチを破棄するか、先頭のサンプルを使用して最後のバッチを補完するかどうかを指定します。 - 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
< 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を構築するために使用するデータセット。 - 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
< 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.Optimizer1 つまたはリスト)— 使用するオプティマイザーです。 - step_with_optimizer (
bool、省略可、デフォルトはTrue) — スケジューラを各オプティマイザーステップでステップさせるかどうか。 - split_batches (
bool、省略可、デフォルトはFalse) — データローダーがバッチを異なるプロセス間で分割するかどうか(プロセス数に関係なくバッチサイズが同じになる)または、各プロセスでバッチを作成するかどうか(バッチサイズは元のバッチサイズにプロセス数を掛けたものになる)。
学習率スケジューラをラップし、オプティマイザーがトレーニングステップを実行した場合にのみステップを実行するラッパーです。勾配がオーバーフローしてトレーニングステップが実行されなかった場合(混合精度学習時)に、スケジューラが早すぎるペースでステップを進めてしまうのを防ぐのに役立ちます。
勾配蓄積を実行する際、スケジューラの長さをそれに応じて変更する必要はありません。Accelerate は常にスケジューラをステップ実行して、これを考慮します。