Diffusers documentation

Пайплайны и компоненты сообщества

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Пайплайны и компоненты сообщества

Пайплайны сообщества — это классы DiffusionPipeline, отличающиеся от реализации, описанной в оригинальной статье. Они обеспечивают дополнительный функционал или расширяют реализацию исходного пайплайна.

Ознакомьтесь с пайплайнами сообщества в diffusers/examples/community, где приведены примеры инференса и обучения для их использования.

Пайплайны сообщества хранятся либо на Hub, либо в репозитории Diffusers на GitHub. Пайплайны Hub полностью настраиваемы (планировщик, модели, код пайплайна и т. д.), тогда как пайплайны GitHub ограничены только пользовательским кодом пайплайна. Сравните два типа пайплайнов в таблице ниже.

GitHubHub
Использованиеcustom_pipeline="<filename_without_.py>"ID репозитория на Hub или trust_remote_code=True, если _class_name указывает на пользовательский код
Процесс рецензированияОткройте Pull Request на GitHub и пройдите процесс ревью от команды Diffusers перед слиянием. Этот вариант занимает больше времени.Загрузите напрямую в репозиторий Hub без рецензирования. Это самый быстрый вариант.
ВидимостьВходит в официальный репозиторий и документацию Diffusers.Отображается на вашем профиле в Hub и набирает популярность за счёт вашего использования и продвижения.

Загрузка конвейера сообщества

Загрузите любой тип сообщества, передав custom_pipeline в 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"
)

Добавьте аргумент custom_revision в from_pretrained(), чтобы загрузить community pipeline из конкретной версии (например, v0.30.0 или main). По умолчанию community pipeline загружаются из последней стабильной версии 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"
)

Пока Hugging Face Hub сканирует файлы, всё равно следует проверить код конвейера Hub и убедиться в его безопасности.

Существует несколько способов загрузки конвейера сообщества.

  • Передайте путь к custom_pipeline, чтобы загрузить локальный пайплайн сообщества. В каталоге должен находиться файл 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"
    )
  • Аргумент custom_pipeline также поддерживается в from_pipe(), что полезно для повторного использования конвейеров без использования дополнительной памяти. Это ограничивает потребление памяти только самым большим загруженным конвейером.

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

    Метод from_pipe() особенно полезен для загрузки пайплайнов сообщества, поскольку многие из них не имеют предобученных весов. Как правило, пайплайны сообщества добавляют новую функцию поверх существующего пайплайна.

Компоненты сообщества

Компоненты сообщества позволяют создавать конвейеры с кастомными трансформерами, UNet, VAE и планировщиками, которые не поддерживаются в Diffusers. Для этих компонентов требуются собственные модули Python.

В этом разделе показано, как пользователи могут использовать компоненты сообщества для создания конвейера сообщества на примере showlab/show-1-base.

  1. Загрузите необходимые компоненты: планировщик и процессор изображений. Текстовый энкодер, как правило, импортируется из 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")

На шагах 2 и 3 реализация пользовательского UNet и pipeline должна соответствовать формату, показанному в их файлах, чтобы этот пример работал.

  1. Загрузите кастомный UNet, который уже реализован в showone_unet_3d_condition.py. Имя класса UNet3DConditionModel изменено на имя кастомной реализации, ShowOneUNet3DConditionModel, поскольку UNet3DConditionModel уже существует в Diffusers. Все компоненты, необходимые для класса ShowOneUNet3DConditionModel, должны быть размещены в showone_unet_3d_condition.py.
from showone_unet_3d_condition import ShowOneUNet3DConditionModel

unet = ShowOneUNet3DConditionModel.from_pretrained(pipeline_id, subfolder="unet")
  1. Загрузите код пользовательского конвейера (уже реализованный в pipeline_t2v_base_pixel.py). Этот скрипт содержит пользовательский класс TextToVideoIFPipeline для генерации видео по тексту. Как и в случае с пользовательским UNet, весь код, необходимый для TextToVideoIFPipeline, должен находиться в pipeline_t2v_base_pixel.py.

Инициализируйте TextToVideoIFPipeline с 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. Опубликуйте конвейер на Hub, чтобы поделиться им с сообществом.
pipeline.push_to_hub("custom-t2v-pipeline")

После успешного запуска конвейера внесите следующие изменения.

  • Измените атрибут _class_name в model_index.json на ["pipeline_t2v_base_pixel", "TextToVideoIFPipeline"].
  • Загрузите showone_unet_3d_condition.py в подпапку unet.
  • Загрузите pipeline_t2v_base_pixel.py в репозиторий pipeline.

Чтобы выполнить инференс, добавьте аргумент trust_remote_code при инициализации пайплайна, чтобы обработать всю «магию» за кулисами.

import torch
from diffusers import DiffusionPipeline

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

В качестве дополнительной меры предосторожности при использовании trust_remote_code=True передайте хеш коммита в аргумент revision в from_pretrained(), чтобы убедиться, что код не был обновлён с добавлением нового вредоносного кода (если вы полностью доверяете владельцам модели).

Дальнейшие шаги

  • См. задачу #841, чтобы узнать больше о том, почему мы добавляем community pipelines, чтобы помочь всем легко делиться своими работами без задержек.
  • Ознакомьтесь с репозиторием stabilityai/japanese-stable-diffusion-xl для дополнительного примера community-пайплайна, который также использует функцию trust_remote_code.
Update on GitHub