Diffusers 文件

Stable Diffusion XL Turbo

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Stable Diffusion XL Turbo

SDXL Turbo 是一種對抗性時間蒸餾的 Stable Diffusion XL (SDXL) 模型,能夠在短短 1 步內執行推理。

本指南將向您展示如何使用 SDXL-Turbo 進行文字到影像和影像到影像的生成。

開始之前,請確保已安裝以下庫:

# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers transformers accelerate

載入模型檢查點

模型權重可以儲存在 Hub 上或本地的單獨子資料夾中,在這種情況下,您應該使用 from_pretrained() 方法。

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipeline = pipeline.to("cuda")

您還可以使用 from_single_file() 方法從 Hub 或本地載入儲存在單個檔案格式(.ckpt.safetensors)中的模型檢查點。對於此載入方法,您需要設定 timestep_spacing="trailing"(可以隨意嘗試其他排程器配置值以獲得更好的結果)。

from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler
import torch

pipeline = StableDiffusionXLPipeline.from_single_file(
    "https://huggingface.co/stabilityai/sdxl-turbo/blob/main/sd_xl_turbo_1.0_fp16.safetensors",
    torch_dtype=torch.float16, variant="fp16")
pipeline = pipeline.to("cuda")
pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config(pipeline.scheduler.config, timestep_spacing="trailing")

文字到影像

對於文字到影像,傳遞一個文字提示。預設情況下,SDXL Turbo 生成 512x512 影像,該解析度可提供最佳結果。您可以嘗試將 heightwidth 引數設定為 768x768 或 1024x1024,但這樣做可能會導致質量下降。

請務必將 guidance_scale 設定為 0.0 以停用,因為模型未經此引數訓練。單步推理足以生成高質量影像。將步數增加到 2、3 或 4 應該會提高影像質量。

from diffusers import AutoPipelineForText2Image
import torch

pipeline_text2image = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipeline_text2image = pipeline_text2image.to("cuda")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."

image = pipeline_text2image(prompt=prompt, guidance_scale=0.0, num_inference_steps=1).images[0]
image
generated image of a racoon in a robe

影像到影像

對於影像到影像生成,請確保 num_inference_steps * strength 大於或等於 1。影像到影像管道將執行 int(num_inference_steps * strength) 步,例如,在下面的示例中為 0.5 * 2.0 = 1 步。

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image, make_image_grid

# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline_image2image = AutoPipelineForImage2Image.from_pipe(pipeline_text2image).to("cuda")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
init_image = init_image.resize((512, 512))

prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"

image = pipeline_image2image(prompt, image=init_image, strength=0.5, guidance_scale=0.0, num_inference_steps=2).images[0]
make_image_grid([init_image, image], rows=1, cols=2)
Image-to-image generation sample using SDXL Turbo

進一步加速 SDXL Turbo

  • 如果您使用的是 PyTorch 2.0 或更高版本,請編譯 UNet。第一次推理執行會非常慢,但隨後的執行會快得多。
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
  • 使用預設 VAE 時,請將其保持在 float32 中,以避免在每次生成之前和之後進行昂貴的 dtype 轉換。您只需在第一次生成之前執行此操作一次。
pipe.upcast_vae()

作為替代,您還可以使用社群成員 @madebyollin 建立的 16 位 VAE,該 VAE 無需升級到 float32

< > 在 GitHub 上更新

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