Diffusers documentation

Pipelines e componentes da comunidade

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

Pipelines e componentes da comunidade

Os pipelines da comunidade são classes DiffusionPipeline que diferem da implementação do artigo original. Eles fornecem funcionalidade adicional ou estendem a implementação original do pipeline.

Confira os pipelines da comunidade em diffusers/examples/community, com exemplos de inferência e treinamento sobre como usá-los.

Os pipelines da comunidade são armazenados no Hub ou no repositório do GitHub do Diffusers. Os pipelines do Hub são totalmente personalizáveis (scheduler, modelos, código do pipeline, etc.), enquanto os pipelines do GitHub são limitados apenas ao código do pipeline personalizado. Compare os dois tipos de pipeline na tabela abaixo.

GitHubHub
Usocustom_pipeline="<filename_without_.py>"ID do repositório no Hub ou trust_remote_code=True quando _class_name aponta para código personalizado
Processo de revisãoAbra um Pull Request no GitHub e passe por um processo de revisão da equipe do Diffusers antes da mesclagem. Essa opção é mais lenta.Envie diretamente para um repositório do Hub sem revisão. Esta é a opção mais rápida.
VisibilidadeIncluído no repositório e na documentação oficiais do Diffusers.Incluído no seu perfil do Hub e depende do seu próprio uso e promoção para ganhar visibilidade.

Carregando um pipeline da comunidade

Carregue qualquer tipo de pipeline da comunidade passando custom_pipeline para from_pretrained().

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-3-medium-diffusers",
    custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
    dtype=torch.float16,
    device_map="cuda"  # or "mps", "xpu", "cpu"
)

Adicione o argumento custom_revision ao from_pretrained() para carregar um pipeline da comunidade de uma versão específica (por exemplo, v0.30.0 ou main). Por padrão, os pipelines da comunidade são carregados da versão estável mais recente do Diffusers.

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-3-medium-diffusers",
    custom_pipeline="pipeline_stable_diffusion_3_instruct_pix2pix",
    custom_revision="main",
    dtype=torch.float16,
    device_map="cuda"  # or "mps", "xpu", "cpu"
)

Enquanto o Hugging Face Hub varre os arquivos, você ainda deve inspecionar o código do pipeline do Hub e garantir que ele é seguro.

Existem algumas maneiras de carregar um pipeline da comunidade.

  • Passe um caminho para custom_pipeline para carregar um pipeline de comunidade local. O diretório deve conter um arquivo pipeline.py contendo a classe do pipeline.

    import torch
    from diffusers import DiffusionPipeline
    
    pipeline = DiffusionPipeline.from_pretrained(
        "stabilityai/stable-diffusion-3-medium-diffusers",
        custom_pipeline="path/to/pipeline_directory",
        trust_remote_code=True,
        dtype=torch.float16,
        device_map="cuda"  # or "mps", "xpu", "cpu"
    )
  • O argumento custom_pipeline também é suportado por from_pipe(), o que é útil para reutilizar pipelines sem usar memória adicional. Isso limita o uso de memória apenas ao maior pipeline carregado.

    import torch
    from diffusers import DiffusionPipeline
    
    pipeline_sd = DiffusionPipeline.from_pretrained(
        "emilianJR/CyberRealistic_V3", dtype=torch.float16, device_map="cuda"  # or "mps", "xpu", "cpu"
    )
    pipeline_lpw = DiffusionPipeline.from_pipe(
        pipeline_sd, custom_pipeline="lpw_stable_diffusion"
    )

    O método from_pipe() é especialmente útil para carregar pipelines da comunidade, pois muitos deles não possuem pesos pré-treinados. Os pipelines da comunidade geralmente adicionam um recurso em cima de um pipeline existente.

Componentes da comunidade

Os componentes da comunidade permitem que você crie pipelines com transformers, UNets, VAEs e schedulers personalizados não suportados pelo Diffusers. Esses componentes precisam de seus próprios módulos Python.

Esta seção mostra como os usuários podem usar componentes da comunidade para construir um pipeline da comunidade, usando showlab/show-1-base como exemplo.

  1. Carregue os componentes necessários, o agendador e o processador de imagem. O codificador de texto geralmente é importado do Transformers.
from transformers import T5Tokenizer, T5EncoderModel, CLIPImageProcessor
from diffusers import DPMSolverMultistepScheduler

pipeline_id = "showlab/show-1-base"
tokenizer = T5Tokenizer.from_pretrained(pipeline_id, subfolder="tokenizer")
text_encoder = T5EncoderModel.from_pretrained(pipeline_id, subfolder="text_encoder")
scheduler = DPMSolverMultistepScheduler.from_pretrained(pipeline_id, subfolder="scheduler")
feature_extractor = CLIPImageProcessor.from_pretrained(pipeline_id, subfolder="feature_extractor")

Nas etapas 2 e 3, a implementação personalizada de UNet e pipeline deve corresponder ao formato mostrado nos respectivos arquivos para que este exemplo funcione.

  1. Carregue um UNet personalizado que já está implementado em showone_unet_3d_condition.py. O nome da classe UNet3DConditionModel é renomeado para a implementação personalizada, ShowOneUNet3DConditionModel, porque UNet3DConditionModel já existe no Diffusers. Todos os componentes necessários para a classe ShowOneUNet3DConditionModel devem ser colocados em showone_unet_3d_condition.py.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel

unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
  1. Carregue o código do pipeline personalizado (já implementado em pipeline_t2v_base_pixel.py). Este script contém uma classe personalizada TextToVideoIFPipeline para gerar vídeos a partir de texto. Assim como no caso do UNet personalizado, qualquer código necessário para o TextToVideoIFPipeline deve ser colocado em pipeline_t2v_base_pixel.py.

Inicialize o TextToVideoIFPipeline com o ShowOneUNet3DConditionModel.

import torch
from pipeline_t2v_base_pixel import TextToVideoIFPipeline

pipeline = TextToVideoIFPipeline(
    unet=unet,
    text_encoder=text_encoder,
    tokenizer=tokenizer,
    scheduler=scheduler,
    feature_extractor=feature_extractor,
)
pipeline = pipeline.to("cuda")  # or "mps", "xpu", "cpu"
  1. Envie o pipeline para o Hub para compartilhar com a comunidade.
pipeline.push_to_hub("custom-t2v-pipeline")

Após o pipeline ser enviado com sucesso, faça as seguintes alterações.

  • Alterne o atributo _class_name em model_index.json para ["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"].
  • Envie showone_unet_3d_condition.py para a subpasta unet.
  • Envie pipeline_t2v_base_pixel.py para o repositório do pipeline.

Para executar a inferência, adicione o argumento trust_remote_code ao inicializar o pipeline para lidar com toda a “mágica” nos bastidores.

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16
)

Como precaução adicional ao usar trust_remote_code=True, passe um hash de commit para o argumento revision em from_pretrained() para garantir que o código não tenha sido atualizado com novo código malicioso (a menos que você confie totalmente nos proprietários do modelo).

Próximas etapas

  • Dê uma olhada na Issue #841 para mais contexto sobre por que estamos adicionando pipelines da comunidade para ajudar todos a compartilhar facilmente seu trabalho sem serem atrasados.
  • Confira o repositório stabilityai/japanese-stable-diffusion-xl para um exemplo adicional de um pipeline da comunidade que também utiliza o recurso trust_remote_code.
Update on GitHub