Buckets:

mishig's picture
|
download
raw
6.08 kB
# إمكانية إعادة الإنتاج
عملية الانتشار هي عملية عشوائية تولّد مخرجات مختلفة في كل مرة. وفي حالات الاستخدام مثل الاختبار وتكرار النتائج، ترغب في توليد النتيجة نفسها في كل مرة، عبر الإصدارات والمنصات ضمن نطاق سماحية معين.
ستُظهر لك هذه الدليل كيفية التحكم في مصادر العشوائية وتفعيل الخوارزميات الحتمية.
## مولّد
تعتمد خطوط الأنابيب على [torch.randn](https://pytorch.org/docs/stable/generated/torch.randn.html)، الذي يستخدم بذرة عشوائية مختلفة في كل مرة، لإنشاء الموترات الضوضائية الأولية. ولتوليد نفس المخرجات على وحدة المعالجة المركزية أو وحدة معالجة الرسوميات، استخدم [Generator](https://docs.pytorch.org/docs/stable/generated/torch.Generator.html) لإدارة كيفية توليد القيم العشوائية.
> [!TIP]
> إذا كانت قابلية إعادة الإنتاج مهمة، فينبغي عليك استخدام مولّد `Generator` على المعالج المركزي. غالباً ما تكون خسارة الأداء ضئيلة، وستقوم بتوليد قيم أكثر تشابهاً.
استخدم `Generator` على المعالج المركزي (CPU) عندما تكون قابلية إعادة الإنتاج أولوية لديك. فمولّد الأرقام العشوائية على المعالج المركزي أكثر استقرارًا عبر الأجهزة المختلفة.
عند تمرير `Generator` يعمل على المعالج المركزي (CPU)، تقوم دالة [randn_tensor()](/docs/diffusers/main/ar/api/utilities#diffusers.utils.torch_utils.randn_tensor) في مكتبة Diffusers بسحب العينات على المعالج المركزي ثم نقل المصفوفة (tensor) إلى وحدة معالجة الرسوميات (GPU) داخل خط الأنابيب. أنت لا تستدعي `randn_tensor` أو `.to("cuda")` بنفسك. أما `Generator` الذي يعمل على وحدة معالجة الرسوميات فيسحب العينات على الجهاز مباشرة، وقد تختلف نتائجه عن نتائج المعالج المركزي.
استخدم [manual_seed](https://docs.pytorch.org/docs/stable/generated/torch.manual_seed.html) لضبط البذرة.
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda" # or "mps", "xpu", "cpu"
)
generator = torch.manual_seed(0)
image = pipeline(
prompt="a red apple on a wooden table",
generator=generator,
num_inference_steps=4,
).images[0]
```
أنشئ `Generator` على المعالج المركزي (CPU) واطلب بذرة باستخدام [Generator.manual_seed](https://docs.pytorch.org/docs/stable/generated/torch.Generator.html#torch.Generator.manual_seed).
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cpu"
)
generator = torch.Generator(device="cpu").manual_seed(0)
image = pipeline(
prompt="a red apple on a wooden table",
generator=generator,
num_inference_steps=4,
).images[0]
```
مرّر كائن `Generator` إلى خط الأنابيب بدلاً من بذرة عددية صحيحة. يحافظ كائن `Generator` على حالة عشوائية تُستهلك وتُحدَّث عند استخدامه. بعد ذلك، ينتج الكائن نفسه نتائج مختلفة في الاستدعاءات اللاحقة، حتى عبر خطوط أنابيب متعددة، لأن حالته قد تغيّرت. أعد تهيئة البذرة أو أنشئ كائن `Generator` جديدًا قبل كل استدعاء عندما تحتاج إلى استخدام البذرة نفسها مرة أخرى.
```py
import torch
prompt = "a red apple on a wooden table"
for _ in range(5):
generator = torch.manual_seed(0)
image = pipeline(prompt, generator=generator, num_inference_steps=4).images[0]
```
## الخوارزميات الحتمية
يدعم [PyTorch الخوارزميات الحتمية](https://docs.pytorch.org/docs/stable/notes/randomness.html#avoiding-nondeterministic-algorithms) (حيما توفرت) لعمليات معينة بحيث تُنتج النتائج نفسها. قد تكون الخوارزميات الحتمية أبطأ وتُقلل من الأداء.
استخدم `enable_full_determinism()` في Diffusers لتفعيل الخوارزميات الحتمية.
```py
from diffusers.utils.torch_utils import enable_full_determinism
enable_full_determinism()
```
يعمل `enable_full_determinism` من خلال:
- ضبط متغير البيئة `CUDA_LAUNCH_BLOCKING` على `1`
- ضبط متغير البيئة [CUBLAS_WORKSPACE_CONFIG](https://docs.nvidia.com/cuda/cublas/index.html#results-reproducibility) على `:16:8` بحيث يستخدم cuBLAS تخطيط مساحة عمل ثابتة وقت التشغيل
- استدعاء `torch.use_deterministic_algorithms(True)`
- إعداد `torch.backends.cudnn.deterministic = True`
- إعداد `torch.backends.cudnn.benchmark = False` حتى لا يختار cuDNN خوارزمية تلاف مختلفة في كل تشغيل
- تعطيل TensorFloat32 (TF32) باستخدام `torch.backends.cuda.matmul.allow_tf32 = False` لصالح عمليات ضرب المصفوفات بدقة كاملة أعلى دقة
## الخطوات التالية
يجب عليك قراءة ملاحظات مطوري PyTorch حول [إمكانية إعادة الإنتاج](https://docs.pytorch.org/docs/stable/notes/randomness.html). يمكنك محاولة الحد من العشوائية، لكنها ليست *مضمونة* حتى مع استخدام بذرة متطابقة.

Xet Storage Details

Size:
6.08 kB
·
Xet hash:
0001a8bacf45ebe3b50ab737c16165906f5e6de8ab81c1371a52c625a1c8262c

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