Optimum 文档

稳定扩散

您正在查看 main 版本,该版本需要从源代码安装。如果您想进行常规 pip 安装,请查看最新的稳定版本 (v1.24.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

稳定扩散

Stable Diffusion 是一种文本到图像的潜在扩散模型。查看这篇博文以获取更多信息。

如何生成图像?

要在 Gaudi 上使用 Stable Diffusion 生成图像,您需要实例化两个实例

  • 一个使用 GaudiStableDiffusionPipeline 的管道。此管道支持文本到图像的生成
  • 一个使用 GaudiDDIMScheduler 的调度器。此调度器已针对 Gaudi 进行了优化。

初始化管道时,您必须指定 use_habana=True 以将其部署在 HPU 上。此外,为了获得最快的生成速度,您应该使用 use_hpu_graphs=True 启用 HPU 图。最后,您需要指定一个 Gaudi 配置,该配置可以从 Hugging Face Hub 下载。

from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline

model_name = "CompVis/stable-diffusion-v1-4"

scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")

pipeline = GaudiStableDiffusionPipeline.from_pretrained(
    model_name,
    scheduler=scheduler,
    use_habana=True,
    use_hpu_graphs=True,
    gaudi_config="Habana/stable-diffusion",
)

然后您可以调用管道以从一个或多个提示生成图像

outputs = pipeline(
    prompt=["High quality photo of an astronaut riding a horse in space", "Face of a yellow cat, high resolution, sitting on a park bench"],
    num_images_per_prompt=10,
    batch_size=4,
    output_type="pil",
)

生成的图像可以作为 PIL 图像或 NumPy 数组返回,具体取决于 output_type 选项。

查看官方 Github 仓库中提供的示例

稳定扩散 2

Stable Diffusion 2 可以与完全相同的类一起使用。这是一个示例

from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline

model_name = "stabilityai/stable-diffusion-2-1"

scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")

pipeline = GaudiStableDiffusionPipeline.from_pretrained(
    model_name,
    scheduler=scheduler,
    use_habana=True,
    use_hpu_graphs=True,
    gaudi_config="Habana/stable-diffusion-2",
)

outputs = pipeline(
    ["An image of a squirrel in Picasso style"],
    num_images_per_prompt=10,
    batch_size=2,
    height=768,
    width=768,
)

Stable Diffusion 2 有两个不同的检查点

超分辨率

Stable Diffusion 放大器扩散模型由 CompVis、Stability AI 和 LAION 的研究人员和工程师创建。它用于将输入图像的分辨率提高 4 倍。

有关更多信息,请参阅此处

如何放大低分辨率图像?

要在 Gaudi 上使用 Stable Diffusion Upscale 生成 RGB 和深度图像,您需要实例化两个实例

  • 一个使用 GaudiStableDiffusionUpscalePipeline 的管道。
  • 一个使用 GaudiDDIMScheduler 的调度器。此调度器已针对 Gaudi 进行了优化。

初始化管道时,您必须指定 use_habana=True 以将其部署在 HPU 上。此外,为了获得最快的生成速度,您应该使用 use_hpu_graphs=True 启用 HPU 图。最后,您需要指定一个 Gaudi 配置,该配置可以从 Hugging Face Hub 下载。

import requests
from io import BytesIO
from optimum.habana.diffusers import (
    GaudiDDIMScheduler,
    GaudiStableDiffusionUpscalePipeline,
)
from optimum.habana.utils import set_seed
from PIL import Image

set_seed(42)

model_name_upscale = "stabilityai/stable-diffusion-x4-upscaler"
scheduler = GaudiDDIMScheduler.from_pretrained(model_name_upscale, subfolder="scheduler")
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
response = requests.get(url)
low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
low_res_img = low_res_img.resize((128, 128))
low_res_img.save("low_res_cat.png")
prompt = "a white cat"

pipeline = GaudiStableDiffusionUpscalePipeline.from_pretrained(
    model_name_upscale,
    scheduler=scheduler,
    use_habana=True,
    use_hpu_graphs=True,
    gaudi_config="Habana/stable-diffusion",
)
upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
upscaled_image.save("upsampled_cat.png")

提示

为了加速您的 Stable Diffusion 管道,您可以以完整的 bfloat16 精度运行它。 这也将节省内存。 您只需在实例化管道时将 torch_dtype=torch.bfloat16 传递给 from_pretrained 即可。 这是操作方法

import torch

pipeline = GaudiStableDiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    scheduler=scheduler,
    use_habana=True,
    use_hpu_graphs=True,
    gaudi_config="Habana/stable-diffusion",
    torch_dtype=torch.bfloat16
)

文本反演微调

文本反演是一种使用仅 3-5 个示例在您自己的图像上个性化文本到图像模型(如 Stable Diffusion)的方法。

您可以在此处找到实现此训练方法的示例脚本。

< > 在 GitHub 上更新