# GGUF

GGUF dosya biçimi, genellikle [GGML](https://github.com/ggerganov/ggml) ile çıkarım için modelleri depolamak üzere kullanılır ve çeşitli blok bazlı kuantizasyon seçeneklerini destekler. Diffusers, Model sınıflarıyla `from_single_file` yükleme yoluyla GGUF biçiminde önceden kuantize edilmiş ve kaydedilmiş kontrol noktalarını yüklemeyi destekler. Pipelines üzerinden GGUF kontrol noktalarını yükleme şu anda desteklenmemektedir.

Aşağıdaki örnek, [FLUX.1 DEV](https://huggingface.co/black-forest-labs/FLUX.1-dev) dönüştürücü modelini GGUF Q2_K kuantizasyon varyantı kullanarak yükleyecektir.

Başlamadan önce lütfen ortamınıza gguf paketini yükleyin

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

GGUF tek dosya formatı olduğu için modeli yüklemek için `~FromSingleFileMixin.from_single_file` kullanın ve [GGUFQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.GGUFQuantizationConfig) parametresini iletin.

GGUF checkpoint'leri kullanıldığında, kuantize ağırlıklar düşük bellek `dtype`'inde (genellikle `torch.uint8`) kalır ve modeldeki her modülün ileri geçişinde dinamik olarak dequantize edilip yapılandırılan `compute_dtype`'ye dönüştürülür. `GGUFQuantizationConfig`, `compute_dtype`'yi ayarlamanıza olanak tanır.

Dinamik dequantizatasyon için kullanılan işlevler, [compilade](https://github.com/compilade) tarafından oluşturulan orijinal [`numpy`](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/gguf/quants.py) uygulamasının Pytorch portlarını hazırlayan [city96](https://github.com/city96/ComfyUI-GGUF)'nın mükemmel çalışmasına dayanmaktadır.

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

## GGUF ile Optimize Edilmiş CUDA Çekirdekleri Kullanma

Optimize edilmiş CUDA çekirdekleri, GGUF kuantize edilmiş model çıkarımını yaklaşık %10 hızlandırabilir. Bu işlev, `torch.cuda.get_device_capability` değeri 7'den büyük olan uyumlu bir GPU ve çekirdekler kütüphanesini gerektirir:

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

Kurulum tamamlandıktan sonra, kullanılabilir olduğunda optimize çekirdekleri kullanmak için `DIFFUSERS_GGUF_CUDA_KERNELS=true` değerini ayarlayın. CUDA çekirdeklerinin, orijinal GGUF uygulamasına kıyasla küçük sayısal farklılıklara yol açabileceğini ve bu durumun üretilen görsellerde ince görsel farklılıklara neden olabileceğini unutmayın. CUDA çekirdeği kullanımını devre dışı bırakmak için `DIFFUSERS_GGUF_CUDA_KERNELS=false` ortam değişkenini ayarlayın.

GGUF çekirdekleri, Hub'da güvenilir bir çekirdek yayıncısı olmayan [`Isotr0py/ggml`](https://huggingface.co/Isotr0py/ggml) deposundan indirilir. Bu çekirdeği yüklemek, Hub'dan kod indirmesini ve çalıştırmasını gerektirdiğinden Diffusers, `DIFFUSERS_TRUST_REMOTE_KERNELS=true` değerini ayarlayarak açıkça onay vermenizi ister. Ayrıntılar için [Uzak çekirdekleri güvenme](../optimization/attention_backends#trusting-remote-kernels) bölümüne bakın.

## Desteklenen Kuantizasyon Türleri

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

## GGUF'e dönüştür

Aşağıdaki Space'i kullanarak bir Diffusers kontrol noktasını çıkarım için GGUF biçimine dönüştürün. dönüştürmeyi çalıştırın:

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

Diffusers biçimindeki GGUF checkpoint'lerini kullanırken, model `config` yolunu belirtmek zorunludur. Model config dosyası bir `subfolder` içindeyse, bu da ayrıca belirtilmelidir.

