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

Lumina-Next: Membuat Lumina-T2X Lebih Kuat dan Lebih Cepat dengan Next-DiT dari Alpha-VLLM, OpenGVLab, Shanghai AI Laboratory.

Abstrak dari makalah tersebut adalah:

Lumina-T2X adalah keluarga awal dari Flow-based Large Diffusion Transformers (Flag-DiT) yang menetapkan kerangka kerja terpadu untuk mengubah noise menjadi berbagai modalitas, seperti gambar dan video, yang dikondisikan oleh instruksi teks. Meskipun memiliki kemampuan yang menjanjikan, Lumina-T2X masih menghadapi tantangan termasuk ketidakstabilan pelatihan, inferensi yang lambat, dan artefak ekstrapolasi. Dalam makalah ini, kami menyajikan Lumina-Next, versi yang ditingkatkan dari Lumina-T2X, yang menampilkan kinerja generasi yang lebih kuat dengan efisiensi pelatihan dan inferensi yang lebih tinggi. Kami memulai dengan analisis komprehensif arsitektur Flag-DiT dan mengidentifikasi beberapa komponen yang tidak optimal, yang kami tangani dengan memperkenalkan arsitektur Next-DiT dengan 3D RoPE dan normalisasi sandwich. Untuk memungkinkan ekstrapolasi resolusi yang lebih baik, kami membandingkan secara menyeluruh berbagai metode ekstrapolasi konteks yang diterapkan pada generasi teks-ke-gambar dengan 3D RoPE, dan mengusulkan Frequency- and Time-Aware Scaled RoPE yang disesuaikan untuk diffusion transformers. Selain itu, kami memperkenalkan jadwal diskretisasi waktu sigmoid untuk mengurangi langkah sampling dalam menyelesaikan Flow ODE dan metode Context Drop untuk menggabungkan token visual yang redundan untuk evaluasi jaringan yang lebih cepat, secara efektif meningkatkan kecepatan sampling keseluruhan. Berkat peningkatan-peningkatan ini, Lumina-Next tidak hanya meningkatkan kualitas dan efisiensi generasi teks-ke-gambar dasar, tetapi juga menunjukkan kemampuan ekstrapolasi resolusi yang unggul dan generasi multibahasa menggunakan decoder-based LLMs sebagai text encoder, semuanya secara zero-shot. Untuk lebih memvalidasi Lumina-Next sebagai kerangka kerja generatif yang serbaguna, kami menginstansiasikannya pada tugas-tugas beragam termasuk pengenalan visual, multi-view, audio, musik, dan generasi point cloud, menampilkan kinerja yang kuat di domain-domain ini. Dengan merilis semua kode dan bobot model di https://github.com/Alpha-VLLM/Lumina-T2X, kami bertujuan untuk memajukan pengembangan AI generatif generasi berikutnya yang mampu pemodelan universal.

Highlight: Lumina-Next adalah Diffusion Transformer generasi berikutnya yang secara signifikan meningkatkan generasi teks-ke-gambar, generasi multibahasa, dan kinerja multitugas dengan memperkenalkan arsitektur Next-DiT, 3D RoPE, dan RoPE yang sadar frekuensi dan waktu, di antara peningkatan lainnya.

Lumina-Next memiliki komponen-komponen berikut:

  • Itu meningkatkan efisiensi sampling dengan langkah-langkah yang lebih sedikit dan lebih cepat.
  • Model ini menggunakan Next-DiT sebagai tulang punggung transformer dengan Sandwichnorm 3D RoPE, dan Grouped-Query Attention.
  • Itu menggunakan Frequency- and Time-Aware Scaled RoPE.

Lumina-T2X: Mengubah Teks Menjadi Modality, Resolusi, dan Durasi Apa Pun melalui Flow-based Large Diffusion Transformers dari Alpha-VLLM, OpenGVLab, Shanghai AI Laboratory.

Abstrak dari makalah tersebut adalah:

Sora mengungkapkan potensi penskalaan Diffusion Transformer untuk menghasilkan gambar dan video fotorealistis pada resolusi, rasio aspek, dan durasi yang sewenang-wenangnya, namun masih kekurangan detail implementasi yang memadai. Dalam laporan teknis ini, kami memperkenalkan keluarga Lumina-T2X - serangkaian Flow-based Large Diffusion Transformers (Flag-DiT) yang dilengkapi dengan zero-initialized attention, sebagai kerangka kerja terpadu yang dirancang untuk mengubah noise menjadi gambar, video, objek 3D multi-view, dan klip audio yang dikondisikan oleh instruksi teks. Dengan melakukan tokenisasi ruang spasial-temporal laten dan mengintegrasikan placeholder yang dapat dipelajari seperti token [nextline] dan [nextframe], Lumina-T2X menyatukan representasi berbagai modalitas secara mulus di berbagai resolusi spasial-temporal. Pendekatan terpadu ini memungkinkan pelatihan dalam satu kerangka kerja untuk berbagai modalitas dan memungkinkan generasi data multimodal yang fleksibel pada resolusi, rasio aspek, dan panjang apa pun selama inferensi. Teknik-teknik canggih seperti RoPE, RMSNorm, dan flow matching meningkatkan stabilitas, fleksibilitas, dan skalabilitas Flag-DiT, sehingga memungkinkan model-model Lumina-T2X untuk diskalakan hingga 7 miliar parameter dan memperluas jendela konteks hingga 128K token. Hal ini sangat bermanfaat untuk membuat gambar ultra-tinggi definisi dengan model Lumina-T2I kami dan video 720p panjang dengan model Lumina-T2V kami. Yang menakjubkan, Lumina-T2I, yang didukung oleh Flag-DiT dengan 5 miliar parameter, hanya membutuhkan 35% dari biaya komputasi pelatihan DiT naif dengan 600 juta parameter. Analisis komprehensif lebih lanjut kami menegaskan kemampuan awal Lumina-T2X dalam ekstrapolasi resolusi, pengeditan resolusi tinggi, menghasilkan tampilan 3D yang konsisten, dan mensintesis video dengan transisi yang mulus. Kami berharap bahwa open-sourcing Lumina-T2X akan lebih memupuk kreativitas, transparansi, dan keberagaman dalam komunitas AI generatif.

Anda dapat menemukan basis kode asli di Alpha-VLLM dan semua checkpoint yang tersedia di Alpha-VLLM Lumina Family.

Highlight: Lumina-T2X mendukung modality, resolusi, dan durasi apa pun.

Lumina-T2X memiliki komponen-komponen berikut:

  • Menggunakan Flow-based Large Diffusion Transformer sebagai backbone
  • It mendukung berbagai modalitas dengan satu backbone dan encoder, decoder yang sesuai.

Pipeline ini disumbangkan oleh PommesPeter. Basis kode asli dapat ditemukan di sini. Bobot asli dapat ditemukan di hf.co/Alpha-VLLM.

Pastikan untuk melihat panduan Schedulers untuk mempelajari cara mengeksplorasi tradeoff antara kecepatan dan kualitas scheduler, serta lihat bagian reuse components across pipelines untuk mempelajari cara memuat komponen yang sama secara efisien ke dalam beberapa pipeline.

Inferensi (Teks-ke-Gambar)

Gunakan torch.compile untuk mengurangi latensi inferensi.

Pertama, muat pipeline:

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"

Lalu ubah tata letak memori komponen transformer dan vae menjadi torch.channels-last:

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

Terakhir, kompilasi komponen dan jalankan inferensi:

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]

Kuantisasi

Quantization membantu mengurangi kebutuhan memori untuk model yang sangat besar dengan menyimpan bobot model dalam tipe data presisi yang lebih rendah. Namun, quantization dapat memiliki dampak yang bervariasi terhadap kualitas video tergantung pada model video yang digunakan.

Lihat ringkasan Kuantisasi untuk mempelajari lebih lanjut tentang backend kuantisasi yang didukung dan memilih backend kuantisasi yang mendukung kasus penggunaan Anda. Contoh di bawah ini menunjukkan cara memuat LuminaPipeline terkuantisasi untuk inferensi dengan bitsandbytes.

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

kelas diffusers.LuminaPipeline

< >

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

Parameter

  • vae (AutoencoderKL) — Model Variational Auto-Encoder (VAE) untuk mengodekan dan mendekodekan gambar ke dan dari representasi laten.
  • text_encoder (GemmaPreTrainedModel) — Gemma text-encoder yang dibekukan.
  • tokenizer (GemmaTokenizer atau GemmaTokenizerFast) — Tokenizer Gemma.
  • transformer (Transformer2DModel) — Transformer2DModel yang dikondisikan teks untuk mendenois latens gambar yang terenkripsi.
  • scheduler (SchedulerMixin) — Scheduler yang digunakan bersama transformer untuk menghilangkan noise pada latens gambar yang telah dikodekan.

Pipeline untuk generasi teks-ke-gambar menggunakan Lumina-T2I.

Model ini mewarisi dari DiffusionPipeline. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua pipeline (seperti mengunduh atau menyimpan, menjalankan pada perangkat tertentu, dll.)

__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

Parameter

  • prompt (str atau list[str], opsional) — Prompt atau prompt-prompt untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan prompt_embeds sebagai gantinya.
  • negative_prompt (str atau list[str], opsional) — Prompt atau prompt-prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1).
  • num_inference_steps (int, opsional, default 30) — Jumlah langkah denoising. Semakin banyak langkah denoising, biasanya menghasilkan gambar dengan kualitas lebih tinggi, namun dengan biaya inferensi yang lebih lambat.
  • sigmas (list[float], opsional) — Sigmas kustom untuk digunakan dalam proses denoising dengan scheduler yang mendukung argumen sigmas dalam metode set_timesteps mereka. Jika tidak didefinisikan, perilaku default saat num_inference_steps diteruskan akan digunakan.
  • guidance_scale (float, opsional, default 4.0) — Skala panduan seperti yang didefinisikan dalam Classifier-Free Diffusion Guidance. guidance_scale didefinisikan sebagai w dari persamaan 2. dari Imagen Paper. Skala panduan diaktifkan dengan mengatur guidance_scale > 1. Skala panduan yang lebih tinggi mendorong generasi gambar yang sangat terkait dengan prompt teks, biasanya dengan mengorbankan kualitas gambar yang lebih rendah.
  • num_images_per_prompt (int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt.
  • height (int, opsional, defaultnya self.unet.config.sample_size) — Tinggi gambar yang dihasilkan dalam piksel.
  • width (int, opsional, defaultnya self.unet.config.sample_size) — Lebar gambar yang dihasilkan dalam piksel.
  • generator (torch.Generator atau list[torch.Generator], opsional) — Satu atau daftar generator torch untuk membuat proses generasi menjadi deterministik.
  • latents (torch.Tensor, opsional) — Latents berisik yang telah dibuat sebelumnya, diambil dari distribusi Gaussian, untuk digunakan sebagai input untuk generasi gambar. Dapat digunakan untuk menyesuaikan generasi yang sama dengan prompt yang berbeda. Jika tidak disediakan, tensor latents akan dibuat dengan pengambilan sampel menggunakan generator acak yang diberikan.
  • prompt_embeds (torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • prompt_attention_mask (torch.Tensor, opsional) — Mask attention yang telah dibuat sebelumnya untuk embedding teks.
  • negative_prompt_embeds (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk Lumina-T2I, prompt negatif ini harus berupa "". Jika tidak disediakan, negative_prompt_embeds akan dibuat dari argumen input negative_prompt.
  • negative_prompt_attention_mask (torch.Tensor, opsional) — Attention mask yang telah dibuat sebelumnya untuk embedding teks negatif.
  • output_type (str, opsional, defaultnya "pil") — Format output dari generate image. Pilih antara PIL: PIL.Image.Image atau np.array.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan ~pipelines.stable_diffusion.IFPipelineOutput alih-alih tuple biasa.
  • clean_caption (bool, opsional, default True) — Apakah caption akan dibersihkan sebelum membuat embeddings. Memerlukan beautifulsoup4 dan ftfy untuk diinstal. Jika dependensi tidak diinstal, embeddings akan dibuat dari prompt mentah.
  • max_sequence_length (int defaultnya 120) — Panjang maksimum urutan yang digunakan dengan prompt.
  • scaling_watershed (float, opsional, default 1.0) — Ambang batas penskalaan resolusi yang digunakan oleh Lumina untuk beralih antara perhatian konteks standar dan konteks diperluas.
  • proportional_attn (bool, opsional, default True) — Apakah akan menskalakan perhatian secara proporsional untuk generasi resolusi tinggi.
  • callback_on_step_end (Callable, opsional) — Fungsi yang dipanggil di akhir setiap langkah denoising selama inferensi. Fungsi ini dipanggil dengan argumen berikut: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs akan berisi daftar semua tensor sesuai yang ditentukan oleh callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opsional) — Daftar input tensor untuk fungsi callback_on_step_end. Tensor yang ditentukan dalam daftar akan diteruskan sebagai argumen callback_kwargs. Anda hanya dapat menyertakan variabel yang tercantum dalam atribut ._callback_tensor_inputs dari kelas pipeline Anda.

Mengembalikan

ImagePipelineOutput atau tuple

Jika return_dict adalah True, ImagePipelineOutput dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah daftar dengan gambar yang dihasilkan

Fungsi yang dipanggil saat memanggil pipeline untuk generasi.

Contoh:

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

Parameter

  • prompt (str atau list[str], opsional) — prompt yang akan dienkod
  • negative_prompt (str atau list[str], opsional) — Prompt yang tidak digunakan untuk mengarahkan generasi gambar. Jika tidak didefinisikan, Anda harus meneruskan negative_prompt_embeds sebagai gantinya. Diabaikan jika tidak menggunakan guidance (yaitu, diabaikan jika guidance_scale kurang dari 1). Untuk Lumina-T2I, ini harus berupa "".
  • do_classifier_free_guidance (bool, opsional, default True) — apakah akan menggunakan classifier free guidance atau tidak
  • num_images_per_prompt (int, opsional, default 1) — jumlah gambar yang harus dihasilkan per prompt
  • device — (torch.device, opsional): perangkat torch untuk menempatkan embedding hasil
  • prompt_embeds (torch.Tensor, opsional) — Embedding teks yang sudah dibuat sebelumnya. Dapat digunakan untuk dengan mudah menyesuaikan input teks, misalnya pembobotan prompt. Jika tidak disediakan, embedding teks akan dihasilkan dari argumen input prompt.
  • negative_prompt_embeds (torch.Tensor, opsional) — Embedding teks negatif yang telah dibuat sebelumnya. Untuk Lumina-T2I, ini seharusnya berupa embedding dari string "".
  • clean_caption (bool, defaultnya False) — Jika True, fungsi akan memproses pra dan membersihkan caption yang diberikan sebelum encoding.
  • max_sequence_length (int, defaultnya 256) — Panjang maksimum urutan yang digunakan untuk prompt.

Mengkodekan prompt menjadi hidden states dari text encoder.

Update on GitHub