Optimum 文件

Stable Diffusion

您正在檢視的是需要從原始碼安裝。如果您想透過 pip 進行常規安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Stable Diffusion

Stable Diffusion 是一個文字到影像的潛在擴散模型。檢視此部落格文章瞭解更多資訊。

如何生成影像?

要在 Gaudi 上使用 Stable Diffusion 生成影像,您需要例項化兩個例項

  • 一個使用 GaudiStableDiffusionPipeline 的 pipeline。此 pipeline 支援*文字到影像生成*。
  • 一個使用 GaudiDDIMScheduler 的 scheduler。此 scheduler 已針對 Gaudi 進行了最佳化。

初始化 pipeline 時,您必須指定 use_habana=True 才能將其部署在 HPU 上。此外,為了獲得最快的生成速度,您應該使用 use_hpu_graphs=True 啟用 **HPU 圖**。最後,您需要指定一個可以從 Hugging Face Hub 下載的Gaudi 配置

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",
)

然後,您可以呼叫 pipeline 從一個或多個提示生成影像

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 倉庫中提供的示例

Stable Diffusion 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` 的 pipeline。
  • 一個使用 GaudiDDIMScheduler 的 scheduler。此 scheduler 已針對 Gaudi 進行了最佳化。

初始化 pipeline 時,您必須指定 use_habana=True 才能將其部署在 HPU 上。此外,為了獲得最快的生成速度,您應該使用 use_hpu_graphs=True 啟用 **HPU 圖**。最後,您需要指定一個可以從 Hugging Face Hub 下載的Gaudi 配置

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 pipeline,您可以以全 `bfloat16` 精度執行它。這還可以節省記憶體。您只需在例項化 pipeline 時將 `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 等 text2image 模型的方法。

您可以在此處找到實現此訓練方法的示例指令碼。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.