Buckets:
並列性
並列化戦略は、計算を複数のデバイスに分散させることで、拡散型トランスフォーマーの推論/学習時間を短縮し、高速化を助けます。詳細については、Distributed inferenceガイドを参照してください。
ParallelConfig[[diffusers.ParallelConfig]]
diffusers.ParallelConfig[[diffusers.ParallelConfig]]
diffusers.ParallelConfig(context_parallel_config: diffusers.models._modeling_parallel.ContextParallelConfig | None = None, tensor_parallel_config: diffusers.models._modeling_parallel.TensorParallelConfig | None = None, _rank: int = None, _world_size: int = None, _device: device = None, _mesh: DeviceMesh = None)
パラメータ:
context_parallel_config (ContextParallelConfig, 任意) : コンテキスト並列化の設定。
tensor_parallel_config (TensorParallelConfig, 任意) : テンソル並列の構成。
異なる並列化を適用するための設定。
ContextParallelConfig[[diffusers.ContextParallelConfig]]
diffusers.ContextParallelConfig[[diffusers.ContextParallelConfig]]
diffusers.ContextParallelConfig(ring_degree: int | None = None, ulysses_degree: int | None = None, convert_to_fp32: bool = True, rotate_method: typing.Literal['allgather', 'alltoall'] = 'allgather', mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = None, ulysses_anything: bool = False, ring_anything: bool = False, _rank: int = None, _world_size: int = None, _device: device = None, _mesh: DeviceMesh = None, _flattened_mesh: DeviceMesh = None, _ring_mesh: DeviceMesh = None, _ulysses_mesh: DeviceMesh = None, _ring_local_rank: int = None, _ulysses_local_rank: int = None)
パラメータ:
ring_degree (int, 任意, デフォルトは 1) : Ring Attention に使用するデバイスの数。シーケンスはデバイス間で分割されます。各デバイスは、リングを順に回されて渡されるローカルな Q と KV チャンク間のアテンションを計算します。メモリ使用量が低く(一度に KV の 1/N しか保持しない)、計算と通信をオーバーラップできますが、すべてのトークンを見るには N 回の反復が必要です。メモリや帯域幅が限られている長いシーケンスに最適です。コンテキスト並列領域内のリングアテンションに使用するデバイスの数。コンテキスト並列メッシュのデバイス総数の約数である必要があります。
ulysses_degree (int、任意、デフォルトは1) : Ulysses Attention に使用するデバイスの数。シーケンスはデバイス間で分割されます。各デバイスがローカル QKV を計算し、その後、すべての KV チャンクを all-gather して、1 パスで完全なアテンションを計算します。メモリ使用量が高くなります(すべての KV を保持するため)、高帯域幅の all-to-all 通信が必要ですが、レイテンシは低くなります。インターコネクト帯域幅が十分な中程度の長さのシーケンスに最適です。
convert_to_fp32 (bool、任意、デフォルトは True) : リングアテンションの数値的安定性を確保するために、出力と LSE を float32 に変換するかどうかを指定します。
rotate_method (str、任意、デフォルトは "allgather") : リングアテンションにおいて、デバイス間でキー/バリュー状態をローテーションするために使用するメソッド。現在サポートされているのは "allgather" のみです。
ulysses_anything (bool、任意、デフォルトは False) : ulysses_degree で均等割り切れない任意のシーケンス長とヘッド数に対応する「Ulysses Anything」モードを有効にするかどうか。有効にした場合、ulysses_degree は 1 より大きく、ring_degree は 1 でなければなりません。
ring_anything (bool、任意、デフォルトはFalse) : 任意のシーケンス長をサポートする "Ring Anything" モードを有効にするかどうか。有効にした場合、ring_degree は 1 より大きく、ulysses_degree は 1 でなければなりません。
mesh (torch.distributed.device_mesh.DeviceMesh, 任意) : コンテキスト並列性で使用するカスタムのデバイスメッシュです。指定された場合、新しいメッシュを作成する代わりに、このメッシュが使用されます。これは、同じデバイスメッシュを共有する他の並列化戦略(FSDP やテンソル並列など)とコンテキスト並列性を組み合わせる場合に有用です。メッシュには "ring" と "ulysses" の両方の次元が必要です。使用しない次元にはサイズ 1 を指定します(例: FSDP と組み合わせたリングアテンションのみの場合、mesh_shape=(2, 1, 4) と mesh_dim_names=("ring", "ulysses", "fsdp") を使用)。
コンテキスト並列性用の設定。
diffusers.hooks.apply_context_parallel[[diffusers.hooks.apply_context_parallel]]
diffusers.hooks.apply_context_parallel(module: Module, parallel_config: ContextParallelConfig, plan: dict[str, dict[str, dict[str | int, diffusers.models._modeling_parallel.ContextParallelInput | list[diffusers.models._modeling_parallel.ContextParallelInput] | tuple[diffusers.models._modeling_parallel.ContextParallelInput, ...]] | diffusers.models._modeling_parallel.ContextParallelOutput | list[diffusers.models._modeling_parallel.ContextParallelOutput] | tuple[diffusers.models._modeling_parallel.ContextParallelOutput, ...]]])
モデルにコンテキスト並列を適用します。
TensorParallelConfig[[diffusers.TensorParallelConfig]]
diffusers.TensorParallelConfig[[diffusers.TensorParallelConfig]]
diffusers.TensorParallelConfig(tp_degree: int = 1, mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = None, _rank: int = None, _world_size: int = None, _device: device = None, _mesh: DeviceMesh = None, _tp_degree: int = None)
パラメータ:
tp_degree (int、デフォルトは1) : シャードに分割するデバイスの数。並列化対象モデルのアテンションヘッド数(およびFFNの隠れ層次元数)の約数である必要があります。
mesh (torch.distributed.device_mesh.DeviceMesh, 任意) : 使用するカスタムのデバイスメッシュです。指定された場合、tp_degree は mesh.size() から推論され、この引数は無視されます。同じメッシュを共有する他の並列化戦略(例: CP)と TP を組み合わせる場合に有用です。
テンソル並列化の設定。
Tensor parallelism は、重み行列をデバイス間で分割(カラム方向および行方向)します。各デバイスは部分結果を計算し、レイヤー境界での AllReduce/AllGather によって完全な出力が再構築されます。torch.distributed.tensor.parallelize_module を ColwiseParallel / RowwiseParallel のシャーディングスタイルと組み合わせて使用します。サポートされているデバイスタイプは "cuda"、"neuron" および "tpu" です。
diffusers.hooks.apply_tensor_parallel[[diffusers.hooks.apply_tensor_parallel]]
diffusers.hooks.apply_tensor_parallel(model: Module, config: TensorParallelConfig, tp_plan: dict, weights_already_sharded: bool = False)
パラメータ:
model (torch.nn.Module) : インプレースでシャードするモデル。
config (TensorParallelConfig) : テンソル並列の構成です。そのデバイスメッシュは、config.setup(...) で既に設定されている必要があります。
tp_plan (dict) : モジュール名のグロブから"colwise"/"rowwise"スタイル(またはパックされたバリアント)へのフラットなマッピング。通常はモデルの_tp_planです。
weights_already_sharded (bool、デフォルトはFalse) : 計画されたパラメータが、ストリーミングによるfrom_pretrained読み込み後にそうなるように、すでにDTensorのシャードであるかどうかを示します。Trueの場合、フォワードフックのみが登録されます。これは検出ではなく明示的に渡されます。チェックポイントから欠落している計画されたパラメータは依然としてメタテンソルであり、実際には半分がシャード化されているモデルに対して「シャード化されていない」と誤って検出されてしまうためです。
フラットな_tp_planからモデルにテンソル並列を適用します。
Xet Storage Details
- Size:
- 9.48 kB
- Xet hash:
- 40910813a65caea324cd56cb9d2cfc1d657c20841d5a09e8d817f694f3fdaba5
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.