Buckets:

hf-doc-build/doc / diffusers /main /ru /using-diffusers /custom_pipeline_overview.md
mishig's picture
|
download
raw
12.6 kB

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

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

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

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

GitHub Hub
Использование 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.

Xet Storage Details

Size:
12.6 kB
·
Xet hash:
3a2ffc62077b96a0297a7507c4400caf95f4aced9bf0844af44c0a8f37f36342

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.