Diffusers documentation
Lumina2
Lumina2
Lumina Image 2.0: A Unified and Efficient Image Generative Model هو نموذج توليدي للصور يعتمد على التحويلات الانتشارية القائمة على التدفق (flow-based diffusion transformer) ويضم 2 مليار معامل، وقادر على توليد صور متنوعة انطلاقًا من أوصاف نصية.
ملخص الورقة البحثية هو:
نُقدّم Lumina-Image 2.0، وهو نموذج متقدم لتحويل النص إلى صورة يتفوق على أحدث الأساليب السابقة عبر عدة معايير تقييم، كما يُسلّط الضوء على إمكاناته للتطور إلى نموذج ذكاء بصري شامل. يُظهر Lumina-Image 2.0 ثلاث خصائص رئيسية: (1) التوحيد – يتبنى بنية موحدة تعامل مع رموز النص والصورة كسلسلة مشتركة، مما يتيح تفاعلات طبيعية بين الوسائط ويسهّل توسيع المهام. بالإضافة إلى ذلك، بما أن أنظمة الوصف عالية الجودة يمكنها توفير أزواج تدريب نص-صورة أكثر توافقاً دلالياً، نُقدّم نظام وصف موحداً باسم UniCaptioner، الذي يولّد أوصافاً شاملة ودقيقة للنموذج. وهذا لا يسرّع تقارب النموذج فحسب، بل يعزز أيضاً الالتزام بالتعليمات، ومعالجة التعليمات ذات الطول المتغير، والتعميم على المهام عبر قوالب التعليمات. (2) الكفاءة – لتحسين كفاءة البنية الموحدة، طورنا مجموعة من تقنيات التحسين التي تُحسّن التعلم الدلالي وتوليد الملمس الدقيق أثناء التدريب، مع دمج استراتيجيات تسريع الاستدلال دون المساس بجودة الصورة. (3) الشفافية – نُصدر جميع تفاصيل التدريب والكود والنماذج كمصادر مفتوحة لضمان قابلية إعادة الإنتاج الكاملة، بهدف سد الفجوة بين فرق البحث المغلقة ذات الموارد الوفيرة والمطورين المستقلين.
تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.
استخدام تحميل الملف الواحد مع Lumina Image 2.0
تتوفر ميزة تحميل ملف واحد لنموذج Lumina Image 2.0 لنموذج Lumina2Transformer2DModel
import torch
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline
ckpt_path = "https://huggingface.co/Alpha-VLLM/Lumina-Image-2.0/blob/main/consolidated.00-of-01.pth"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path, dtype=torch.bfloat16
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-single-file.png")
استخدام نقاط التفتيش الكمّية بصيغة GGUF مع Lumina Image 2.0
يمكن تحميل نقاط التفتيش المُكمّاة بصيغة GGUF لنموذج Lumina2Transformer2DModel عبر from_single_file باستخدام GGUFQuantizationConfig
from diffusers import Lumina2Transformer2DModel, Lumina2Pipeline, GGUFQuantizationConfig
ckpt_path = "https://huggingface.co/calcuis/lumina-gguf/blob/main/lumina2-q4_0.gguf"
transformer = Lumina2Transformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
dtype=torch.bfloat16,
)
pipe = Lumina2Pipeline.from_pretrained(
"Alpha-VLLM/Lumina-Image-2.0", transformer=transformer, dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload()
image = pipe(
"a cat holding a sign that says hello",
generator=torch.Generator("cpu").manual_seed(0),
).images[0]
image.save("lumina-gguf.png")Lumina2Pipeline
فئة diffusers.Lumina2Pipeline
< source >( transformer: Lumina2Transformer2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: Gemma2PreTrainedModeltokenizer: GemmaTokenizer )
المعاملات
- vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
- text_encoder (
Gemma2PreTrainedModel) — مُشفِّر نصوص Gemma2 ثابت. - 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 = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']system_prompt: str | None = Nonecfg_trunc_ratio: float = 1.0cfg_normalization: bool = Truemax_sequence_length: int = 256 ) → 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 عادي. - attention_kwargs —
قاموس kwargs يُمرَّر إلى
AttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - 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) الخاص بك. - system_prompt (
str, اختياري) — موجّه النظام (System Prompt) المستخدم لتوليد الصورة. - cfg_trunc_ratio (
float، اختياري، القيمة الافتراضية1.0) — نسبة فترة خطوة الزمن التي تُطبَّق عليها مقياس التوجيه القائم على التطبيع. - cfg_normalization (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تطبيق مقياس التوجيه القائم على التطبيع. - max_sequence_length (
int، القيمة الافتراضية256) — أقصى طول تسلسل يُستخدم معprompt.
يعيد
ImagePipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> import torch
>>> from diffusers import Lumina2Pipeline
>>> pipe = Lumina2Pipeline.from_pretrained("Alpha-VLLM/Lumina-Image-2.0", 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] = Nonesystem_prompt: str | None = Nonemax_sequence_length: int = 256 )
المعاملات
- 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، يجب أن تكون تضمينات السلسلة "". - max_sequence_length (
int، القيمة الافتراضية256) — أقصى طول تسلسل يُستخدم للموجّه.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.