Diffusers documentation

GGUF

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GGUF

Format file GGUF biasanya digunakan untuk menyimpan model untuk inferensi dengan 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 menggunakan varian kuantisasi GGUF Q2_K.

Sebelum memulai, silakan instal gguf di lingkungan Anda

pip install -U gguf

Karena GGUF adalah format file tunggal, gunakan ~FromSingleFileMixin.from_single_file untuk memuat model dan lewati 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, yang membuat port Pytorch dari implementasi numpy asli oleh compilade.

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:

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, 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 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:

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.

Update on GitHub