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: um poderoso Diffusion Transformer multi-resolução com compreensão detalhada do chinês da Tencent Hunyuan.

O resumo do artigo é:

Apresentamos o Hunyuan-DiT, um difusão transformer de texto para imagem com compreensão detalhada tanto do inglês quanto do chinês. Para construir o Hunyuan-DiT, projetamos cuidadosamente a estrutura do transformer, o codificador de texto e a codificação posicional. Também construímos do zero um pipeline de dados completo para atualizar e avaliar dados para otimização iterativa do modelo. Para a compreensão linguística detalhada, treinamos um Modelo de Linguagem Grande Multimodal para refinar as legendas das imagens. Por fim, o Hunyuan-DiT pode realizar diálogos multimodais de múltiplas rodadas com usuários, gerando e refinando imagens de acordo com o contexto. Por meio de nosso protocolo holístico de avaliação humana com mais de 50 avaliadores humanos profissionais, o Hunyuan-DiT estabelece um novo estado da arte na geração de imagens a partir do chinês em comparação com outros modelos de código aberto.

Você pode encontrar a base de código original em Tencent/HunyuanDiT e todos os checkpoints disponíveis em Tencent-Hunyuan.

Destaques: HunyuanDiT suporta geração de imagem a partir de texto em chinês/inglês e geração em múltiplas resoluções.

O HunyuanDiT possui os seguintes componentes:

  • Ele usa um transformer de difusão como espinha dorsal
  • Ele combina dois codificadores de texto, um CLIP bilíngue e um codificador T5 multilíngue

Certifique-se de consultar o guia de Schedulers para aprender a explorar o compromisso entre a velocidade e a qualidade do scheduler, e veja a seção reutilização de componentes entre pipelines para aprender a carregar eficientemente os mesmos componentes em vários pipelines.

Você pode melhorar ainda mais a qualidade da geração passando a imagem gerada pelo HungyuanDiTPipeline para o modelo SDXL refiner.

Otimização

Você pode otimizar o tempo de execução e o consumo de memória do pipeline com torch.compile e feed-forward chunking. Para saber sobre outros métodos de otimização, consulte os guias Acelerar a inferência e Reduzir o uso de memória.

Inferência

Use torch.compile para reduzir a latência de inferência.

Primeiro, carregue o pipeline:

from diffusers import HunyuanDiTPipeline
import torch

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

Em seguida, altere o layout de memória dos componentes transformer e vae dos pipelines para torch.channels-last:

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

Por fim, compile os componentes e execute a inferência:

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]

Os resultados do benchmark em uma máquina A100 de 80GB são:

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

Otimização de memória

Ao carregar o codificador de texto T5 em 8 bits, você pode executar o pipeline com menos de 6 GB de VRAM na GPU. Consulte este script para mais detalhes.

Além disso, você pode usar o método enable_forward_chunking() para reduzir o uso de memória. O feed-forward chunking executa as camadas feed-forward em um bloco de transformer em um loop, em vez de tudo de uma vez. Isso oferece um compromisso entre o consumo de memória e o tempo de execução da inferência.

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

HunyuanDiTPipeline

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

Parâmetros

  • vae (AutoencoderKL) — Modelo de Variational Auto-Encoder (VAE) para codificar e decodificar imagens para e a partir de representações latentes. Usamos sdxl-vae-fp16-fix.
  • text_encoder (~transformers.BertModel, ~transformers.CLIPTextModel | None) — Codificador de texto congelado (clip-vit-large-patch14). O HunyuanDiT usa um [CLIP bilíngue] ajustado finamente.
  • tokenizer (~transformers.BertTokenizer, ~transformers.CLIPTokenizer | None) — Um BertTokenizer ou CLIPTokenizer para tokenizar texto.
  • transformer (HunyuanDiT2DModel) — O modelo HunyuanDiT desenvolvido pela Tencent Hunyuan.
  • text_encoder_2 (T5EncoderModel) — O incorporador mT5. Especificamente, é o ‘t5-v1_1-xxl’.
  • tokenizer_2 (T5Tokenizer) — O tokenizer do incorporador mT5.
  • scheduler (DDPMScheduler) — Um scheduler a ser usado em combinação com HunyuanDiT para desruidar os latentes da imagem codificada.

Pipeline para geração de imagens a partir de inglês/chinês usando HunyuanDiT.

Este modelo herda de DiffusionPipeline. Consulte a documentação da superclasse para os métodos genéricos que a biblioteca implementa para todos os pipelines (como download ou salvamento, execução em um dispositivo específico, etc.)

HunyuanDiT usa dois codificadores de texto: mT5 e [CLIP bilíngue](ajustado por nós mesmos)

__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

Parâmetros

  • prompt (str ou list[str], opcional) — O prompt ou os prompts para orientar a geração de imagens. Se não for definido, você precisa passar prompt_embeds.
  • height (int) — A altura da imagem gerada, em pixels.
  • width (int) — A largura, em pixels, da imagem gerada.
  • num_inference_steps (int, opcional, padrão 50) — O número de etapas de desruidamento. Mais etapas de desruidamento geralmente resultam em uma imagem de maior qualidade, em detrimento de uma inferência mais lenta. Este parâmetro é modulado por strength.
  • guidance_scale (float, opcional, padrão 7.5) — Um valor mais alto de guidance scale incentiva o modelo a gerar imagens fortemente ligadas ao texto prompt, em detrimento da qualidade da imagem. O guidance scale é ativado quando guidance_scale > 1.
  • negative_prompt (str ou list[str], opcional) — O prompt ou os prompts para orientar o que não incluir na geração de imagem. Se não definido, é necessário passar negative_prompt_embeds em vez disso. Ignorado quando não está usando orientação (guidance_scale < 1).
  • num_images_per_prompt (int, opcional, padrão 1) — O número de imagens a serem geradas por prompt.
  • eta (float, opcional, padrão 0.0) — Corresponde ao parâmetro eta (η) do paper DDIM. Aplica-se apenas ao DDIMScheduler e é ignorado em outros schedulers.
  • generator (torch.Generator ou list[torch.Generator], opcional) — Um torch.Generator para tornar a geração determinística.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pré-gerados, amostrados de uma distribuição gaussiana, a serem usados como entradas para a geração de imagens. Pode ser usado para ajustar a mesma geração com diferentes prompts. Se não for fornecido, um tensor de latentes é gerado por amostragem usando o generator aleatório fornecido.
  • prompt_embeds (torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto (ponderação do prompt). Se não forem fornecidas, as incorporações de texto são geradas a partir do argumento de entrada prompt.
  • prompt_embeds_2 (torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto (ponderação do prompt). Se não forem fornecidas, as incorporações de texto são geradas a partir do argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Embeddings de texto negativos pré-gerados. Pode ser usado para ajustar facilmente as entradas de texto (ponderação do prompt). Se não for fornecido, os negative_prompt_embeds são gerados a partir do argumento de entrada negative_prompt.
  • negative_prompt_embeds_2 (torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto (ponderação do prompt). Se não for fornecido, negative_prompt_embeds são geradas a partir do argumento de entrada negative_prompt.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atenção para o prompt. Obrigatória quando prompt_embeds é passado diretamente.
  • prompt_attention_mask_2 (torch.Tensor, opcional) — Máscara de atenção para o prompt. Obrigatória quando prompt_embeds_2 é passado diretamente.
  • negative_prompt_attention_mask (torch.Tensor, opcional) — Máscara de atenção para o prompt negativo. Obrigatória quando negative_prompt_embeds é passado diretamente.
  • negative_prompt_attention_mask_2 (torch.Tensor, opcional) — Máscara de atenção para o prompt negativo. Obrigatória quando negative_prompt_embeds_2 é passado diretamente.
  • output_type (str, opcional, padrão "pil") — O formato de saída da imagem gerada. Escolha entre PIL.Image ou np.array.
  • return_dict (bool, opcional, padrão True) — Se deve ou não retornar um StableDiffusionPipelineOutput em vez de uma tupla simples.
  • callback_on_step_end (Callable[[int, int], None], PipelineCallback, MultiPipelineCallbacks, opcional) — Uma função de callback ou uma lista de funções de callback a serem chamadas no final de cada etapa de remoção de ruído.
  • callback_on_step_end_tensor_inputs (list[str], opcional) — Uma lista de entradas de tensor que devem ser passadas para a função de callback. Se não for definida, todas as entradas de tensor serão passadas.
  • guidance_rescale (float, opcional, padrão 0.0) — Recalcula o noise_cfg de acordo com guidance_rescale. Baseado nas conclusões de Common Diffusion Noise Schedules and Sample Steps are Flawed. Veja a Seção 3.4
  • original_size (tuple[int, int], opcional, padrão (1024, 1024)) — O tamanho original da imagem. Usado para calcular os time ids.
  • target_size (tuple[int, int], opcional) — O tamanho alvo da imagem. Usado para calcular os ids de tempo.
  • crops_coords_top_left (tuple[int, int], opcional, padrão (0, 0)) — As coordenadas do canto superior esquerdo do recorte. Usado para calcular os ids de tempo.
  • use_resolution_binning (bool, opcional, padrão True) — Se deve usar binning de resolução ou não. Se True, a resolução de entrada será mapeada para a resolução padrão mais próxima. As resoluções suportadas são 1024x1024, 1280x1280, 1024x768, 1152x864, 1280x960, 768x1024, 864x1152, 960x1280, 1280x768 e 768x1280. Recomenda-se definir este parâmetro como True.

Se return_dict for True, StableDiffusionPipelineOutput é retornado, caso contrário, uma tuple é retornada, em que o primeiro elemento é uma lista com as imagens geradas e o segundo elemento é uma lista de bools indicando se a imagem gerada correspondente contém conteúdo “not-safe-for-work” (nsfw).

A função de chamada do pipeline para geração com HunyuanDiT.

Exemplos:

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

Parâmetros

  • prompt (str ou list[str], opcional) — prompt a ser codificado
  • device — (torch.device): dispositivo torch
  • dtype (torch.dtype) — dtype do torch
  • num_images_per_prompt (int) — número de imagens que devem ser geradas por prompt
  • do_classifier_free_guidance (bool) — se deve usar classifier free guidance ou não
  • negative_prompt (str ou list[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passar negative_prompt_embeds em vez disso. Ignorado quando não se usa orientação (ou seja, ignorado se guidance_scale for menor que 1).
  • prompt_embeds (torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entrada negative_prompt.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atenção para o prompt. Obrigatória quando prompt_embeds é passado diretamente.
  • negative_prompt_attention_mask (torch.Tensor, opcional) — Máscara de atenção para o prompt negativo. Obrigatória quando negative_prompt_embeds é passado diretamente.
  • max_sequence_length (int, opcional) — comprimento máximo da sequência a ser usado para o prompt.
  • text_encoder_index (int, opcional) — Índice do codificador de texto a ser usado. 0 para clip e 1 para T5.

Codifica o prompt em estados ocultos do codificador de texto.

Update on GitHub