Buckets:

hf-doc-build/doc / diffusers /main /tr /api /parallel.md
mishig's picture
|
download
raw
8.14 kB

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[[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)

Kaynak

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[[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)

Kaynak

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çaları 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 token'ları 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çindeki 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 bölünmesi cihazlar arasında yapılı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ülmemesi.

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_degree ile tam bölünemeyen, keyfi dizi uzunluklarını ve baş sayılarını destekleyen "Ulysses Anything" modunun etkinleştirilip etkinleştirilmeyeceğini belirtir. 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, isteğe bağlı) : Bağlam paralelliği için kullanılacak özel bir cihaz ızgarası. Sağlanırsa, yeni bir ızgara oluşturmak yerine bu ızgara kullanılır. Bu, bağlam paralelliğinin aynı cihaz ızgarasını paylaşan diğer paralellik stratejileriyle (ör. FSDP, tensor paralelliği) birleştirildiğinde faydalıdır. Izgaranın 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[[diffusers.hooks.apply_context_parallel]]

diffusers.hooks.apply_context_parallel(module: Module, parallel_config: ContextParallelConfig, plan: dict)

Kaynak

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

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)

Kaynak

Parametreler:

tp_degree (int, varsayılan 1) : Parçalanacak 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 ızgarası. Sağlanırsa, tp_degree değeri mesh.size() üzerinden çıkarılır ve argüman yok sayılır. Aynı ızgarayı 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[[diffusers.hooks.apply_tensor_parallel]]

diffusers.hooks.apply_tensor_parallel(model: Module, config: TensorParallelConfig, tp_plan: dict, weights_already_sharded: bool = False)

Kaynak

Parametreler:

model (torch.nn.Module) : Yerinde bölünmesi (shard) 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ümeleme ifadelerinden "colwise"/"rowwise" stiline (veya paketli bir varyanta) düz bir eşleme, genellikle modelin _tp_plan'ı.

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ığını belirtir. 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 planlı parametre yine de meta bir tensör olur ve aslında yarı parçalı olan bir model için algılamanın "parçalı değil" demesine neden olur.

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

Xet Storage Details

Size:
8.14 kB
·
Xet hash:
61730651be4c28bbf26d35b49cce94f9500f8432025725072fea48bf79e44220

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.