Diffusers documentation
Lumina-T2X
Lumina-T2X
لومينا-نيكست: جعل لومينا-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
< source >( 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__
< source >( 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
< source >( 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) — أقصى طول تسلسل يُستخدم للموجّه.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.