Diffusers documentation

المجدولون

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

المجدولون

يحدد مُجدول (Scheduler) كمية الضوضاء التي يجب إزالتها في كل خطوة من حلقة إزالة الضوضاء. وتختلف المُجدلات في الموازنة بين السرعة والجودة.

يُظهر هذا الدليل كيفية تحميل مُجدول (scheduler) وتخصيص جدول خطواته الزمنية (timestep schedule) وتباعده وقيم sigmas.

اختيار مُجدوِل

ابدأ من نقطة التفتيش الافتراضية. استبدلها فقط إذا كنت بحاجة إلى موازنة مختلفة بين السرعة والجودة.

تحميل مجدولات

Flow-matching models such as Qwen-Image and Flux ship FlowMatchEulerDiscreteScheduler as their default. Keep that scheduler unless you are intentionally experimenting. Swap with from_config() only when the replacement is compatible with the checkpoint.

المجدولون (Schedulers) يعتمدون على الإعدادات فقط ولا تتضمن أوزانًا (weight tensors). يمكنك الوصول إلى خاصية .scheduler في خط الأنابيب (pipeline) لفحص الإعدادات المحمّلة.

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() مع إعدادات المُجدوِل الحالية حتى تبقى num_train_timesteps والحقول ذات الصلة متسقة. بالنسبة لنقاط التفتيش الخاصة بـ FlowMatch (مثل Qwen-Image و Flux وما شابه)، احتفظ بـ FlowMatchEulerDiscreteScheduler ما لم تكن تجري تجارب متعمدة مع بديل متوافق.

from diffusers import DPMSolverMultistepScheduler

pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)

يمكنك أيضًا تحميل إعدادات المجدول من Hub باستخدام from_pretrained() ومرورها إلى from_pretrained() عبر scheduler.

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

جداول خطوات الزمن

يحدد جدول الخطوات الزمنية أو الضوضاء كيفية توزيع الضوضاء على عملية إزالة الضوضاء. يمكن أن يكون الجدول خطياً أو أكثر تركيزاً نحو البداية أو النهاية. وهو تسلسل محسوب مسبقاً لمستويات الضوضاء يتم توليده من الإعداد الافتراضي للمجدول، لكنه قابل للتخصيص لاستخدام جداول أخرى.

linear (even steps)                 AYS (denser where it matters)
noise                               noise
  ^                                   ^
  | *                                 | *
  |  *                                |   *
  |   *                               |    **
  |    *                              |     ***
  |     *                             |      **
  |      *                            |        *
  |       *                           |          *
  +-----------------> step            +-----------------> step

تعمل timesteps المخصصة فقط إذا كان set_timesteps الخاص بذلك المجدول يقبل هذا الحجة (فحص خطوط الأنابيب التوقيع عبر retrieve_timesteps وترفع ValueError في حال العكس). تحقق من صفحة واجهة برمجة التطبيقات الخاصة بالمجدول أو توقيع set_timesteps قبل تمريرها.

يستخدم المثال أدناه جدول Align Your Steps (AYS) الذي يمكنه توليد صورة عالية الجودة في 10 خطوات، مما يسرّع التوليد بشكل كبير ويقلل من وقت الحساب.

استورد الجدول وقم بتمريره إلى معامل timesteps في خط الأنابيب.

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 على نقاط التفتيش الأقدم، راجع نقاط التفتيش القديمة.

توزيع الخطوات الزمنية

يشير تباعد خطوات الزمن إلى الخطوات المحددة 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 في المجدول.

عادةً ما تنتج استراتيجية trailing صوراً بجودة أعلى وتفاصيل أكثر مع عدد أقل من الخطوات، لكن الفرق في الجودة لا يكون واضحاً بنفس القدر عند استخدام قيم خطوات أكثر شيوعاً.

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 من هذه القيم بدلاً من إعدادات المجدول الافتراضي.

step:   0    1    2    3    4
sigma:  σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0
        high noise  --->  clean sample

تعمل قيم sigmas المخصصة فقط إذا كان set_timesteps الخاص بذلك المجدول يقبل هذا الحجة (فحص خطوط الأنابيب التوقيع عبر retrieve_timesteps وترفع ValueError في حال العكس). تحقق من صفحة واجهة برمجة التطبيقات الخاصة بالمجدول أو توقيع set_timesteps قبل تمريرها.

مرّر قيم sigmas المخصصة إلى معامل sigmas في خط الأنابيب. يستخدم المثال أدناه قيم sigmas من جدول AYS المكوّن من 10 خطوات.

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 أخذ عينات من جدول الضوضاء للحصول على أخذ عينات أكثر كفاءة، وذلك عن طريق تجميع قيم السيجما بشكل أكثر كثافة في منتصف التسلسل حيث يكون إعادة بناء الهيكل حاسمة، مع استخدام عدد أقل من قيم السيجما في البداية والنهاية حيث يكون لتغيّرات الضوضاء تأثير أقل. يمكن أن يؤدي ذلك إلى زيادة مستوى التفاصيل في الصورة المولّدة.

default σ:  *  *  *  *  *  *  *  *     even-ish
Karras σ:   *   * * * * *   *          denser mid, sparser ends
            |---structure---|

اضبط use_karras_sigmas=True في المجدول لتفعيله.

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

راجع نظرة عامة على واجهة برمجة التطبيقات الخاصة بمجدول التوقيت للحصول على قائمة بالمجدلات التي تدعم قيم Karras sigmas. يجب استخدامه فقط مع النماذج التي تم تدريبها باستخدام Karras sigmas.

الخطوات التالية

Update on GitHub