Buckets:

mishig's picture
|
download
raw
13.5 kB
# المجدولون
يحدد مُجدول (Scheduler) كمية الضوضاء التي يجب إزالتها في كل خطوة من حلقة إزالة الضوضاء. وتختلف المُجدلات في الموازنة بين السرعة والجودة.
يُظهر هذا الدليل كيفية تحميل مُجدول (scheduler) وتخصيص جدول خطواته الزمنية (timestep schedule) وتباعده وقيم sigmas.
## اختيار مُجدوِل
ابدأ من نقطة التفتيش الافتراضية. استبدلها فقط إذا كنت بحاجة إلى موازنة مختلفة بين السرعة والجودة.
- يُعد DPM++ 2M SDE Karras خيارًا قويًا متعدد الاستخدامات للعديد من نقاط التفتيش في نماذج الانتشار الكامنة.
- يعمل [TCDScheduler](/docs/diffusers/main/ar/api/schedulers/tcd#diffusers.TCDScheduler) بشكل جيد مع النماذج المُقطّرة.
- استخدم [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) أو [FlowMatchHeunDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_heun_discrete#diffusers.FlowMatchHeunDiscreteScheduler) لنماذج FlowMatch (Qwen-Image وFlux وما شابهها).
- غالبًا ما يعمل [EulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/euler#diffusers.EulerDiscreteScheduler) أو [EulerAncestralDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/euler_ancestral#diffusers.EulerAncestralDiscreteScheduler) بشكل جيد مع الصور بأسلوب الأنمي.
- [LCMScheduler](/docs/diffusers/main/ar/api/schedulers/lcm#diffusers.LCMScheduler) مع LCM UNet أو LoRA لتوليد بعدد قليل من الخطوات عندما يدعم نقطة التفتيش ذلك.
## تحميل مجدولات
> [!TIP]
> Flow-matching models such as Qwen-Image and Flux ship [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) as their default. Keep that scheduler unless you are intentionally experimenting. Swap with [from_config()](/docs/diffusers/main/ar/api/configuration#diffusers.ConfigMixin.from_config) only when the replacement is compatible with the checkpoint.
المجدولون (Schedulers) يعتمدون على الإعدادات فقط ولا تتضمن أوزانًا (weight tensors). يمكنك الوصول إلى خاصية `.scheduler` في خط الأنابيب (pipeline) لفحص الإعدادات المحمّلة.
```py
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler
```
لتبديل مُجدوِلات (Schedulers) في خط أنابيب محمّل، استخدم [from_config()](/docs/diffusers/main/ar/api/configuration#diffusers.ConfigMixin.from_config) مع إعدادات المُجدوِل الحالية حتى تبقى `num_train_timesteps` والحقول ذات الصلة متسقة. بالنسبة لنقاط التفتيش الخاصة بـ FlowMatch (مثل Qwen-Image و Flux وما شابه)، احتفظ بـ [FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/ar/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler) ما لم تكن تجري تجارب متعمدة مع بديل متوافق.
```py
from diffusers import DPMSolverMultistepScheduler
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)
```
يمكنك أيضًا تحميل إعدادات المجدول من Hub باستخدام [from_pretrained()](/docs/diffusers/main/ar/api/schedulers/overview#diffusers.SchedulerMixin.from_pretrained) ومرورها إلى [from_pretrained()](/docs/diffusers/main/ar/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) عبر `scheduler`.
```py
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
dpm = DPMSolverMultistepScheduler.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler"
)
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
scheduler=dpm,
dtype=torch.float16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipeline.scheduler
```
## جداول خطوات الزمن
يحدد جدول الخطوات الزمنية أو الضوضاء كيفية توزيع الضوضاء على عملية إزالة الضوضاء. يمكن أن يكون الجدول خطياً أو أكثر تركيزاً نحو البداية أو النهاية. وهو تسلسل محسوب مسبقاً لمستويات الضوضاء يتم توليده من الإعداد الافتراضي للمجدول، لكنه يمكن تخصيصه لاستخدام جداول أخرى.
```text
linear (even steps) AYS (denser where it matters)
noise noise
^ ^
| * | *
| * | *
| * | **
| * | ***
| * | **
| * | *
| * | *
+-----------------> step +-----------------> step
```
> [!TIP]
> تعمل `timesteps` المخصصة فقط إذا كان `set_timesteps` الخاص بذلك المجدول يقبل هذا الحجة (فحص خطوط الأنابيب التوقيع عبر `retrieve_timesteps` وترفع `ValueError` في حال العكس). تحقق من صفحة واجهة برمجة التطبيقات الخاصة بالمجدول أو توقيع `set_timesteps` قبل تمريرها.
يستخدم المثال أدناه جدول [Align Your Steps (AYS)](https://research.nvidia.com/labs/toronto-ai/AlignYourSteps/) الذي يمكنه توليد صورة عالية الجودة في 10 خطوات، مما يسرّع التوليد بشكل كبير ويقلل من وقت الحساب.
استورد الجدول وقم بتمريره إلى معامل `timesteps` في خط الأنابيب.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.schedulers import AysSchedules
sampling_schedule = AysSchedules["StableDiffusionXLTimesteps"]
print(sampling_schedule)
# [999, 845, 730, 587, 443, 310, 193, 116, 53, 13]
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config, algorithm_type="sde-dpmsolver++"
)
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
timesteps=sampling_schedule,
).images[0]
```
جدول خطوات AYS 10 خطوات
جدول خطوات زمنية متباعد خطياً 10 خطوات
جدول خطوات زمنية متباعد خطياً 25 خطوة
بالنسبة لإعادة الضبط باستخدام v-prediction/zero-SNR على نقاط التفتيش الأقدم، راجع [نقاط التفتيش القديمة](./legacy_checkpoints#rescaling-schedules).
## توزيع الخطوات الزمنية
يشير تباعد خطوات الزمن إلى الخطوات المحددة *t* التي يتم أخذ العينات منها من الجدول الزمني. يوفر Diffusers ثلاثة أنواع من التباعد كما هو موضح أدناه.
| استراتيجية التباعد | حساب التباعد | خطوات زمنية نموذجية |
|---|---|---|
| `leading` | خطوات متباعدة بالتساوي | `[900, 800, 700, ..., 100, 0]` |
| `linspace` | تضمين الخطوة الأولى والأخيرة وتقسيم الخطوات الوسيطة المتبقية بالتساوي | `[1000, 888.89, 777.78, ..., 111.11, 0]` |
| `trailing` | تضمين الخطوة الأخيرة وتقسيم الخطوات الوسيطة المتبقية بالتساوي بدءًا من النهاية | `[999, 899, 799, 699, 599, 499, 399, 299, 199, 99]` |
مرّر استراتيجية التباعد إلى معامل `timestep_spacing` في المجدول.
> [!TIP]
> عادةً ما تنتج استراتيجية `trailing` صوراً بجودة أعلى وتفاصيل أكثر مع عدد أقل من الخطوات، لكن الفرق في الجودة لا يكون واضحاً بنفس القدر عند استخدام قيم خطوات أكثر شيوعاً.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config, timestep_spacing="trailing"
)
prompt = "A cinematic shot of a cute little black cat sitting on a pumpkin at night"
image = pipeline(
prompt=prompt,
negative_prompt="",
num_inference_steps=5,
).images[0]
image
```
مسافة زائدة بعد 5 خطوات
المسافة البادئة بعد 5 خطوات
## سيجما
تُعد Sigmas مقياسًا لمدى ضوضاء العينة في خطوة معينة كما تحددها الجدولة. عند استخدام `sigmas` مخصصة، يتم حساب `timesteps` من هذه القيم بدلاً من إعدادات المجدول الافتراضي.
```text
step: 0 1 2 3 4
sigma: σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0
high noise ---> clean sample
```
> [!TIP]
> تعمل قيم `sigmas` المخصصة فقط إذا كان `set_timesteps` الخاص بذلك المجدول يقبل هذا الحجة (فحص خطوط الأنابيب التوقيع عبر `retrieve_timesteps` وترفع `ValueError` في حال العكس). تحقق من صفحة واجهة برمجة التطبيقات الخاصة بالمجدول أو توقيع `set_timesteps` قبل تمريرها.
مرّر قيم `sigmas` المخصصة إلى معامل `sigmas` في خط الأنابيب. يستخدم المثال أدناه قيم [sigmas](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py) من جدول AYS المكوّن من 10 خطوات.
```py
import torch
from diffusers import DiffusionPipeline, EulerDiscreteScheduler
from diffusers.schedulers import AysSchedules
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)
sigmas = AysSchedules["StableDiffusionXLSigmas"]
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
sigmas=sigmas,
).images[0]
```
### سيغما كاراس
يعيد [Karras sigmas](https://huggingface.co/papers/2206.00364) أخذ عينات من جدول الضوضاء للحصول على أخذ عينات أكثر كفاءة، وذلك عن طريق تجميع قيم السيجما بشكل أكثر كثافة في منتصف التسلسل حيث يكون إعادة بناء الهيكل حاسمة، مع استخدام عدد أقل من قيم السيجما في البداية والنهاية حيث يكون لتغيّرات الضوضاء تأثير أقل. يمكن أن يؤدي ذلك إلى زيادة مستوى التفاصيل في الصورة المولّدة.
```text
default σ: * * * * * * * * even-ish
Karras σ: * * * * * * * denser mid, sparser ends
|---structure---|
```
اضبط `use_karras_sigmas=True` في المجدول لتفعيله.
```py
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
pipeline = DiffusionPipeline.from_pretrained(
"SG161222/RealVisXL_V4.0",
dtype=torch.float16,
device_map="cuda" # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
pipeline.scheduler.config,
algorithm_type="sde-dpmsolver++",
use_karras_sigmas=True,
)
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
prompt=prompt,
negative_prompt="",
num_inference_steps=20,
).images[0]
```
تم تفعيل سيجما كاراس
تم تعطيل قيم سيجما الخاصة بـ Karras
راجع [نظرة عامة](../api/schedulers/overview) على واجهة برمجة التطبيقات الخاصة بمجدول التوقيت للحصول على قائمة بالمجدلات التي تدعم قيم Karras sigmas. يجب استخدامه فقط مع النماذج التي تم تدريبها باستخدام Karras sigmas.
## الخطوات التالية
- Read the [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) paper for more details about rescaling the noise schedule to enforce zero SNR.

Xet Storage Details

Size:
13.5 kB
·
Xet hash:
07ef13fc26a7c99e2864da014e139ff01446c6c5f3a9f9a0e3df556d178f2169

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