Diffusers documentation

AutoPipeline

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AutoPipeline

AutoPipeline — это конвейер «задача-модель», который автоматически выбирает правильный подкласс конвейера на основе задачи. Он снимает с пользователя необходимость знать конкретное имя подкласса конвейера, самостоятельно обрабатывая загрузку различных подклассов.

В отличие от DiffusionPipeline, это только модель пайплайн, который автоматически выбирает подкласс пайплайна на основе модели.

AutoPipelineForImage2Image.from_pretrained(model_id)
        |
        +-- read model_index.json  (e.g. StableDiffusionXLPipeline)
        +-- task mapping           (image-to-image)
        |
        v
StableDiffusionXLImg2ImgPipeline   // returned instance

AutoPipelineForImage2Image возвращает подкласс, специфичный для задачи (например, StableDiffusionXLImg2ImgPipeline), который можно использовать только для задач преобразования изображения в изображение.

import torch
from diffusers import AutoPipelineForImage2Image

pipeline = AutoPipelineForImage2Image.from_pretrained(
  "RunDiffusion/Juggernaut-XL-v9", dtype=torch.bfloat16, device_map="cuda",  # or "mps", "xpu", "cpu"
)
print(pipeline)
# StableDiffusionXLImg2ImgPipeline {
#   "_class_name": "StableDiffusionXLImg2ImgPipeline",
#   ...
# }

Загрузка той же модели с помощью DiffusionPipeline возвращает подкласс по умолчанию для генерации изображений по тексту, StableDiffusionXLPipeline. Этот пайплайн предназначен для генерации изображений по тексту. Для задач image-to-image или inpainting загрузите соответствующий AutoPipeline, например AutoPipelineForImage2Image или AutoPipelineForInpainting, либо подкласс, специфичный для конкретной задачи.

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
  "RunDiffusion/Juggernaut-XL-v9", dtype=torch.bfloat16, device_map="cuda",  # or "mps", "xpu", "cpu"
)
print(pipeline)
# StableDiffusionXLPipeline {
#   "_class_name": "StableDiffusionXLPipeline",
#   ...
# }

Переключение задач с помощью from_pipe

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

import torch
from diffusers import AutoPipelineForText2Image, AutoPipelineForImage2Image

pipeline_t2i = AutoPipelineForText2Image.from_pretrained(
  "RunDiffusion/Juggernaut-XL-v9", dtype=torch.bfloat16, device_map="cuda",  # or "mps", "xpu", "cpu"
)
pipeline_i2i = AutoPipelineForImage2Image.from_pipe(pipeline_t2i)

Подробнее см. в разделе Повторное использование моделей в нескольких конвейерах.

Проверьте соответствия, чтобы узнать, поддерживается ли модель. Попытка загрузить неподдерживаемую модель приводит к ошибке.

import torch
from diffusers import AutoPipelineForImage2Image

pipeline = AutoPipelineForImage2Image.from_pretrained(
    "openai/shap-e-img2img", dtype=torch.float16,
)
"ValueError: AutoPipeline can't find a pipeline linked to ShapEImg2ImgPipeline for None"

Существует четыре типа классов AutoPipeline:

Каждый из этих классов имеет предопределённое сопоставление, связывающее конвейер с его подклассом, специфичным для задачи.

При вызове from_pretrained() имя класса извлекается из файла model_index.json, а подходящий подкласс pipeline для задачи выбирается на основе соответствия.

Update on GitHub