Diffusers documentation

Tổng quan

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Tổng quan

Việc suy luận mô hình khuếch tán (diffusion) tốn nhiều tài nguyên tính toán, và bạn thường phải chạy DiffusionPipeline nhiều lần trước khi hài lòng với kết quả. Trang này cung cấp cái nhìn tổng quan về các kỹ thuật tối ưu hóa chính của Diffusers, chúng hoạt động như thế nào và khi nào nên sử dụng chúng.

Lộ trình khởi đầu

Khi model vừa trên một GPU, hãy bắt đầu với cấu hình tải cơ sở này. Đặt dtype và đặt pipeline trên một accelerator. Chỉ sử dụng model CPU offload khi bộ nhớ bị hạn chế. Bạn cũng có thể tăng tốc suy luận bằng cách giảm số bước hoặc dùng một scheduler nhanh hơn.

Khi bạn bỏ qua dtype, Diffusers sẽ nạp các thành phần ở float32. Hãy truyền dtype=torch.bfloat16 (hoặc torch.float16 nếu bfloat16 không được hỗ trợ), sau đó đặt pipeline lên bộ tăng tốc bằng pipeline.to("cuda").

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    dtype=torch.bfloat16,
)
pipeline.to("cuda")  # or "mps", "xpu"

prompt = """
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
"""
pipeline(prompt).images[0]

Nếu pipeline không vừa, hoặc bộ nhớ đang hạn chế, hãy gọi enable_model_cpu_offload() thay vì giữ mọi thứ trên GPU. Hàm này đặt model đang hoạt động lên GPU và giữ các thành phần khác trên CPU.

Bỏ qua khi mô hình vừa đủ bộ nhớ. Việc offload sẽ chậm hơn khi bạn không cần đến nó.

Để biết thêm các tùy chọn offloading, hãy xem Giảm mức sử dụng bộ nhớ.

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    dtype=torch.bfloat16,
)
pipeline.enable_model_cpu_offload()

Giảm độ trễ bằng cách sử dụng ít num_inference_steps hơn hoặc một trình lập lịch nhanh hơn như DPMSolverMultistepScheduler. Điều đó thường giúp tăng tốc độ tạo ảnh nhưng có thể làm giảm chất lượng hình ảnh so với một trình lập lịch chậm hơn, chất lượng cao hơn. Xem Các kỹ thuật tối ưu hóa bên dưới để biết thêm các kỹ thuật tăng tốc.

import time
from diffusers import DPMSolverMultistepScheduler

pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)

start_time = time.perf_counter()
image = pipeline(prompt, num_inference_steps=25).images[0]
end_time = time.perf_counter()

print(f"Image generation took {end_time - start_time:.3f} seconds")

Kỹ thuật tối ưu

Khi đường dẫn khởi đầu không đủ, hãy sử dụng các kỹ thuật sau. Nếu suy luận quá chậm, hãy bắt đầu với torch.compile, bộ nhớ đệm hoặc các backend chú ý. Nếu bạn hết bộ nhớ, hãy bắt đầu với việc offload hoặc lượng tử hóa.

Suy luận nhanh hơn:

  • torch.compile — Biên dịch UNet, transformer hoặc VAE thành các kernel tối ưu.
  • Biên dịch theo vùng — Biên dịch các khối lặp lại để giảm độ trễ khởi động lạnh của torch.compile và tái sử dụng các sản phẩm đã biên dịch.
  • Caching — Tái sử dụng các giá trị trung gian giữa các bước khử nhiễu khi bạn muốn tăng tốc độ và có thể chấp nhận tốn thêm bộ nhớ.
  • Các backend Attention — Thay thế các cài đặt attention của Diffusers thông qua một API thống nhất khi attention là nút thắt cổ chai.
  • Kernels — Nạp các kernel tính toán tối ưu từ Hub (attention và các op CUDA tùy chỉnh như RMSNorm hoặc RoPE) khi bạn cần tăng tốc cụ thể cho phần cứng vượt ra ngoài khả năng của PyTorch mặc định.

Ít bộ nhớ hơn:

  • Offloading — Di chuyển các mô hình hoặc lớp không hoạt động sang CPU bằng cách offloading CPU, mô hình hoặc nhóm.
  • Lượng tử hóa — Nạp các trọng số nhỏ hơn để giảm bộ nhớ (một số backend cũng tăng tốc suy luận). GGUF là điểm khởi đầu phổ biến.
  • VAE slicing và VAE tiling — Giải mã các lô lớn hoặc ảnh độ phân giải cao theo từng phần để giảm bộ nhớ đỉnh.

Cả hai:

Update on GitHub