# Ikhtisar

Inferensi difusi sangat mahal secara komputasi, dan Anda sering kali menjalankan [DiffusionPipeline](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline) lebih dari sekali sebelum menyukai hasilnya. Halaman ini memberikan gambaran umum tentang teknik optimasi Diffusers utama, apa yang dilakukan, dan kapan harus menggunakannya.

## Jalur pemula

Ketika model muat di satu GPU, mulai dengan beban dasar ini. Atur `dtype` dan letakkan pipeline di akselerator. Gunakan model CPU offload hanya ketika memori terbatas. Anda juga bisa mempercepat inferensi dengan langkah yang lebih sedikit atau scheduler yang lebih cepat.

Saat Anda mengabaikan `dtype`, Diffusers memuat komponen dalam `float32`. Sampaikan `dtype=torch.bfloat16` (atau `torch.float16` jika bfloat16 tidak didukung), lalu letakkan pipeline pada akselerator dengan `pipeline.to("cuda")`.

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

Jika pipeline tidak muat, atau memori terbatas, panggil [enable_model_cpu_offload()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) alih-alih menyimpan semuanya di GPU. Fungsi ini menempatkan model aktif di GPU dan menyimpan komponen lainnya di CPU.

Lewati langkah ini jika model muat. Offloading lebih lambat jika tidak diperlukan.

Untuk lebih banyak opsi offloading, lihat [Kurangi penggunaan memori](./memory#offloading).

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

Latensi lebih rendah dengan `num_inference_steps` yang lebih sedikit atau scheduler yang lebih cepat seperti [DPMSolverMultistepScheduler](/docs/diffusers/main/id/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler). Hal itu biasanya mempercepat proses generasi, tetapi dapat mengurangi kualitas gambar dibandingkan scheduler yang lebih lambat namun berkualitas lebih tinggi. Lihat [teknik optimasi](#optimization-techniques) di bawah untuk teknik kecepatan lainnya.

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

## Teknik optimasi

Ketika jalur awal tidak cukup, gunakan teknik-teknik ini. Jika inferensi terlalu lambat, mulai dengan `torch.compile`, caching, atau backend attention. Jika Anda kehabisan memori, mulai dengan offloading atau kuantisasi.

Inferensi yang lebih cepat:

- [torch.compile](./fp16#torchcompile) — Mengompilasi UNet, transformer, atau VAE menjadi kernel yang dioptimalkan.
- [Kompilasi regional](./fp16#regional-compilation) — Kompilasi blok yang berulang untuk memangkas latensi cold-start `torch.compile` dan menggunakan kembali artefak yang dikompilasi.
- [Caching](./cache) — Memanfaatkan kembali nilai perantara di antara langkah-langkah denoising ketika Anda menginginkan kecepatan lebih tinggi dan dapat mengalokasikan memori lebih banyak.
- [Backend perhatian](./attention_backends) — Ganti implementasi perhatian Diffusers melalui API terpadu ketika perhatian menjadi hambatan utama.
- [Kernels](./fp16#kernels) — Muat kernel komputasi Hub yang dioptimalkan (attention dan operasi CUDA khusus seperti RMSNorm atau RoPE) ketika Anda membutuhkan percepatan spesifik perangkat keras di luar PyTorch standar.

Memori lebih sedikit:

- [Offloading](./memory#offloading) — Pindahkan model atau lapisan yang tidak aktif ke CPU dengan offloading CPU, model, atau grup.
- [Kuantisasi](../quantization/overview) — Muat bobot yang lebih kecil untuk memangkas memori (beberapa backend juga mempercepat inferensi). [GGUF](../quantization/gguf) adalah titik awal yang umum.
- [VAE slicing](./memory#vae-slicing) dan [VAE tiling](./memory#vae-tiling) — Dekode batch besar atau gambar resolusi tinggi secara bertahap untuk menurunkan memori puncak.

Keduanya:

- [Kuantisasi, kompilasi, dan offload](./speed-memory-optims) — Gabungkan kuantisasi, `torch.compile`, dan offloading ketika satu teknik saja tidak cukup.

