# GGUF

Format file GGUF biasanya digunakan untuk menyimpan model untuk inferensi dengan [GGML](https://github.com/ggerganov/ggml) dan mendukung berbagai opsi kuantisasi per blok. Diffusers mendukung pemuatan checkpoint yang telah dikuantisasi sebelumnya dan disimpan dalam format GGUF melalui pemuatan `from_single_file` dengan kelas Model. Pemuatan checkpoint GGUF melalui Pipelines saat ini belum didukung.

Contoh berikut akan memuat model transformer [FLUX.1 DEV](https://huggingface.co/black-forest-labs/FLUX.1-dev) menggunakan varian kuantisasi GGUF Q2_K.

Sebelum memulai, silakan instal gguf di lingkungan Anda

```shell
pip install -U gguf
```

Karena GGUF adalah format file tunggal, gunakan `~FromSingleFileMixin.from_single_file` untuk memuat model dan lewati [GGUFQuantizationConfig](/docs/diffusers/main/id/api/quantization#diffusers.GGUFQuantizationConfig).

Saat menggunakan checkpoint GGUF, bobot terkuantisasi tetap berada dalam `dtype` memori rendah (biasanya `torch.uint8`) dan secara dinamis didekuantisasi serta di-cast ke `compute_dtype` yang dikonfigurasi selama setiap forward pass modul melalui model. `GGUFQuantizationConfig` memungkinkan Anda mengatur `compute_dtype`.

Fungsi yang digunakan untuk dekuantisasi dinamis didasarkan pada karya luar biasa yang dilakukan oleh [city96](https://github.com/city96/ComfyUI-GGUF), yang membuat port Pytorch dari implementasi [`numpy`](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/gguf/quants.py) asli oleh [compilade](https://github.com/compilade).

```python
import torch

from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig

ckpt_path = (
    "https://huggingface.co/city96/FLUX.1-dev-gguf/blob/main/flux1-dev-Q2_K.gguf"
)
transformer = FluxTransformer2DModel.from_single_file(
    ckpt_path,
    quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
    dtype=torch.bfloat16,
)
pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    transformer=transformer,
    dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
prompt = "A cat holding a sign that says hello world"
image = pipe(prompt, generator=torch.manual_seed(0)).images[0]
image.save("flux-gguf.png")
```

## Menggunakan Kernel CUDA yang Dioptimalkan dengan GGUF

Kernel CUDA yang dioptimalkan dapat mempercepat inferensi model kuantisasi GGUF sekitar 10%. Fungsi ini memerlukan GPU yang kompatibel dengan `torch.cuda.get_device_capability` lebih dari 7 dan pustaka kernel:

```shell
pip install -U kernels
```

Setelah terpasang, atur `DIFFUSERS_GGUF_CUDA_KERNELS=true` untuk menggunakan kernel yang dioptimalkan saat tersedia. Perhatikan bahwa kernel CUDA dapat memperkenalkan perbedaan numerik kecil dibandingkan implementasi GGUF asli, yang berpotensi menyebabkan variasi visual halus pada gambar yang dihasilkan. Untuk menonaktifkan penggunaan kernel CUDA, atur variabel lingkungan `DIFFUSERS_GGUF_CUDA_KERNELS=false`.

Kernel GGUF diunduh dari repositori [`Isotr0py/ggml`](https://huggingface.co/Isotr0py/ggml), yang penerbitnya bukan penerbit kernel yang tepercaya di Hub. Memuatnya akan mengunduh dan mengeksekusi kode dari Hub, sehingga Diffusers mengharuskan Anda untuk secara eksplisit mengaktifkannya dengan mengatur `DIFFUSERS_TRUST_REMOTE_KERNELS=true`. Lihat [Mengpercayaan kernel jarak jauh](../optimization/attention_backends#trusting-remote-kernels) untuk detailnya.

## Jenis Kuantisasi yang Didukung

- BF16
- Q4_0
- Q4_1
- Q5_0
- Q5_1
- Q8_0
- Q2_K
- Q3_K
- Q4_K
- Q5_K
- Q6_K

## Konversi ke GGUF

Gunakan Space di bawah untuk mengonversi checkpoint Diffusers ke format GGUF untuk inferensi. jalankan konversi:

<iframe src="https://diffusers-internal-dev-diffusers-to-gguf.hf.space" frameborder="0" width="850" height="450"
>

```py
import torch

from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig

ckpt_path = (
    "https://huggingface.co/sayakpaul/different-lora-from-civitai/blob/main/flux_dev_diffusers-q4_0.gguf"
)
transformer = FluxTransformer2DModel.from_single_file(
    ckpt_path,
    quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
    config="black-forest-labs/FLUX.1-dev",
    subfolder="transformer",
    dtype=torch.bfloat16,
)
pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    transformer=transformer,
    dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
prompt = "A cat holding a sign that says hello world"
image = pipe(prompt, generator=torch.manual_seed(0)).images[0]
image.save("flux-gguf.png")
```

Saat menggunakan checkpoint GGUF format Diffusers, Anda wajib menyediakan path `config` model. Jika config model berada di `subfolder`, hal tersebut juga harus ditentukan.

