# AutoPipeline

[AutoPipeline](../api/pipelines/auto_pipeline) 是一种*任务与模型*流水线，它会根据任务自动选择正确的流水线子类。它负责处理加载不同流水线子类的复杂性，无需知道具体的流水线子类名称。

这与 [DiffusionPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline) 不同，后者是一个*仅包含模型*的流水线，会根据模型自动选择流水线子类。

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

[AutoPipelineForImage2Image](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image) 会返回任务特定的子类（例如 [StableDiffusionXLImg2ImgPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLImg2ImgPipeline)），该子类仅可用于图像到图像任务。

```py
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](/docs/diffusers/v0.43.0/zh/api/pipelines/overview#diffusers.DiffusionPipeline) 加载同一模型时，会返回默认的文本到图像子类 [StableDiffusionXLPipeline](/docs/diffusers/v0.43.0/zh/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline)。该流水线用于文本到图像任务。对于图像到图像或修复任务，请加载相应的任务 AutoPipeline，例如 [AutoPipelineForImage2Image](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image) 或 [AutoPipelineForInpainting](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForInpainting)，或者对应的特定任务子类。

```py
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()](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image.from_pipe) 切换任务，而无需重新下载权重。组件将从源流水线中复用。

```py
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)
```

有关更多详细信息，请参阅 [在多个流水线中复用模型](../using-diffusers/loading#reusing-models-in-multiple-pipelines)。

查看 [mappings](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/auto_pipeline.py) 以确认模型是否受支持。尝试加载不受支持的模型会返回错误。

```py
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](../api/pipelines/auto_pipeline) 类：

- [AutoPipelineForText2Image](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image)
- [AutoPipelineForImage2Image](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image)
- [AutoPipelineForInpainting](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForInpainting)
- [AutoPipelineForText2Audio](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Audio)

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

调用 [from_pretrained()](/docs/diffusers/v0.43.0/zh/api/pipelines/auto_pipeline#diffusers.AutoPipelineForText2Image.from_pretrained) 时，它会从 `model_index.json` 文件中提取类名，并根据映射关系为任务选择相应的 pipeline 子类。

