Diffusers documentation

Paralellik

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

Paralellik

Paralellik stratejileri, hesaplamaları birden fazla cihaz arasında dağıtarak difüzyon dönüştürücülerini hızlandırmaya yardımcı olur ve bu sayede daha hızlı çıkarım/eğitim süreleri sağlar. Daha fazla bilgi için Distributed inferece kılavuzuna bakın.

ParallelConfig

sınıf 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 )

Parametreler

  • context_parallel_config (ContextParallelConfig, isteğe bağlı) — Bağlam paralelliği için yapılandırma.
  • tensor_parallel_config (TensorParallelConfig, isteğe bağlı) — Tensor paralelliği için yapılandırma.

Farklı paralelliklerin uygulanması için yapılandırma.

ContextParallelConfig

sınıf 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 )

Parametreler

  • ring_degree (int, isteğe bağlı, varsayılan 1) — Ring Attention için kullanılacak cihaz sayısı. Dizi, cihazlar arasında bölünür. Her cihaz, halka etrafında sırayla iletilen yerel Q ve KV parçacıkları arasındaki dikkati hesaplar. Daha düşük bellek kullanımı (aynı anda yalnızca KV'nin 1/N'ini tutar), hesaplamayı iletişimle örtüşür, ancak tüm jetonları görmek için N yineleme gerektirir. Sınırlı bellek/bant genişliğine sahip uzun diziler için en iyisidir. Bağlam paralel bölgesi içinde ring attention için kullanılacak cihaz sayısı. Bağlam paralel ızgarasındaki toplam cihaz sayısının bir böleni olmalıdır.
  • ulysses_degree (int, isteğe bağlı, varsayılan 1) — Ulysses Attention için kullanılacak cihaz sayısı. Sıralama, cihazlar arasında bölünür. Her cihaz yerel QKV'yi hesaplar, ardından tüm KV parçalarını all-gather ile toplayarak tam dikkati tek geçişte hesaplar. Daha yüksek bellek kullanımı (tüm KV'yi saklar), yüksek bant genişliğine sahip all-to-all iletişim gerektirir ancak gecikme daha düşüktür. İyi bir bağlantı bant genişliğine sahip orta uzunluktaki sıralamalar için en iyisidir.
  • convert_to_fp32 (bool, isteğe bağlı, varsayılan True) — Çıktı ve LSE'nin, ring attention sayısal kararlılığı için float32'ye dönüştürülüp dönüştürülmeyeceği.
  • rotate_method (str, isteğe bağlı, varsayılan "allgather") — Ring attention'de cihazlar arasında anahtar/değer durumlarını döndürmek için kullanılacak yöntem. Şu anda yalnızca "allgather" desteklenmektedir.
  • ulysses_anything (bool, isteğe bağlı, varsayılan False) — “Ulysses Anything” modunun etkinleştirilip etkinleştirilmeyeceğini belirtir. Bu mod, ulysses_degree ile tam bölünemeyen keyfi dizi uzunluklarını ve baş sayılarını destekler. Etkinleştirildiğinde, ulysses_degree 1'den büyük ve ring_degree 1 olmalıdır.
  • ring_anything (bool, isteğe bağlı, varsayılan False) — “Ring Anything” modunun etkinleştirilip etkinleştirilmeyeceğini belirtir. Bu mod, keyfi dizi uzunluklarını destekler. Etkinleştirildiğinde, ring_degree 1'den büyük ve ulysses_degree 1 olmalıdır.
  • mesh (torch.distributed.device_mesh.DeviceMesh, opsiyonel) — Bağlam paralelliği için kullanılacak özel bir cihaz mesh'i. Sağlanırsa, yeni bir mesh oluşturmak yerine bu mesh kullanılır. Bu, bağlam paralelliğinin aynı cihaz mesh'ini paylaşan diğer paralellik stratejileriyle (ör. FSDP, tensor paralelliği) birleştirildiğinde faydalıdır. Mesh'in hem “ring” hem de “ulysses” boyutlarına sahip olması gerekir. Kullanılmayan boyutlar için 1 boyutu kullanın (ör. yalnızca FSDP ile ring attention için mesh_shape=(2, 1, 4) ve mesh_dim_names=("ring", "ulysses", "fsdp")).

Bağlam paralelliği için yapılandırma.

diffusers.hooks.apply_context_parallel

< >

( module: Moduleparallel_config: ContextParallelConfigplan: dict )

Bir modele bağlam paralelliği uygulayın.

TensorParallelConfig

sınıf 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 )

Parametreler

  • tp_degree (int, varsayılan 1) — Paylaştırılacak cihaz sayısı. Paralelleştirilen modelin dikkat başlarının (ve FFN gizli boyutlarının) sayısına bölünür olmalıdır.
  • mesh (torch.distributed.device_mesh.DeviceMesh, isteğe bağlı) — Kullanılacak özel bir cihaz mesh'i. Sağlanırsa, tp_degree değeri mesh.size() üzerinden çıkarılır ve bu argüman yoksayılır. Aynı mesh'i paylaşan TP ile diğer paralelleştirme stratejilerini (ör. CP) birleştirirken faydalıdır.

Tensor paralelliği için yapılandırma.

Tensor paralelliği, ağırlık matrislerini cihazlar arasında (sütun bazlı ve satır bazlı) parçalara ayırır. Her cihaz kısmi bir sonuç hesaplar; katman sınırlarındaki AllReduce/AllGather tam çıktıyı yeniden oluşturur. torch.distributed.tensor.parallelize_module kullanılır ve ColwiseParallel / RowwiseParallel parçalama stilleri uygulanır. Desteklenen cihaz türleri "cuda", "neuron" ve "tpu"'dur.

diffusers.hooks.apply_tensor_parallel

< >

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

Parametreler

  • model (torch.nn.Module) — Yerinde bölünmesi gereken model.
  • config (TensorParallelConfig) — Tensor-parallel yapılandırması. Cihaz ağı (device mesh) zaten config.setup(...) ile kurulmuş olmalıdır.
  • tp_plan (dict) — Modül ad kümelemelerinden "colwise"/"rowwise" stiline (veya paketli bir varyanta) düz bir eşleme, genellikle modelin _tp_plan alanıdır.
  • weights_already_sharded (bool, varsayılan False) — Planlanan parametrelerin, akışkan from_pretrained yükleme sonrasında olduğu gibi zaten DTensor parçaları olup olmadığı. True ise yalnızca ileri yönlü kancalar (forward hooks) kaydedilir. Bu, algılanmak yerine açıkça geçirilir; çünkü checkpoint'te eksik olan bir planlanmış parametre yine de bir meta tensör olurdu ve aslında yarı-parçalı (half-sharded) olan bir model için algılama “parçalı değil” sonucunu verebilirdi.

Düz _tp_plan'ından bir modele tensör paralelliği uygulayın.

Update on GitHub