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

Tencent Hunyuan'dan Hunyuan-DiT : A Powerful Multi-Resolution Diffusion Transformer with Fine-Grained Chinese Understanding.

Makalenin özeti şudur:

Hem İngilizce hem de Çince için ince taneli anlama yeteneğine sahip, metinden görüntüye difüzyon dönüştürücüsü olan Hunyuan-DiT'yi sunuyoruz. Hunyuan-DiT'yi oluşturmak için dönüştürücü yapısını, metin kodlayıcısını ve konumsal kodlamayı özenle tasarladık. Ayrıca, yinelemeli model optimizasyonu için verileri güncellemek ve değerlendirmek amacıyla sıfırdan tüm bir veri hattı inşa ettik. İnce taneli dil anlama için, görüntülerin açıklamalarını iyileştirmek üzere Çok Modlu Büyük Dil Modeli eğittik. Son olarak, Hunyuan-DiT kullanıcılarla çok turlu çok modlu diyalog yürütebilir ve bağlama göre görüntüleri oluşturup iyileştirebilir. 50'den fazla profesyonel insan değerlendiricisiyle gerçekleştirdiğimiz bütüncül insan değerlendirme protokolü aracılığıyla, Hunyuan-DiT diğer açık kaynak modellerle karşılaştırıldığında Çince'den görüntüye üretimde yeni bir en iyi durumu (state-of-the-art) belirlemiştir.

Orijinal kod tabanını Tencent/HunyuanDiT adresinde, kullanılabilir tüm kontrol noktalarını ise Tencent-Hunyuan adresinde bulabilirsiniz.

Öne çıkanlar: HunyuanDiT, Çince/İngilizce'den görüntüye ve çoklu çözünürlüklü üretim destekler.

HunyuanDiT aşağıdaki bileşenlere sahiptir:

  • Omurga olarak bir difüzyon dönüştürücü kullanır
  • İki metin kodlayıcıyı birleştirir: ikili dilli bir CLIP ve çok dilli bir T5 kodlayıcı

Scheduler'lar kılavuzunu inceleyerek scheduler hızı ve kalitesi arasındaki ödünleşimi nasıl keşfedebileceğinizi öğrenin ve aynı bileşenleri birden fazla pipeline'a nasıl verimli bir şekilde yükleyebileceğinizi öğrenmek için pipeline'lar arasında bileşenleri yeniden kullanma bölümüne göz atın.

HungyuanDiTPipeline tarafından oluşturulan görüntüyü SDXL refiner modeline ileterek üretim kalitesini daha da artırabilirsiniz.

Optimizasyon

Hattın çalışma süresini ve bellek tüketimini torch.compile ve ileri besleme parçalama (feed-forward chunking) ile optimize edebilirsiniz. Diğer optimizasyon yöntemleri hakkında bilgi edinmek için Çıkarımı hızlandırma ve Bellek kullanımını azaltma kılavuzlarına göz atın.

Çıkarım

Çıkarım gecikmesini azaltmak için torch.compile kullanın.

Önce hattı yükleyin:

from diffusers import HunyuanDiTPipeline
import torch

pipeline = HunyuanDiTPipeline.from_pretrained(
	"Tencent-Hunyuan/HunyuanDiT-Diffusers", dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

Ardından, transformer ve vae bileşenlerinin bellek yerleşimini torch.channels-last olarak değiştirin:

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

Son olarak, bileşenleri derleyin ve çıkarımı çalıştırın:

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]

80GB A100 makinedeki benchmark sonuçları şunlardır:

With torch.compile(): Average inference time: 12.470 seconds.
Without torch.compile(): Average inference time: 20.570 seconds.

Bellek optimizasyonu

T5 metin kodlayıcısını 8 bit olarak yükleyerek, hattı yalnızca 6 GB GPU VRAM'in biraz altında çalıştırabilirsiniz. Ayrıntılar için bu betiğe bakın.

Ayrıca, bellek kullanımını azaltmak için enable_forward_chunking() yöntemini kullanabilirsiniz. Feed-forward chunking, bir transformer bloğundaki feed-forward katmanlarını tek seferde çalıştırmak yerine bir döngü içinde çalıştırır. Bu, bellek tüketimi ile çıkarım çalışma süresi arasında bir ödünleşim sağlar.

+ pipeline.transformer.enable_forward_chunking(chunk_size=1, dim=1)

HunyuanDiTPipeline

sınıf 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 )

Parametreler

  • vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli. sdxl-vae-fp16-fix kullanıyoruz.
  • text_encoder (~transformers.BertModel, ~transformers.CLIPTextModel | None) — Donmuş metin kodlayıcı (clip-vit-large-patch14). HunyuanDiT, ince ayarlanmış [bilingual CLIP] kullanır.
  • tokenizer (~transformers.BertTokenizer, ~transformers.CLIPTokenizer | None) — Metni tokenleştirmek için bir BertTokenizer veya CLIPTokenizer.
  • transformer (HunyuanDiT2DModel) — Tencent Hunyuan tarafından tasarlanan HunyuanDiT modeli.
  • text_encoder_2 (T5EncoderModel) — mT5 gömme modeli. Özellikle ‘t5-v1_1-xxl’ modelidir.
  • tokenizer_2 (T5Tokenizer) — mT5 gömmeleyicisi için belirteçleştirici.
  • scheduler (DDPMScheduler) — HunyuanDiT ile birlikte kullanılarak kodlanmış görüntü latentlerini gürültüden arındırmak için kullanılacak bir zamanlayıcı.

HunyuanDiT kullanarak İngilizce/Çince'den görüntü üretimi için pipeline.

Bu model DiffusionPipeline sınıfından devralır. Kütüphanenin tüm pipeline'lar için uyguladığı genel yöntemler (indirme veya kaydetme, belirli bir cihazda çalıştırma vb.) için üst sınıf belgelendirmesine bakın.

HunyuanDiT iki metin kodlayıcı kullanır: mT5 ve [çift dilli CLIP](kendi kendimize ince ayar yaptık)

__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

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa prompt_embeds parametresini iletmeniz gerekir.
  • height (int) — Oluşturulan görüntünün piksel cinsinden yüksekliği.
  • width (int) — Oluşturulan görüntünün piksel cinsinden genişliği.
  • num_inference_steps (int, isteğe bağlı, varsayılan 50) — Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir görüntüye yol açar. Bu parametre strength tarafından modüle edilir.
  • guidance_scale (float, isteğe bağlı, varsayılan 7.5) — Daha yüksek bir guidance scale değeri, modelin metinle prompt ile yakından ilişkili görseller üretmesini teşvik eder, ancak bunun bedeli daha düşük görsel kalitedir. Guidance scale, guidance_scale > 1 olduğunda etkinleştirilir.
  • negative_prompt (str veya list[str], isteğe bağlı) — Görsel üretimde nelerin dahil edilmeyeceğini yönlendirmek için kullanılan istem veya istemler. Tanımlanmadıysa, bunun yerine negative_prompt_embeds parametresini iletmeniz gerekir. Yönlendirme kullanılmadığında (guidance_scale < 1) yok sayılır.
  • num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı.
  • eta (float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir. Yalnızca DDIMScheduler için geçerlidir ve diğer zamanlayıcılarda yok sayılır.
  • generator (torch.Generator veya list[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için kullanılan bir torch.Generator.
  • latents (torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenen, gürültülü ve önceden oluşturulmuş latents; görüntü üretimi için girdi olarak kullanılabilir. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklemeye dayalı bir latents tensörü oluşturulur.
  • prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak (istifade ağırlıklandırma) için kullanılabilir. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından üretilir.
  • prompt_embeds_2 (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak (istifade ağırlıklandırma) için kullanılabilir. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından üretilir.
  • negative_prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini (istek ağırlıklandırması) kolayca ayarlamak için kullanılabilir. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından üretilir.
  • negative_prompt_embeds_2 (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini (istek ağırlıklandırması) kolayca ayarlamak için kullanılabilir. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından üretilir.
  • prompt_attention_mask (torch.Tensor, isteğe bağlı) — Prompt için dikkat maskesi. prompt_embeds doğrudan geçirildiğinde gereklidir.
  • prompt_attention_mask_2 (torch.Tensor, isteğe bağlı) — Prompt için dikkat maskesi. prompt_embeds_2 doğrudan geçirildiğinde zorunludur.
  • negative_prompt_attention_mask (torch.Tensor, isteğe bağlı) — Negatif prompt için dikkat maskesi. negative_prompt_embeds doğrudan geçirildiğinde gereklidir.
  • negative_prompt_attention_mask_2 (torch.Tensor, isteğe bağlı) — Negatif prompt için dikkat maskesi. negative_prompt_embeds_2 doğrudan geçirildiğinde gereklidir.
  • output_type (str, isteğe bağlı, varsayılan "pil") — Oluşturulan görüntünün çıktı biçimi. PIL.Image veya np.array arasında seçim yapın.
  • return_dict (bool, isteğe bağlı, varsayılan True) — Düz bir tuple yerine StableDiffusionPipelineOutput döndürülüp döndürülmemesi.
  • callback_on_step_end (Callable[[int, int], None], PipelineCallback, MultiPipelineCallbacks, isteğe bağlı) — Her gürültü azaltma adımının sonunda çağrılacak bir geri çağrı işlevi veya geri çağrı işlevleri listesi.
  • callback_on_step_end_tensor_inputs (list[str], isteğe bağlı) — Callback fonksiyonuna iletilmesi gereken girdi tensörlerinin listesi. Tanımlanmazsa, tüm girdi tensörleri iletilir.
  • guidance_rescale (float, isteğe bağlı, varsayılan 0.0) — Gürültüyü guidance_rescale değerine göre yeniden ölçeklendirir. Common Diffusion Noise Schedules and Sample Steps are Flawed makalesindeki bulgulara dayanır. Bölüm 3.4'e bakın
  • original_size (tuple[int, int], isteğe bağlı, varsayılan (1024, 1024)) — Görselin orijinal boyutu. Zaman kimliklerini hesaplamak için kullanılır.
  • target_size (tuple[int, int], isteğe bağlı) — Görselin hedef boyutu. Zaman kimliklerini hesaplamak için kullanılır.
  • crops_coords_top_left (tuple[int, int], isteğe bağlı, varsayılan (0, 0)) — Kırpmanın sol üst koordinatları. Zaman kimliklerini hesaplamak için kullanılır.
  • use_resolution_binning (bool, isteğe bağlı, varsayılan True) — Çözünürlük gruplandırmasının (resolution binning) kullanılıp kullanılmayacağını belirtir. True ise, girdi çözünürlüğü en yakın standart çözünürlüğe eşlenir. Desteklenen çözünürlükler 1024x1024, 1280x1280, 1024x768, 1152x864, 1280x960, 768x1024, 864x1152, 960x1280, 1280x768 ve 768x1280'dir. Bu değerin True olarak ayarlanması önerilir.

Dönüş değeri

StableDiffusionPipelineOutput veya tuple

return_dict True ise StableDiffusionPipelineOutput döndürülür, aksi halde bir tuple döndürülür; bu tuple'ın ilk öğesi üretilen görsellerin listesini, ikinci öğesi ise üretile görselin “not-safe-for-work” (nsfw) içerip içermediğini gösteren bool değerlerinin listesini içerir.

HunyuanDiT ile üretim için pipeline çağrı fonksiyonu.

Örnekler:

>>> 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 )

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — kodlanacak prompt
  • device — (torch.device): torch cihazı
  • dtype (torch.dtype) — torch veri türü
  • num_images_per_prompt (int) — her prompt için oluşturulacak görsel sayısı
  • do_classifier_free_guidance (bool) — classifier free guidance kullanılacak mı
  • negative_prompt (str veya list[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmamışsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'den küçükse) yok sayılır.
  • prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından oluşturulur.
  • negative_prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından oluşturulur.
  • prompt_attention_mask (torch.Tensor, isteğe bağlı) — Prompt için dikkat maskesi. prompt_embeds doğrudan geçirildiğinde gereklidir.
  • negative_prompt_attention_mask (torch.Tensor, isteğe bağlı) — Negatif prompt için dikkat maskesi. negative_prompt_embeds doğrudan geçirildiğinde gereklidir.
  • max_sequence_length (int, isteğe bağlı) — istem için kullanılacak maksimum dizi uzunluğu.
  • text_encoder_index (int, isteğe bağlı) — Kullanılacak metin kodlayıcısının indeksi. clip için 0 ve T5 için 1.

İsteği metin kodlayıcı gizli durumlarına kodlar.

Update on GitHub