Buckets:
| # Pipelines e componentes da comunidade | |
| Os pipelines da comunidade são classes [DiffusionPipeline](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline) que diferem da implementação do artigo original. Eles fornecem funcionalidade adicional ou estendem a implementação original do pipeline. | |
| > [!TIP] | |
| > Confira os pipelines da comunidade em [diffusers/examples/community](https://github.com/huggingface/diffusers/tree/main/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. | |
| | | GitHub | Hub | | |
| |---|---|---| | |
| | Uso | `custom_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ão | Abra 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. | | |
| | Visibilidade | Incluí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()](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained). | |
| ```py | |
| 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()](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline.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. | |
| ```py | |
| 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" | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > Enquanto o Hugging Face Hub [varre](https://huggingface.co/docs/hub/security-malware) 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. | |
| ```py | |
| 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()](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline.from_pipe), o que é útil para [reutilizar pipelines](./loading#reusing-models-in-multiple-pipelines) sem usar memória adicional. Isso limita o uso de memória apenas ao maior pipeline carregado. | |
| ```py | |
| 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()](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline.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](https://huggingface.co/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](https://huggingface.co/docs/transformers/index). | |
| ```python | |
| 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") | |
| ``` | |
| > [!WARNING] | |
| > Nas etapas 2 e 3, a implementação personalizada de [UNet](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) e [pipeline](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py) deve corresponder ao formato mostrado nos respectivos arquivos para que este exemplo funcione. | |
| 2. Carregue um [UNet personalizado](https://github.com/showlab/Show-1/blob/main/showone/models/unet_3d_condition.py) que já está implementado em [showone_unet_3d_condition.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py). O nome da classe [UNet3DConditionModel](/docs/diffusers/main/pt/api/models/unet3d-cond#diffusers.UNet3DConditionModel) é renomeado para a implementação personalizada, `ShowOneUNet3DConditionModel`, porque [UNet3DConditionModel](/docs/diffusers/main/pt/api/models/unet3d-cond#diffusers.UNet3DConditionModel) já existe no Diffusers. Todos os componentes necessários para a classe `ShowOneUNet3DConditionModel` devem ser colocados em `showone_unet_3d_condition.py`. | |
| ```python | |
| from showone_unet_3d_condition import ShowOneUNet3DConditionModel | |
| unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet") | |
| ``` | |
| 3. Carregue o código do pipeline personalizado (já implementado em [pipeline_t2v_base_pixel.py](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/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`. | |
| ```python | |
| 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" | |
| ``` | |
| 4. Envie o pipeline para o Hub para compartilhar com a comunidade. | |
| ```python | |
| 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](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/model_index.json#L2) para `["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"]`. | |
| - Envie `showone_unet_3d_condition.py` para a subpasta [unet](https://huggingface.co/sayakpaul/show-1-base-with-code/blob/main/unet/showone_unet_3d_condition.py). | |
| - Envie `pipeline_t2v_base_pixel.py` para o [repositório](https://huggingface.co/sayakpaul/show-1-base-with-code/tree/main) 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. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "<change-username>/<change-id>", trust_remote_code=True, dtype=torch.float16 | |
| ) | |
| ``` | |
| > [!WARNING] | |
| > Como precaução adicional ao usar `trust_remote_code=True`, passe um hash de commit para o argumento `revision` em [from_pretrained()](/docs/diffusers/main/pt/api/pipelines/overview#diffusers.DiffusionPipeline.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](https://github.com/huggingface/diffusers/issues/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](https://huggingface.co/stabilityai/japanese-stable-diffusion-xl/) para um exemplo adicional de um pipeline da comunidade que também utiliza o recurso `trust_remote_code`. | |
Xet Storage Details
- Size:
- 9.8 kB
- Xet hash:
- 3132ae5219b1e3e4dad85b4b0c4cb364090426e59a5089a749b1fe45a3e54c41
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.