# SDXL Turbo

Stable Diffusion XL (SDXL) Turbo diusulkan dalam [Adversarial Diffusion Distillation](https://stability.ai/research/adversarial-diffusion-distillation) oleh Axel Sauer, Dominik Lorenz, Andreas Blattmann, dan Robin Rombach.

Abstrak dari makalah tersebut adalah:

*Kami memperkenalkan Adversarial Diffusion Distillation (ADD), sebuah pendekatan pelatihan baru yang secara efisien melakukan sampling pada model difusi gambar foundational berskala besar hanya dalam 1–4 langkah sambil mempertahankan kualitas gambar yang tinggi. Kami menggunakan score distillation untuk memanfaatkan model difusi gambar off-the-shelf berskala besar sebagai sinyal guru, dikombinasikan dengan adversarial loss untuk memastikan fidelitas gambar yang tinggi bahkan dalam rezim langkah rendah, yaitu satu atau dua langkah sampling. Analisis kami menunjukkan bahwa model kami secara jelas melampaui metode few-step yang ada (GAN, Latent Consistency Models) dalam satu langkah dan mencapai kinerja model difusi state-of-the-art (SDXL) hanya dalam empat langkah. ADD adalah metode pertama yang membuka jalan bagi sintesis gambar real-time dalam satu langkah dengan model foundational.*

## Tips

- SDXL Turbo menggunakan arsitektur yang persis sama dengan [SDXL](./stable_diffusion_xl), yang berarti ia juga memiliki API yang sama. Silakan merujuk pada referensi API [SDXL](./stable_diffusion_xl) untuk detail lebih lanjut.
- SDXL Turbo harus menonaktifkan skala panduan dengan mengatur `guidance_scale=0.0`.
- SDXL Turbo harus menggunakan `timestep_spacing='trailing'` untuk scheduler dan menggunakan antara 1 hingga 4 langkah.
- SDXL Turbo telah dilatih untuk menghasilkan gambar berukuran 512x512.
- SDXL Turbo bersifat open-access, tetapi bukan open-source, yang berarti Anda mungkin perlu membeli lisensi model untuk menggunakannya dalam aplikasi komersial. Pastikan untuk membaca [model card resmi](https://huggingface.co/stabilityai/sdxl-turbo) untuk mempelajari lebih lanjut.

> [!TIP]
> Lihat organisasi [Stability AI](https://huggingface.co/stabilityai) di Hub untuk checkpoint model base dan refiner resmi!

Pastikan Anda telah menginstal pustaka berikut.

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

## Muat checkpoint model

Bobot model mungkin disimpan di subfolder terpisah di Hub atau secara lokal, dalam hal ini, Anda harus menggunakan metode [from_pretrained()](/docs/diffusers/main/id/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained):

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", dtype=torch.float16, variant="fp16")
pipeline = pipeline.to("cuda")  # or "mps", "xpu", "cpu"
```

Anda juga dapat menggunakan metode [from_single_file()](/docs/diffusers/main/id/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) untuk memuat checkpoint model yang disimpan dalam format file tunggal (`.ckpt` atau `.safetensors`) dari Hub atau secara lokal. Untuk metode pemuatan ini, Anda perlu mengatur `timestep_spacing="trailing"` (silakan bereksperimen dengan nilai konfigurasi scheduler lainnya untuk mendapatkan hasil yang lebih baik):

```py
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",
    dtype=torch.float16, variant="fp16")
pipeline = pipeline.to("cuda")  # or "mps", "xpu", "cpu"
pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config(pipeline.scheduler.config, timestep_spacing="trailing")
```

## Teks-ke-gambar

Untuk text-to-image, berikan prompt teks. Secara default, SDXL Turbo menghasilkan gambar 512x512, dan resolusi tersebut memberikan hasil terbaik. Anda dapat mencoba mengatur parameter `height` dan `width` menjadi 768x768 atau 1024x1024, tetapi Anda harus mengharapkan penurunan kualitas saat melakukannya.

Pastikan untuk mengatur `guidance_scale` ke 0.0 untuk menonaktifkannya, karena model dilatih tanpa fitur tersebut. Satu langkah inferensi sudah cukup untuk menghasilkan gambar berkualitas tinggi. Meningkatkan jumlah langkah menjadi 2, 3, atau 4 seharusnya dapat meningkatkan kualitas gambar.

```py
from diffusers import AutoPipelineForText2Image
import torch

pipeline_text2image = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", dtype=torch.float16, variant="fp16")
pipeline_text2image = pipeline_text2image.to("cuda")  # or "mps", "xpu", "cpu"

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

    

## Gambar-ke-gambar

Untuk generasi gambar-ke-gambar, pastikan bahwa `num_inference_steps * strength` lebih besar atau sama dengan 1. Pipeline gambar-ke-gambar akan berjalan selama `int(num_inference_steps * strength)` langkah, misalnya `0.5 * 2.0 = 1` langkah dalam contoh di bawah ini.

```py
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")  # or "mps", "xpu", "cpu"

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

    

## Percepat SDXL Turbo lebih lanjut

- Compile UNet jika Anda menggunakan PyTorch versi 2.0 atau lebih tinggi. Eksekusi inferensi pertama akan sangat lambat, tetapi eksekusi berikutnya akan jauh lebih cepat.

```py
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
```

- Saat menggunakan VAE default, pertahankan dalam `float32` untuk menghindari konversi `dtype` yang mahal sebelum dan sesudah setiap generasi. Anda hanya perlu melakukan ini satu kali sebelum generasi pertama Anda:

```py
pipe.upcast_vae()
```

Sebagai alternatif, Anda juga dapat menggunakan [VAE 16-bit](https://huggingface.co/madebyollin/sdxl-vae-fp16-fix) yang dibuat oleh anggota komunitas [`@madebyollin`](https://huggingface.co/madebyollin) yang tidak perlu di-upcast ke `float32`.

