Diffusers documentation

Hunyuan-DiT

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

Hunyuan-DiT

chinese elements understanding

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

< >

( 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__

< >

( 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 to guidance_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

< >

( 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.

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

Update on GitHub