Buckets:
| # التوازي في البيانات | |
| يعمل [التوازي في البيانات](https://huggingface.co/spaces/nanotron/ultrascale-playbook?section=data_parallelism) على تكرار النموذج نفسه على كل وحدة معالجة رسومية (GPU) ومنح كل وحدة معالجة رسومية أوامر مختلفة. فهو يزيد من الإنتاجية عندما يتسع النموذج بالفعل على وحدة معالجة رسومية واحدة، ويبقي زمن استجابة الأمر الواحد دون تغيير. إذا لم تفعل ذلك بعد، جرّب [الاستدلال الدُفعي](../using-diffusers/batched_inference) على وحدة معالجة رسومية واحدة أولاً. راجع [الاستدلال الموزّع](../training/distributed_inference) لمقارنته بالاستراتيجيات الأخرى. | |
| يمكنك إعداد توازي البيانات باستخدام [Accelerate](https://huggingface.co/docs/accelerate/index) أو باستخدام [PyTorch Distributed](https://pytorch.org/tutorials/beginner/dist_overview.html) مباشرة. | |
| ## Accelerate | |
| يضبط Accelerate العمليات ويُسند وحدة معالجة رسومية إلى كل عملية. | |
| قم بتثبيت Accelerate باستخدام الأمر التالي. | |
| ```bash | |
| uv pip install accelerate | |
| ``` | |
| أنشئ [PartialState](https://huggingface.co/docs/accelerate/main/en/package_reference/state#accelerate.PartialState) في ملف يُسمى `run_distributed.py` لإعداد البيئة الموزعة. انقل [DiffusionPipeline](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline) إلى `PartialState.device` لتخصيص وحدة معالجة رسومية لكل عملية. | |
| ```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) | |
| ``` | |
| في الملف نفسه، استخدم [split_between_processes](https://huggingface.co/docs/accelerate/main/en/package_reference/state#accelerate.PartialState.split_between_processes) كمدير سياق لتقسيم الأوامر بين العمليات. | |
| ```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") | |
| ``` | |
| شغّل السكربت باستخدام `accelerate launch`، و اضبط `--num_processes` على عدد وحدات معالجة الرسومات. | |
| ```bash | |
| accelerate launch --num_processes=2 run_distributed.py | |
| ``` | |
| > [!TIP] | |
| > لمثال كامل، راجع [سكربت الاستدلال متعدد وحدات GPU البسيط](https://gist.github.com/sayakpaul/cfaebd221820d7b43fae638b4dfa01ba). لمعرفة المزيد، راجع دليل [الاستدلال الموزّع باستخدام Accelerate](https://huggingface.co/docs/accelerate/en/usage_guides/distributed_inference#distributed-inference-with-accelerate). | |
| ## توزيع PyTorch | |
| يمكنك أيضًا إعداد توازي البيانات مباشرةً باستخدام `torch.distributed`، دون الحاجة إلى Accelerate. | |
| استدعِ [init_process_group](https://pytorch.org/docs/stable/distributed.html#torch.distributed.init_process_group) لإنشاء البيئة الموزعة. يحدد `torchrun` ترتيب كل عملية وعدد العمليات الإجمالي (حجم العالم) عبر متغيرات البيئة، لذا لا تحتاج إلى تمريرها بنفسك. | |
| تحتاج كل عملية إلى وحدة معالجة رسومية خاصة بها وإلى موجه خاص بها. يحدد `torchrun` متغير البيئة `LOCAL_RANK` بمؤشر وحدة معالجة الرسومية الخاصة بالعملية على عقدها، لذا استخدمه لاختيار وحدة معالجة الرسومية. استخدم `get_rank`، الذي يعد العمليات عبر جميع العقد، لاختيار الموجه. | |
| ```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() | |
| ``` | |
| احفظ السكربت باسم `run_distributed.py` وشغّله باستخدام `torchrun`. اضبط `--nproc-per-node` على عدد وحدات معالجة الرسومات. تحتوي قائمة `prompts` على موجه واحد لكل عملية، لذا أضف موجهًا لكل وحدة معالجة رسومات تستخدمها. | |
| ```bash | |
| torchrun --nproc-per-node 2 run_distributed.py | |
| ``` | |
Xet Storage Details
- Size:
- 5.17 kB
- Xet hash:
- 365294b8e0311524708b42bcb20f072b7c2519f3f5faa9781303941d5cd9f60e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.