Diffusers documentation

Lumina-T2X

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

Lumina-T2X

concepts

Alpha-VLLM, OpenGVLab ve Shanghai AI Laboratory'den Lumina-Next: Next-DiT ile Lumina-T2X'i Daha Güçlü ve Hızlı Hale Getirme.

Makalenin özeti şudur:

Lumina-T2X, metin talimatlarına koşullu olarak gürültüyü görüntüler ve videolar gibi çeşitli modallara dönüştürmek için birleşik bir çerçeve kuran, yeni bir Flow tabanlı Büyük Difüzyon Transformer (Flag-DiT) ailesidir. Vaat edici yeteneklerine rağmen Lumina-T2X, eğitim instabilitesi, yavaş çıkarım ve ekstrapolasyon artefaktları gibi zorluklarla karşı karşıyadır. Bu makalede, Lumina-T2X'in geliştirilmiş bir sürümü olan Lumina-Next'i sunuyoruz; bu sürüm, artan eğitim ve çıkarım verimliliğiyle daha güçlü üretim performansını sergilemektedir. Flag-DiT mimarisinin kapsamlı bir analiziyle başlıyor ve birkaç suboptimal bileşeni belirliyor, ardından bunları 3D RoPE ve sandviç normalizasyonlarına sahip Next-DiT mimarisini tanıtarak ele alıyoruz. Daha iyi çözünürlük ekstrapolasyonunu mümkün kılmak için, 3D RoPE ile metinden görüntüye üretimde uygulanan farklı bağlam ekstrapolasyon yöntemlerini kapsamlı bir şekilde karşılaştırıyor ve difüzyon transformer'ları için özel olarak tasarlanmış, Frekans ve Zaman Farkındalıklı Ölçekli RoPE'yi öneriyoruz. Ayrıca, Flow ODE'nin çözülmesinde örneklem adımlarını azaltmak için sigmoid zaman ayrıklaştırma zamanlaması ve daha hızlı ağ değerlendirmesi için gereksiz görsel jetonları birleştirmek amacıyla Context Drop yöntemini tanıtıyoruz; bu, genel örneklem hızını etkili bir şekilde artırıyor. Bu iyileştirmeler sayesinde Lumina-Next, yalnızca temel metinden görüntüye üretim kalitesini ve verimliliğini artırmakla kalmıyor, aynı zamanda metin kodlayıcı olarak decoder tabanlı LLM'leri kullanarak üstün çözünürlük ekstrapolasyon yeteneklerini ve çok dilli üretimi, tümüyle sıfır atış (zero-shot) bir şekilde sergiliyor. Lumina-Next'in çok yönlü bir üretici çerçeve olduğunu daha da doğrulamak için, görsel tanıma, çoklu görünüm, ses, müzik ve nokta bulutu üretimi gibi çeşitli görevlerde somutlaştırıyoruz ve bu alanlarda güçlü performans sergiliyor. Tüm kodları ve model ağırlıklarını https://github.com/Alpha-VLLM/Lumina-T2X adresinde yayınlayarak, evrensel modelleme yeteneğine sahip bir sonraki nesil üretici yapay zekanın gelişimini ilerletmeyi hedefliyoruz.

Öne çıkanlar: Lumina-Next, Next-DiT mimarisi, 3D RoPE ve frekans ile zamana duyarlı RoPE gibi iyileştirmelerle metinden görüntüye üretim, çok dilli üretim ve çoklu görev performansını önemli ölçüde artıran yeni nesil bir Diffusion Transformer'dır.

Lumina-Next aşağıdaki bileşenlere sahiptir:

  • Daha az ve daha hızlı Adımlarla örneklemeyi iyileştirir.
  • Bir sonraki DiT'yi (Next-DiT) Sandwichnorm 3D RoPE ve Grouped-Query Attention ile birlikte transformer omurgası olarak kullanır.
  • Bir Frekans ve Zaman Farkındalıklı Ölçekli RoPE kullanır.

Alpha-VLLM, OpenGVLab ve Shanghai AI Laboratory'den Lumina-T2X: Akış Tabanlı Büyük Difüzyon Dönüştürücülerle Metni Herhangi Bir Modaliteye, Çözünürlüğe ve Süreye Dönüştürme.

Makalenin özeti şudur:

Sora, Diffusion Transformer'ın ölçeklenmesinin, keyfi çözünürlüklerde, en-boy oranlarında ve sürelerde fotogerçekçi görüntü ve video üretme potansiyelini ortaya koysa da hâlâ yeterli uygulama detaylarından yoksundur. Bu teknik raporda, metin talimatlarına koşullu olarak gürültüyü görüntülere, videolara, çoklu görünümlü 3D nesnelere ve ses kliplerine dönüştürmek üzere tasarlanmış birleşik bir çerçeve olarak, sıfır ile başlatılmış dikkate sahip Akış Tabanlı Büyük Diffusion Transformer'lar (Flag-DiT) serisi olan Lumina-T2X ailesini tanıtıyoruz. Gizli uzamsal-zamansal alanı belirteçlere (token) dönüştürerek ve [nextline] ile [nextframe] belirteçleri gibi öğrenilebilir yer tutucuları (placeholder) dahil ederek Lumina-T2X, farklı uzamsal-zamansal çözünürlüklerdeki farklı modalitelerin temsillerini sorunsuz bir şekilde birleştirir. Bu birleşik yaklaşım, farklı modaliteler için tek bir çerçeve içinde eğitim yapılmasını ve çıkarım sırasında herhangi bir çözünürlükte, en-boy oranında ve uzunlukta çok modlu verinin esnek üretimini mümkün kılar. RoPE, RMSNorm ve akış eşleştirmesi (flow matching) gibi gelişmiş teknikler, Flag-DiT'in kararlılığını, esnekliğini ve ölçeklenebilirliğini artırarak Lumina-T2X modellerinin 7 milyar parametreye kadar ölçeklenmesine ve bağlam penceresinin 128K belirtece uzatılmasına olanak tanır. Bu, Lumina-T2I modelimizle ultra yüksek tanımlı görüntüler ve Lumina-T2V modelimizle uzun 720p videolar oluşturmak için özellikle faydalıdır. Dikkat çekici bir şekilde, 5 milyar parametreli bir Flag-DiT ile güçlendirilen Lumina-T2I, 600 milyon parametreli bir basit DiT'nin eğitim hesaplama maliyetlerinin yalnızca %35'ini gerektirir. Daha kapsamlı analizimiz, Lumina-T2X'in çözünürlük dışa yaklaşımdaki (extrapolation), yüksek çözünürlüklü düzenlemedeki, tutarlı 3D görünümler üretmedeki ve sorunsuz geçişlere sahip videolar sentezlemedeki ön yeteneğini vurgulamaktadır. Lumina-T2X'in açık kaynak hale getirilmesinin, üretken yapay zeka topluluğunda yaratıcılığı, şeffaflığı ve çeşitliliği daha da artırmasını bekliyoruz.

Orijinal kod tabanını Alpha-VLLM adresinde, mevcut tüm kontrol noktalarını ise Alpha-VLLM Lumina Family adresinde bulabilirsiniz.

Öne çıkanlar: Lumina-T2X, herhangi bir modalite, çözünürlük ve süreyi destekler.

Lumina-T2X aşağıdaki bileşenlere sahiptir:

  • Omurga olarak akış tabanlı büyük difüzyon dönüştürücüsü kullanır
  • Farklı tüm modaliteleri tek bir omurga ve ilgili kodlayıcı, çözücü ile destekler.

Bu pipeline PommesPeter tarafından katkı sağlanmıştır. Orijinal kod tabanı burada bulunabilir. Orijinal ağırlıklar hf.co/Alpha-VLLM altında bulunabilir.

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.

Çıkarım (Metinden Görsele)

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

Önce hattı yükleyin:

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"

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="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]

Kantizasyon

Kantizasyon, model ağırlıklarını daha düşük hassasiyetli bir veri türünde saklayarak çok büyük modellerin bellek gereksinimlerini azaltmaya yardımcı olur. Ancak kantizasyonun video kalitesi üzerindeki etkisi, video modeline göre değişebilir.

Desteklenen kuantizasyon arka uçları ve kullanım durumunu destekleyen bir kuantizasyon arka ucunu seçme hakkında daha fazla bilgi edinmek için Quantization genel bakışına başvurun. Aşağıdaki örnek, bitsandbytes ile çıkarım için kuantize edilmiş bir LuminaPipeline yüklemenin nasıl yapılacağını göstermektedir.

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

sınıf diffusers.LuminaPipeline

< >

( transformer: LuminaNextDiT2DModelscheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLtext_encoder: GemmaPreTrainedModeltokenizer: GemmaTokenizer )

Parametreler

  • vae (AutoencoderKL) — Görselleri latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
  • text_encoder (GemmaPreTrainedModel) — Donmuş Gemma metin kodlayıcısı.
  • tokenizer (GemmaTokenizer veya GemmaTokenizerFast) — Gemma tokenizer'ı.
  • transformer (Transformer2DModel) — Kodlanmış görüntü latentlerini gürültüden arındırmak için metin koşullu bir Transformer2DModel.
  • scheduler (SchedulerMixin) — Kodlanmış görüntü latentlerini gürültüden arındırmak için transformer ile birlikte kullanılacak bir zamanlayıcı.

Lumina-T2I kullanılarak metinden görüntüye üretim 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.

__call__

< >

( 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

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — Görsel üretimi yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerine prompt_embeds geçirilmelidir.
  • 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.
  • num_inference_steps (int, isteğe bağlı, varsayılan 30) — 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.
  • sigmas (list[float], isteğe bağlı) — set_timesteps yöntemlerinde sigmas argümanını destekleyen zamanlayıcılarla gürültü azaltma sürecinde kullanılacak özel sigmalar. Tanımlanmamışsa, num_inference_steps geçirildiğinde varsayılan davranış kullanılır.
  • guidance_scale (float, isteğe bağlı, varsayılan 4.0) — Classifier-Free Diffusion Guidance'de tanımlandığı gibi yönlendirme ölçeği. guidance_scale, Imagen Paper'daki 2. denklemin w'si olarak tanımlanır. Yönlendirme ölçeği, guidance_scale > 1 olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, prompt ile yakından ilişkili görsellerin üretilmesini teşvik eder, genellikle daha düşük görsel kalitesi pahasına.
  • num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — Her istem için oluşturulacak görsel sayısı.
  • height (int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan görüntünün piksel cinsinden yüksekliği.
  • width (int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan görüntünün piksel cinsinden genişliği.
  • generator (torch.Generator veya list[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için bir veya torch üreteci listesi.
  • latents (torch.Tensor, isteğe bağlı) — Gaussian dağılımdan örneklenmiş, 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 için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından oluşturulur.
  • prompt_attention_mask (torch.Tensor, isteğe bağlı) — Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi.
  • negative_prompt_embeds (torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Lumina-T2I için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından oluşturulur.
  • negative_prompt_attention_mask (torch.Tensor, isteğe bağlı) — Negatif metin gömme verileri için önceden oluşturulmuş dikkat maskesi.
  • output_type (str, isteğe bağlı, varsayılan "pil") — Görsel oluşturma çıktısının biçimi. Şunlardan birini seçin: PIL: PIL.Image.Image veya np.array.
  • return_dict (bool, isteğe bağlı, varsayılan True) — Düz bir tuple yerine ~pipelines.stable_diffusion.IFPipelineOutput döndürülüp döndürülmemesi.
  • clean_caption (bool, isteğe bağlı, varsayılan True) — Gömleştirmeler oluşturulmadan önce açıklamanın temizlenip temizlenmeyeceğini belirtir. Bunun için beautifulsoup4 ve ftfy paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, gömleştirmeler ham istemden oluşturulur.
  • max_sequence_length (int, varsayılan 120) — prompt ile kullanılacak maksimum dizi uzunluğu.
  • scaling_watershed (float, isteğe bağlı, varsayılan 1.0) — Lumina'nın standart ve genişletilmiş bağlam dikkati arasında geçiş yapmak için kullandığı çözünürlük ölçekleme eşiği.
  • proportional_attn (bool, isteğe bağlı, varsayılan True) — Yüksek çözünürlüklü üretim için dikkatin orantılı olarak ölçeklenip ölçeklenmeyeceğini belirtir.
  • callback_on_step_end (Callable, isteğe bağlı) — Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs, callback_on_step_end_tensor_inputs tarafından belirtilen tüm tensörlerin listesini içerir.
  • callback_on_step_end_tensor_inputs (list, isteğe bağlı) — callback_on_step_end işlevi için girdi tensörlerinin listesi. Listede belirtilen tensörler, callback_kwargs argümanı olarak geçirilir. Yalnızca pipeline sınıfınızın ._callback_tensor_inputs özniteliğinde listelenen değişkenleri dahil edebilirsiniz.

Dönüş değeri

ImagePipelineOutput veya tuple

return_dict True ise ImagePipelineOutput döndürülür, aksi halde ilk öğesi üretilen görüntülerin listesinden oluşan bir tuple döndürülür

Üretim için pipeline çağrıldığında tetiklenen işlev.

Örnekler:

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

< >

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

Parametreler

  • prompt (str veya list[str], isteğe bağlı) — kodlanacak prompt
  • negative_prompt (str veya list[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem. Tanımlanmazsa, bunun yerine negative_prompt_embeds değeri geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yani guidance_scale, 1'den küçükse yok sayılır). Lumina-T2I için bu değer "" olmalıdır.
  • do_classifier_free_guidance (bool, isteğe bağlı, varsayılan True) — classifier free guidance kullanılacak mı
  • num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — her prompt için oluşturulacak görsel sayısı
  • device — (torch.device, isteğe bağlı): Sonuç olarak elde edilen gömme vektörlerinin yerleştirileceği torch cihazı
  • 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. Lumina-T2I için, "" dizisinin gömme değerleri olmalıdır.
  • clean_caption (bool, varsayılan False) — True ise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler.
  • max_sequence_length (int, varsayılan 256) — İstem için kullanılacak maksimum dizi uzunluğu.

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

Update on GitHub