Diffusers documentation

GGUF

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GGUF

GGUFファイル形式は、GGMLによる推論用のモデルを保存するために一般的に使用され、ブロック単位の量子化オプションを多数サポートしています。Diffusersは、Modelクラスによるfrom_single_file読み込みを通じて、GGUF形式で事前量子化・保存されたチェックポイントの読み込みをサポートしています。Pipelines経由でのGGUFチェックポイントの読み込みは現在サポートされていません。

次の例では、FLUX.1 DEV transformer モデルを、GGUF Q2_K 量子化バリアントを使用して読み込みます。

開始する前に、環境にggufをインストールしてください

pip install -U gguf

GGUFは単一ファイル形式であるため、~FromSingleFileMixin.from_single_fileを使用してモデルを読み込み、GGUFQuantizationConfigを渡します。

GGUF チェックポイントを使用する場合、量子化された重みは低メモリ dtype(通常は torch.uint8)のまま保持され、モデル内の各モジュールのフォワードパスのたびに動的にデ量子化され、設定された compute_dtype にキャストされます。GGUFQuantizationConfig を使用すると、compute_dtype を設定できます。

動的デクアンティ化に使用される関数は、compilade による元の numpy 実装の PyTorch 移植版を作成した city96 の素晴らしい取り組みに基づいています。

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での最適化されたCUDAカーネルの使用

最適化された CUDA カーネルにより、GGUF 量子化モデルの推論を約 10% 高速化できます。この機能には、torch.cuda.get_device_capability が 7 より大きい互換性のある GPU とカーネルライブラリが必要です:

pip install -U kernels

インストールが完了したら、利用可能な場合は最適化されたカーネルを使用するために DIFFUSERS_GGUF_CUDA_KERNELS=true を設定してください。なお、CUDA カーネルは元の GGUF 実装と比較してわずかな数値上の差異を生じさせる可能性があり、生成される画像に微細な視覚的な変化をもたらす場合があります。CUDA カーネルの使用を無効にするには、環境変数 DIFFUSERS_GGUF_CUDA_KERNELS=false を設定してください。

GGUF カーネルは、Isotr0py/ggml リポジトリからダウンロードされます。このリポジトリの公開者は、Hub 上で信頼できるカーネル公開者ではありません。このカーネルを読み込むと、Hub からコードをダウンロードして実行するため、Diffusers では DIFFUSERS_TRUST_REMOTE_KERNELS=true を設定して明示的にオプトインする必要があります。詳細は リモートカーネルの信頼 を参照してください。

サポートされている量子化タイプ

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

GGUFに変換

以下の Space を使用して、Diffusers のチェックポイントを推論用の GGUF 形式に変換します。 変換を実行:

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形式のGGUFチェックポイントを使用する場合は、モデルのconfigパスを指定する必要があります。モデルのconfigがsubfolder内に存在する場合は、それも指定する必要があります。

Update on GitHub