Diffusers documentation

Lumina-T2X

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Lumina-T2X

concepts

لومينا-نيكست: جعل لومينا-T2X أقوى وأسرع باستخدام نيكست-DiT من ألفا-VLLM، وأوبن جي في لاب، ومختبر شنغهاي للذكاء الاصطناعي.

ملخص الورقة البحثية هو:

تُعد Lumina-T2X عائلة ناشئة من محولات الانتشار الكبيرة القائمة على التدفق (Flag-DiT) التي تُنشئ إطارًا موحّدًا لتحويل الضوضاء إلى أوضاع مختلفة، مثل الصور والفيديوهات، مشروطة بتعليمات نصية. وعلى الرغم من قدراتها الواعدة، لا تزال Lumina-T2X تواجه تحديات تشمل عدم استقرار التدريب، وبطء الاستدلال، وآثار الاستقراء. في هذه الورقة، نقدم Lumina-Next، وهو إصدار محسّن من Lumina-T2X، يُظهر أداءً أقوى في التوليد مع زيادة كفاءة التدريب والاستدلال. نبدأ بتحليل شامل لمعمارية Flag-DiT ونحدد عدة مكونات غير مثلى، نعالجها من خلال تقديم معمارية Next-DiT مع 3D RoPE والتطبيع المزدوج. لتمكين استقراء دقة أفضل، نقارن بشكل شامل طرق استقراء السياق المختلفة المطبقة على توليد الصور من النص مع 3D RoPE، ونقترح RoPE المُقاس الواعي بالتردد والزمن والمصمم خصيصًا لمحولات الانتشار. بالإضافة إلى ذلك، نقدم جدولًا لتقطيع الزمن باستخدام دالة سيجمويد لتقليل خطوات العينة في حل معادلة التدفق التفاضلية (Flow ODE)، وطريقة Context Drop لدمج الرموز البصرية الزائدة عن الحاجة لتقييم أسرع للشبكة، مما يعزز بشكل فعال سرعة العينة الإجمالية. بفضل هذه التحسينات، لا تحسّن Lumina-Next جودة وكفاءة توليد الصور الأساسية من النص فحسب، بل تُظهر أيضًا قدرات استقراء دقة متفوقة وتوليدًا متعدد اللغات باستخدام نماذج اللغة الكبيرة القائمة على المُفكِّك (decoder-based LLMs) كمُشفِّر للنص، كل ذلك بطريقة صفرية التوجيه (zero-shot). وللتحقق بشكل أكبر من Lumina-Next كإطار توليدي متعدد الاستخدامات، نُجسده في مهام متنوعة تشمل التعرف البصري، والعديد من الزوايا، والصوت، والموسيقى، وتوليد سحابة النقاط، مُظهرًا أداءً قويًا عبر هذه المجالات. ومن خلال نشر جميع الأكواد وأوزان النموذج على https://github.com/Alpha-VLLM/Lumina-T2X، نهدف إلى تعزيز تطوير الذكاء الاصطناعي التوليدي من الجيل التالي القادر على النمذجة الشاملة.

أبرز الميزات: يُعد Lumina-Next نموذج Diffusion Transformer من الجيل التالي، يعزز بشكل كبير توليد الصور من النص، والتوليد متعدد اللغات، وأداء المهام المتعددة، وذلك من خلال تقديم بنية Next-DiT، و3D RoPE، وRoPE الواعي بالترددات والزمن، إلى جانب تحسينات أخرى.

يتضمن Lumina-Next المكونات التالية:

  • يُحسّن كفاءة أخذ العينات بعدد أقل من الخطوات وأسرع.
  • يستخدم Next-DiT كعمود فقري للتحويلات مع Sandwichnorm 3D RoPE و Grouped-Query Attention.
  • يستخدم RoPE المُقيَّم الواعي بالتردد والزمن.

لومينا-تي2إكس: تحويل النص إلى أي نمط ودقة ومدة عبر محولات الانتشار الكبيرة القائمة على التدفق من ألفا-في-إل-إل-إم، أوبن جي في لابس، مختبر شنغهاي للذكاء الاصطناعي.

ملخص الورقة البحثية هو:

أظهرت Sora إمكانات توسيع Diffusion Transformer لتوليد صور وفيديوهات واقعية بدقة عالية وبدون قيود على الدقة أو نسبة العرض إلى الارتفاع أو المدة، لكنها لا تزال تفتقر إلى تفاصيل التنفيذ الكافية. في هذا التقرير التقني، نقدم عائلة Lumina-T2X - وهي سلسلة من محولات الانتشار الكبيرة القائمة على التدفق (Flag-DiT) المزودة بانتباه مُصفَّر، كإطار موحّد مصمم لتحويل الضوضاء إلى صور وفيديوهات وأجسام ثلاثية الأبعاد متعددة الزوايا ومقاطع صوتية مشروطة بتعليمات نصية. من خلال ترميز الفضاء المكاني-الزمني الكامن ودمج علامات قابلة للتعلم مثل [nextline] و [nextframe]، توحد Lumina-T2X بسلاسة تمثيلات الوسائط المختلفة عبر دقات مكانية-زمنية متنوعة. يتيح هذا النهج الموحّد التدريب ضمن إطار واحد لوسائط مختلفة ويسمح بتوليد مرن للبيانات متعددة الوسائط بأي دقة ونسبة عرض إلى ارتفاع وطول أثناء الاستدلال. تعزز التقنيات المتقدمة مثل RoPE و RMSNorm ومطابقة التدفق استقرار ومرونة وقابلية توسيع Flag-DiT، مما يتيح توسيع نماذج Lumina-T2X حتى 7 مليارات معامل وتمديد نافذة السياق إلى 128K رمز. وهذا مفيد بشكل خاص لإنشاء صور فائقة الدقة باستخدام نموذجنا Lumina-T2I وفيديوهات طويلة بدقة 720p باستخدام نموذجنا Lumina-T2V. بشكل ملحوظ، يتطلب Lumina-T2I، المدعوم بـ Flag-DiT بملياري ونصف مليار معامل، فقط 35% من تكاليف التدريب الحسابية لنموذج DiT بسيط بمليون و600 ألف معامل. يؤكد تحليلنا الشامل الإضافي على القدرة الأولية لـ Lumina-T2X في الاستقراء الدقيق، والتحرير عالي الدقة، وتوليد زوايا ثلاثية الأبعاد متسقة، وتركيب فيديوهات بانتقالات سلسة. نتوقع أن يؤدي نشر Lumina-T2X مفتوح المصدر إلى تعزيز الإبداع والشفافية والتنوع في مجتمع الذكاء الاصطناعي التوليدي بشكل أكبر.

يمكنك العثور على قاعدة الأكواد الأصلية في Alpha-VLLM وجميع نقاط التفتيش المتاحة في Alpha-VLLM Lumina Family.

أبرز الميزات: يدعم Lumina-T2X أي نمط، ودقة، ومدة.

يتضمن Lumina-T2X المكونات التالية:

  • يستخدم Flow-based Large Diffusion Transformer كهيكل أساسي
  • يدعم مختلف الأنماط (modalities) مع عمود فقري واحد ومشفّر ومفكّش مناسبين.

تمت مساهمة خط المعالجة هذا بواسطة PommesPeter. يمكن العثور على قاعدة الكود الأصلية هنا. يمكن العثور على الأوزان الأصلية تحت hf.co/Alpha-VLLM.

تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.

الاستدلال (النص إلى صورة)

استخدم torch.compile لتقليل زمن الاستدلال.

أولاً، حمّل خط الأنابيب:

from diffusers import LuminaPipeline
import torch

pipeline = LuminaPipeline.from_pretrained(
	"Alpha-VLLM/Lumina-Next-SFT-diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

ثم غيّر تخطيط الذاكرة لمكوّني خطّ الأنابيب transformer وvae إلى torch.channels-last:

pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.vae.to(memory_format=torch.channels_last)

أخيرًا، قم بتجميع المكونات وتنفيذ الاستدلال:

pipeline.transformer = torch.compile(pipeline.transformer, mode="max-autotune", fullgraph=True)
pipeline.vae.decode = torch.compile(pipeline.vae.decode, mode="max-autotune", fullgraph=True)

image = pipeline(prompt="Upper body of a young woman in a Victorian-era outfit with brass goggles and leather straps. Background shows an industrial revolution cityscape with smoky skies and tall, metal structures").images[0]

التكميم

يساعد التكميم (Quantization) في تقليل متطلبات الذاكرة للنماذج الكبيرة جدًا من خلال تخزين أوزان النموذج في نوع بيانات بدقة أقل. ومع ذلك، قد يكون للتكميم تأثير متباين على جودة الفيديو اعتمادًا على نموذج الفيديو المستخدم.

راجع نظرة عامة حول التكميم لمعرفة المزيد حول محركات التكميم المدعومة واختيار محرك تكميم يدعم حالتك الاستخدامية. يوضح المثال أدناه كيفية تحميل LuminaPipeline مُكمَّم للاستدلال باستخدام bitsandbytes.

import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, Transformer2DModel, LuminaPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    subfolder="text_encoder",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = Transformer2DModel.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = LuminaPipeline.from_pretrained(
    "Alpha-VLLM/Lumina-Next-SFT-diffusers",
    text_encoder=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

prompt = "a tiny astronaut hatching from an egg on the moon"
image = pipeline(prompt).images[0]
image.save("lumina.png")

LuminaPipeline

فئة diffusers.LuminaPipeline

< >

( transformer: LuminaNextDiT2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: GemmaPreTrainedModeltokenizer: GemmaTokenizer )

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (GemmaPreTrainedModel) — مُشفِّر نصوص Gemma ثابت.
  • tokenizer (GemmaTokenizer أو GemmaTokenizerFast) — مقسّم Gemma.
  • transformer (Transformer2DModel) — نموذج Transformer2DModel مشروط بالنص لإزالة الضوضاء من كائنات الصورة المُرمّزة.
  • scheduler (SchedulerMixin) — مجدول يُستخدم بالاقتران مع transformer لإزالة الضوضاء من الكامنات المُرمّزة للصورة.

خط أنابيب لتوليد الصور من النص باستخدام Lumina-T2I.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).

__call__

< >

( prompt: str | list[str] = Nonewidth: int | None = Noneheight: int | None = Nonenum_inference_steps: int = 30guidance_scale: float = 4.0negative_prompt: str | list[str] = Nonesigmas: list = Nonenum_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueclean_caption: bool = Truemax_sequence_length: int = 256scaling_watershed: float | None = 1.0proportional_attn: bool | None = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] ) → ImagePipelineOutput or tuple

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمرير prompt_embeds بدلاً من ذلك.
  • negative_prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).
  • num_inference_steps (int، اختياري، القيمة الافتراضية 30) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • sigmas (list[float]، اختياري) — قيم sigmas مخصصة لاستخدامها في عملية إزالة الضوضاء مع المجدولين الذين يدعمون معامل sigmas في طريقة set_timesteps الخاصة بهم. إذا لم يُعرَّف، فسيتم استخدام السلوك الافتراضي عند تمرير num_inference_steps.
  • guidance_scale (float، اختياري، القيمة الافتراضية 4.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّف guidance_scale على أنه w من المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيين guidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـ prompt النصي، وعادةً على حساب انخفاض جودة الصورة.
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • height (int، اختياري، الافتراضي هو self.unet.config.sample_size) — ارتفاع الصورة المولّدة بالبكسل.
  • width (int، اختياري، الافتراضي هو self.unet.config.sample_size) — عرض الصورة المولّدة بالبكسل.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • prompt_attention_mask (torch.Tensor، اختياري) — قناع الانتباه المُولَّد مسبقًا لتضمينات النص.
  • negative_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. بالنسبة إلى Lumina-T2I، يجب أن يكون هذا الموجه السلبي "". إذا لم يُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخال negative_prompt.
  • negative_prompt_attention_mask (torch.Tensor، اختياري) — قناع الانتباه المُولَّد مسبقًا لتضمينات النص السلبية.
  • output_type (str، اختياري، القيمة الافتراضية "pil") — صيغة مخرجات توليد الصورة. اختر بين PIL: PIL.Image.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع ~pipelines.stable_diffusion.IFPipelineOutput بدلاً من tuple عادي.
  • clean_caption (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيت beautifulsoup4 وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام.
  • max_sequence_length (int الافتراضي 120) — أقصى طول تسلسل يُستخدم مع prompt.
  • scaling_watershed (float, اختياري، القيمة الافتراضية 1.0) — حدّ مقياس الدقة الذي تستخدمه Lumina للتبديل بين الانتباه في السياق القياسي والسياق الممتد.
  • proportional_attn (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم توسيع الانتباه بشكل متناسب لتوليد الصور عالية الدقة.
  • callback_on_step_end (Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). ستتضمن callback_kwargs قائمة بجميع المصفوفات كما حددتها callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالة callback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجة callback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية ._callback_tensor_inputs لفئة خط الأنابيب (pipeline) الخاص بك.

يعيد

ImagePipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:

>>> import torch
>>> from diffusers import LuminaPipeline

>>> pipe = LuminaPipeline.from_pretrained("Alpha-VLLM/Lumina-Next-SFT-diffusers", torch_dtype=torch.bfloat16)
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()

>>> prompt = "Upper body of a young woman in a Victorian-era outfit with brass goggles and leather straps. Background shows an industrial revolution cityscape with smoky skies and tall, metal structures"
>>> image = pipe(prompt).images[0]

encode_prompt

< >

( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str | list[str] = Nonenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False**kwargs )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • negative_prompt (str أو list[str]، اختياري) — الموجّه الذي لا يُستخدم لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً منه. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1). بالنسبة إلى Lumina-T2I، يجب أن يكون "".
  • do_classifier_free_guidance (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم استخدام classifier free guidance أم لا
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه
  • device — (torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخال prompt.
  • negative_prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. بالنسبة إلى Lumina-T2I، يجب أن تكون تضمينات السلسلة "".
  • clean_caption (bool، القيمة الافتراضية False) — إذا كانت True، سيقوم الدالة بمعالجة الوصف المقدم وتنظيفه قبل الترميز.
  • max_sequence_length (int، القيمة الافتراضية 256) — أقصى طول تسلسل يُستخدم للموجّه.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

Update on GitHub