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.42.1).
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。该流水线用于文本到图像任务。对于图像到图像或修复任务,请加载相应的任务 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)

有关更多详细信息,请参阅 在多个流水线中复用模型。

查看 mappings 以确认模型是否受支持。尝试加载不受支持的模型会返回错误。

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 类:

这些类中的每一个都包含一个预定义映射,将 pipeline 链接到其任务特定的子类。

调用 from_pretrained() 时,它会从 model_index.json 文件中提取类名,并根据映射关系为任务选择相应的 pipeline 子类。

Update on GitHub