Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /tr /optimization /data_parallelism.md
mishig's picture
|
download
raw
4.29 kB
# Veri paralelliği
[Data parallelism](https://huggingface.co/spaces/nanotron/ultrascale-playbook?section=data_parallelism), aynı modeli her GPU üzerinde kopyalar ve her GPU'ya farklı istemler (prompts) verir. Model zaten tek bir GPU'ya sığıyorsa bunu artırır ve tek bir istemin gecikmesini (latency) değiştirmez. Henüz denemediyseniz, önce tek bir GPU üzerinde [Batch inference](../using-diffusers/batched_inference) deneyin. Diğer stratejilerle karşılaştırmak için [Distributed inference](../training/distributed_inference) bölümüne bakın.
Veri paralelliğini [Accelerate](https://huggingface.co/docs/accelerate/index) ile veya doğrudan [PyTorch Distributed](https://pytorch.org/tutorials/beginner/dist_overview.html) ile yapılandırabilirsiniz.
## Accelerate
Accelerate, süreçleri kurar ve her birine bir GPU atar.
Aşağıdaki komutla Accelerate'i yükleyin.
```bash
uv pip install accelerate
```
Dağıtık ortamı kurmak için `run_distributed.py` adlı bir dosyada [PartialState](https://huggingface.co/docs/accelerate/v1.15.0/en/package_reference/state#accelerate.PartialState) oluşturun. Her bir işleme bir GPU atamak için [DiffusionPipeline](/docs/diffusers/v0.43.0/tr/api/pipelines/overview#diffusers.DiffusionPipeline) nesnesini `PartialState.device` üzerine taşıyın.
```py
import torch
from accelerate import PartialState
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16
)
distributed_state = PartialState()
pipeline.to(distributed_state.device)
```
Aynı dosyada, istemleri süreçler arasında bölmek için [split_between_processes](https://huggingface.co/docs/accelerate/v1.15.0/en/package_reference/state#accelerate.PartialState.split_between_processes) öğesini bir bağlam yöneticisi olarak kullanın.
```py
with distributed_state.split_between_processes(["a dog", "a cat"]) as prompt:
result = pipeline(prompt).images[0]
result.save(f"result_{distributed_state.process_index}.png")
```
Betik dosyasını `accelerate launch` ile çalıştırın ve `--num_processes` değerini GPU sayısına ayarlayın.
```bash
accelerate launch --num_processes=2 run_distributed.py
```
> [!TIP]
> Tam bir örnek için bu [minimal çoklu GPU çıkarım betiğine](https://gist.github.com/sayakpaul/cfaebd221820d7b43fae638b4dfa01ba) bakın. Daha fazla bilgi için [Accelerate ile Dağıtık çıkarım](https://huggingface.co/docs/accelerate/en/usage_guides/distributed_inference#distributed-inference-with-accelerate) kılavuzuna göz atın.
## PyTorch Dağıtık
Ayrıca, Accelerate olmadan doğrudan `torch.distributed` ile veri paralelliği de yapılandırabilirsiniz.
Dağıtık ortamı oluşturmak için [init_process_group](https://pytorch.org/docs/stable/distributed.html#torch.distributed.init_process_group) çağrın. `torchrun`, her sürecin sırasını ve toplam süreç sayısını (dünya boyutu) ortam değişkenleri aracılığıyla ayarlar, bu nedenle bunları kendiniz iletmezsiniz.
Her sürecin kendi GPU'su ve kendi prompt'u olmalıdır. `torchrun`, `LOCAL_RANK` ortam değişkenini, sürecin düğümündeki GPU dizinine ayarlar; bu nedenle GPU seçiminde bunu kullanın. Prompt seçiminde, tüm düğümler arasındaki süreçleri sayan `get_rank` işlevini kullanın.
```py
import os
import torch
import torch.distributed as dist
from diffusers import DiffusionPipeline
def main():
dist.init_process_group("nccl")
rank = dist.get_rank()
local_rank = int(os.environ["LOCAL_RANK"])
device = torch.device(f"cuda:{local_rank}")
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16,
).to(device)
prompts = ["a dog", "a cat"]
prompt = prompts[rank]
image = pipeline(prompt).images[0]
image.save(f"{prompt.replace(' ', '_')}.png")
dist.destroy_process_group()
if __name__ == "__main__":
main()
```
Betik dosyasını `run_distributed.py` olarak kaydedin ve `torchrun` ile çalıştırın. `--nproc-per-node` değerini GPU sayısına ayarlayın. `prompts` listesinde her işlem için bir istem (prompt) bulunur; bu nedenle kullandığınız her GPU için bir istem ekleyin.
```bash
torchrun --nproc-per-node 2 run_distributed.py
```

Xet Storage Details

Size:
4.29 kB
·
Xet hash:
f09f0d5b0a6829f9e100d8b2ed4a5ddeb2c0afab820772679cc8af3318887e03

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