Diffusers documentation
Hunyuan-DiT
Hunyuan-DiT
Hunyuan-DiT : نموذج تحويل انتشار متعدد الدقة قوي مع فهم دقيق للصينية من Tencent Hunyuan.
ملخص الورقة البحثية هو:
نقدّم Hunyuan-DiT، وهو نموذج تحويل انتشاري لتوليد الصور من النص، يتميز بفهم دقيق لكل من اللغتين الإنجليزية والصينية. لبناء Hunyuan-DiT، صمّمنا بعناية بنية التحويل، ومشفّر النص، والتشفير الموضعي. كما بنينا من الصفر خط أنابيب بيانات متكاملًا لتحديث البيانات وتقييمها من أجل تحسين النموذج بشكل تكراري. ولتحقيق فهم لغوي دقيق، درّبنا نموذج لغة كبير متعدد الوسائط لتحسين أوصاف الصور. أخيرًا، يمكن لـ Hunyuan-DiT إجراء حوارات متعددة الجولات متعددة الوسائط مع المستخدمين، حيث يولّد الصور ويحسّنها وفقًا للسياق. من خلال بروتوكول التقييم البشري الشامل الذي شارك فيه أكثر من 50 من المقيّمين المحترفين، يحقق Hunyuan-DiT مستوى جديدًا من الأداء المتقدّم في توليد الصور من النص الصيني مقارنةً بنماذج مفتوحة المصدر أخرى.
يمكنك العثور على قاعدة الأكواد الأصلية في Tencent/HunyuanDiT وجميع نقاط التفتيش المتاحة في Tencent-Hunyuan.
أبرز الميزات: يدعم HunyuanDiT توليد الصور من النص الصيني والإنجليزي، وتوليد متعدد الدقة.
يتضمن HunyuanDiT المكونات التالية:
- يستخدم محوّلاً انتشارياً (diffusion transformer) كهيكل أساسي
- يجمع بين مشفرَي نص، وهما مشفر CLIP ثنائي اللغة ومشفر T5 متعدد اللغات
تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.
يمكنك تحسين جودة التوليد بشكل أكبر عن طريق تمرير الصورة المولّدة من
HungyuanDiTPipelineإلى نموذج SDXL refiner.
التحسين
يمكنك تحسين زمن تشغيل خط الأنابيب واستهلاك الذاكرة باستخدام torch.compile وتقسيم التغذية الأمامية. للتعرف على طرق التحسين الأخرى، راجع أدلة تسريع الاستدلال وتقليل استهلاك الذاكرة.
الاستدلال
استخدم torch.compile لتقليل زمن الاستدلال.
أولاً، حمّل خط الأنابيب:
from diffusers import HunyuanDiTPipeline
import torch
pipeline = HunyuanDiTPipeline.from_pretrained(
"Tencent-Hunyuan/HunyuanDiT-Diffusers", dtype=torch.float16
).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="一个宇航员在骑马").images[0]نتائج الاختبار المرجعي على جهاز A100 بسعة 80 جيجابايت هي:
With torch.compile(): Average inference time: 12.470 seconds.
Without torch.compile(): Average inference time: 20.570 seconds.تحسين الذاكرة
عبر تحميل مُشفِّر النص T5 بدقة 8 بتات، يمكنك تشغيل خط الأنابيب بأقل من 6 غيغابايتات من ذاكرة GPU. راجع هذا النص البرمجي للتفاصيل.
علاوة على ذلك، يمكنك استخدام طريقة enable_forward_chunking() لتقليل استهلاك الذاكرة. يعمل تقطيع الطبقات الأمامية على تشغيل طبقات التغذية الأمامية داخل كتلة الترانسفورمر في حلقة بدلاً من تشغيلها دفعة واحدة. يمنحك هذا خياراً للتوازن بين استهلاك الذاكرة وزمن الاستدلال.
+ pipeline.transformer.enable_forward_chunking(chunk_size=1, dim=1)HunyuanDiTPipeline
فئة diffusers.HunyuanDiTPipeline
< source >( vae: AutoencoderKLtext_encoder: BertModeltokenizer: BertTokenizertransformer: HunyuanDiT2DModelscheduler: DDPMSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = Truetext_encoder_2: transformers.models.t5.modeling_t5.T5EncoderModel | None = Nonetokenizer_2: transformers.models.t5.tokenization_t5.T5Tokenizer | None = None )
المعاملات
- vae (AutoencoderKL) —
نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها. نستخدم
sdxl-vae-fp16-fix. - text_encoder (
~transformers.BertModel,~transformers.CLIPTextModel| None) — مُشفِّر نص ثابت (clip-vit-large-patch14). يستخدم HunyuanDiT نسخة مُعدَّلة من [CLIP ثنائي اللغة]. - tokenizer (
~transformers.BertTokenizer,~transformers.CLIPTokenizer| None) —BertTokenizerأوCLIPTokenizerلتجزئة النص. - transformer (HunyuanDiT2DModel) — نموذج HunyuanDiT الذي صمّمته Tencent Hunyuan.
- text_encoder_2 (
T5EncoderModel) — مُضمِّن mT5. تحديداً، هو ‘t5-v1_1-xxl’. - tokenizer_2 (
T5Tokenizer) — مُقسِّم النصوص الخاص بمُضمِّن mT5. - scheduler (DDPMScheduler) — جدول زمني يُستخدم بالاقتران مع HunyuanDiT لإزالة الضوضاء من كامنات الصورة المُرمّزة.
خط أنابيب لتوليد الصور من الإنجليزية/الصينية باستخدام HunyuanDiT.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).
يستخدم HunyuanDiT مشفّري نصّين: mT5 و[bilingual CLIP](تمّت معايرته من قِبلنا)
__call__
< source >( prompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int | None = 50guidance_scale: float | None = 5.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_2: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Noneprompt_attention_mask_2: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask_2: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = 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']guidance_rescale: float = 0.0original_size: tuple[int, int] | None = (1024, 1024)target_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple = (0, 0)use_resolution_binning: bool = True ) → StableDiffusionPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب عليك تمريرprompt_embeds. - height (
int) — ارتفاع الصورة المولّدة بالبكسل. - width (
int) — عرض الصورة المولّدة بالبكسل. - num_inference_steps (
int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال. يتم تعديل هذا المعامل بواسطةstrength. - guidance_scale (
float, اختياري، القيمة الافتراضية 7.5) — تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنصpromptعلى حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكونguidance_scale > 1. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه ما يجب عدم تضمينه في توليد الصورة. إذا لم يُعرَّف، يجب عليك تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (guidance_scale < 1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) من ورقة DDIM. ينطبق فقط على DDIMScheduler، ويُتجاهل في المجدولين الآخرين. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدامgeneratorالعشوائي المُقدَّم. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (مثل وزن الموجهات). إذا لم تُقدَّم، يتم توليد التضمينات النصية من معامل الإدخالprompt. - prompt_embeds_2 (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليد التضمينات النصية من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليدnegative_prompt_embedsمن معامل الإدخالnegative_prompt. - negative_prompt_embeds_2 (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليدnegative_prompt_embedsمن معامل الإدخالnegative_prompt. - prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه للموجّه. مطلوب عند تمريرprompt_embedsمباشرةً. - prompt_attention_mask_2 (
torch.Tensor، اختياري) — قناع الانتباه للموجّه. مطلوب عند تمريرprompt_embeds_2مباشرةً. - negative_prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه (Attention mask) الخاص بالموجّه السلبي. مطلوب عند تمريرnegative_prompt_embedsمباشرةً. - negative_prompt_attention_mask_2 (
torch.Tensor، اختياري) — قناع الانتباه (Attention mask) للموجّه السلبي. مطلوب عند تمريرnegative_prompt_embeds_2مباشرةً. - output_type (
str، اختياري، الافتراضي"pil") — صيغة مخرجات الصورة المولّدة. اختر بينPIL.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع StableDiffusionPipelineOutput بدلاً من tuple عادي. - callback_on_step_end (
Callable[[int, int], None]،PipelineCallback،MultiPipelineCallbacks، اختياري) — دالة استجابة أو قائمة من دوال الاستجابة التي تُستدعى في نهاية كل خطوة إزالة ضوضاء. - callback_on_step_end_tensor_inputs (
list[str]، اختياري) — قائمة من مدخلات المصفوفات التي يجب تمريرها إلى دالة الاستدعاء. إذا لم تُعرَّف، فسيتم تمرير جميع مدخلات المصفوفات. - guidance_rescale (
float, optional, defaults to 0.0) — Rescale the noise_cfg according toguidance_rescale. Based on findings of Common Diffusion Noise Schedules and Sample Steps are Flawed. See Section 3.4 - original_size (
tuple[int, int]، اختياري، القيمة الافتراضية(1024, 1024)) — الحجم الأصلي للصورة. يُستخدم لحساب معرّفات الوقت. - target_size (
tuple[int, int], اختياري) — الحجم المستهدف للصورة. يُستخدم لحساب معرّفات الوقت. - crops_coords_top_left (
tuple[int, int]، اختياري، القيمة الافتراضية(0, 0)) — إحداثيات الزاوية العلوية اليسرى للمقتطف. تُستخدم لحساب معرّفات الوقت. - use_resolution_binning (
bool, اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام تجميع الدقة أم لا. إذا كانت القيمةTrue، فسيتم تعيين دقة الإدخال إلى أقرب دقة قياسية. الدقات المدعومة هي 1024x1024، 1280x1280، 1024x768، 1152x864، 1280x960، 768x1024، 864x1152، 960x1280، 1280x768، و 768x1280. يُوصى بإعداد هذه القيمة إلىTrue.
يعيد
StableDiffusionPipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد StableDiffusionPipelineOutput،
وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى
“غير آمن للعمل” (nsfw).
دالة الاستدعاء call لخط الأنابيب pipeline للتوليد باستخدام HunyuanDiT.
أمثلة:
>>> import torch
>>> from diffusers import HunyuanDiTPipeline
>>> pipe = HunyuanDiTPipeline.from_pretrained(
... "Tencent-Hunyuan/HunyuanDiT-Diffusers", torch_dtype=torch.float16
... )
>>> pipe.to("cuda")
>>> # You may also use English prompt as HunyuanDiT supports both English and Chinese
>>> # prompt = "An astronaut riding a horse"
>>> prompt = "一个宇航员在骑马"
>>> image = pipe(prompt).images[0]encode_prompt
< source >( prompt: strdevice: device = Nonedtype: dtype = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = 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] = Nonemax_sequence_length: int | None = Nonetext_encoder_index: int = 0 )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - device — (
torch.device): جهاز torch - dtype (
torch.dtype) — نوع بيانات torch - num_images_per_prompt (
int) — عدد الصور التي يجب توليدها لكل موجه - do_classifier_free_guidance (
bool) — ما إذا كان سيتم استخدام classifier free guidance أم لا - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه للموجّه. مطلوب عند تمريرprompt_embedsمباشرةً. - negative_prompt_attention_mask (
torch.Tensor، اختياري) — قناع الانتباه (Attention mask) الخاص بالموجّه السلبي. مطلوب عند تمريرnegative_prompt_embedsمباشرةً. - max_sequence_length (
int، اختياري) — أقصى طول تسلسل يُستخدم للموجّه. - text_encoder_index (
int, اختياري) — مؤشر مُشفِّر النص المراد استخدامه.0لـ clip و1لـ T5.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.