Diffusers documentation

Paralelisme

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Paralelisme

Strategi paralelisme membantu mempercepat diffusion transformers dengan mendistribusikan komputasi ke beberapa perangkat, sehingga memungkinkan waktu inferensi/pelatihan yang lebih cepat. Lihat panduan Distributed inferece untuk mempelajari lebih lanjut.

ParallelConfig

kelas diffusers.ParallelConfig

< >

( context_parallel_config: diffusers.models._modeling_parallel.ContextParallelConfig | None = Nonetensor_parallel_config: diffusers.models._modeling_parallel.TensorParallelConfig | None = None_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None )

Parameter

  • context_parallel_config (ContextParallelConfig, opsional) — Konfigurasi untuk paralelisme konteks.
  • tensor_parallel_config (TensorParallelConfig, opsional) — Konfigurasi untuk paralelisme tensor.

Konfigurasi untuk menerapkan berbagai paralelisme.

ContextParallelConfig

kelas diffusers.ContextParallelConfig

< >

( ring_degree: int | None = Noneulysses_degree: int | None = Noneconvert_to_fp32: bool = Truerotate_method: typing.Literal['allgather', 'alltoall'] = 'allgather'mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = Noneulysses_anything: bool = Falsering_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 )

Parameter

  • ring_degree (int, opsional, default 1) — Jumlah perangkat yang digunakan untuk Ring Attention. Urutan (sequence) dipecah di antara perangkat. Setiap perangkat menghitung perhatian (attention) antara Q lokalnya dan potongan KV yang diteruskan secara berurutan di sekitar cincin. Memori lebih rendah (hanya menyimpan 1/N dari KV pada satu waktu), mengoverlap komputasi dengan komunikasi, tetapi memerlukan N iterasi untuk melihat semua token. Paling baik untuk urutan panjang dengan memori/bandwidth terbatas. Jumlah perangkat yang digunakan untuk ring attention di dalam region paralel konteks. Harus menjadi pembagi dari total jumlah perangkat dalam mesh paralel konteks.
  • ulysses_degree (int, opsional, default 1) — Jumlah perangkat yang digunakan untuk Ulysses Attention. Pemecahan sekuens dilakukan di antara perangkat. Setiap perangkat menghitung QKV lokal, kemudian melakukan all-gather pada semua chunk KV untuk menghitung perhatian penuh dalam satu langkah. Memori lebih tinggi (menyimpan semua KV), memerlukan komunikasi all-to-all dengan pita lebar tinggi, tetapi latensi lebih rendah. Paling cocok untuk sekuens sedang dengan bandwidth interkoneksi yang baik.
  • convert_to_fp32 (bool, opsional, default True) — Apakah akan mengonversi output dan LSE ke float32 untuk stabilitas numerik ring attention.
  • rotate_method (str, opsional, defaultnya "allgather") — Metode yang digunakan untuk memutar state key/value antar perangkat dalam ring attention. Saat ini, hanya "allgather" yang didukung.
  • ulysses_anything (bool, opsional, default False) — Apakah akan mengaktifkan mode “Ulysses Anything”, yang mendukung panjang sekuens dan jumlah head yang tidak dapat dibagi rata oleh ulysses_degree. Saat diaktifkan, ulysses_degree harus lebih besar dari 1 dan ring_degree harus 1.
  • ring_anything (bool, opsional, default False) — Apakah akan mengaktifkan mode “Ring Anything”, yang mendukung panjang sekuens arbitrer. Saat diaktifkan, ring_degree harus lebih besar dari 1 dan ulysses_degree harus 1.
  • mesh (torch.distributed.device_mesh.DeviceMesh, opsional) — Mesh perangkat kustom untuk digunakan pada context parallelism. Jika disediakan, mesh ini akan digunakan alih-alih membuat yang baru. Hal ini berguna saat menggabungkan context parallelism dengan strategi parallelism lain (misalnya, FSDP, tensor parallelism) yang berbagi mesh perangkat yang sama. Mesh harus memiliki dimensi “ring” dan “ulysses”. Gunakan ukuran 1 untuk dimensi yang tidak digunakan (misalnya, mesh_shape=(2, 1, 4) dengan mesh_dim_names=("ring", "ulysses", "fsdp") untuk ring attention saja dengan FSDP).

Konfigurasi untuk paralelisme konteks.

diffusers.hooks.apply_context_parallel

< >

( module: Moduleparallel_config: ContextParallelConfigplan: dict )

Terapkan paralel konteks pada model.

TensorParallelConfig

kelas diffusers.TensorParallelConfig

< >

( tp_degree: int = 1mesh: 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 )

Parameter

  • tp_degree (int, defaultnya 1) — Jumlah perangkat untuk sharding. Harus menjadi pembagi dari jumlah attention heads (dan dimensi tersembunyi FFN) dari model yang diparalelkan.
  • mesh (torch.distributed.device_mesh.DeviceMesh, opsional) — Device mesh kustom yang akan digunakan. Jika disediakan, tp_degree disimpulkan dari mesh.size() dan argumen ini diabaikan. Berguna saat menggabungkan TP dengan strategi paralelisme lain (mis. CP) yang berbagi mesh yang sama.

Konfigurasi untuk paralelisme tensor.

Tensor parallelism memecah matriks bobot (secara kolom dan baris) di antara perangkat. Setiap perangkat menghitung hasil parsial; AllReduce/AllGather pada batas lapisan merekonstruksi output penuh. Menggunakan torch.distributed.tensor.parallelize_module dengan gaya sharding ColwiseParallel / RowwiseParallel. Jenis perangkat yang didukung adalah "cuda", "neuron", dan "tpu".

diffusers.hooks.apply_tensor_parallel

< >

( model: Moduleconfig: TensorParallelConfigtp_plan: dictweights_already_sharded: bool = False )

Parameter

  • model (torch.nn.Module) — Model yang akan di-shard secara in-place.
  • config (TensorParallelConfig) — Konfigurasi tensor-parallel. Device mesh-nya harus sudah diatur dengan config.setup(...).
  • tp_plan (dict) — Pemetaan datar dari glob nama modul ke gaya "colwise"/"rowwise" (atau varian yang dikemas), biasanya _tp_plan dari model.
  • weights_already_sharded (bool, defaultnya False) — Apakah parameter yang direncanakan sudah berupa shard DTensor, seperti yang terjadi setelah pemuatan from_pretrained secara streaming. Jika True, hanya hook forward yang didaftarkan. Nilai ini diteruskan secara eksplisit bukan dideteksi, karena parameter yang direncanakan namun tidak ada di checkpoint akan tetap berupa meta tensor dan akan membuat deteksi menyatakan “tidak di-shard” untuk model yang sebenarnya setengah di-shard.

Terapkan paralel tensor pada model dari _tp_plan datarnya.

Update on GitHub