Diffusers documentation
Paralelisme
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
< source >( 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 )
Konfigurasi untuk menerapkan berbagai paralelisme.
ContextParallelConfig
kelas diffusers.ContextParallelConfig
< source >( 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, default1) — 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, default1) — 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, defaultTrue) — 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, defaultFalse) — Apakah akan mengaktifkan mode “Ulysses Anything”, yang mendukung panjang sekuens dan jumlah head yang tidak dapat dibagi rata olehulysses_degree. Saat diaktifkan,ulysses_degreeharus lebih besar dari 1 danring_degreeharus 1. - ring_anything (
bool, opsional, defaultFalse) — Apakah akan mengaktifkan mode “Ring Anything”, yang mendukung panjang sekuens arbitrer. Saat diaktifkan,ring_degreeharus lebih besar dari 1 danulysses_degreeharus 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)denganmesh_dim_names=("ring", "ulysses", "fsdp")untuk ring attention saja dengan FSDP).
Konfigurasi untuk paralelisme konteks.
diffusers.hooks.apply_context_parallel
< source >( module: Moduleparallel_config: ContextParallelConfigplan: dict )
Terapkan paralel konteks pada model.
TensorParallelConfig
kelas diffusers.TensorParallelConfig
< source >( 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, defaultnya1) — 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_degreedisimpulkan darimesh.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
< source >( 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 denganconfig.setup(...). - tp_plan (
dict) — Pemetaan datar dari glob nama modul ke gaya"colwise"/"rowwise"(atau varian yang dikemas), biasanya_tp_plandari model. - weights_already_sharded (
bool, defaultnyaFalse) — Apakah parameter yang direncanakan sudah berupa shardDTensor, seperti yang terjadi setelah pemuatanfrom_pretrainedsecara streaming. JikaTrue, 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.