Diffusers documentation

GGUF

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GGUF

Le format de fichier GGUF est généralement utilisé pour stocker des modèles destinés à l'inférence avec GGML et prend en charge diverses options de quantification par bloc. Diffusers permet de charger des points de contrôle pré-quantifiés et enregistrés au format GGUF via le chargement from_single_file avec les classes de modèle. Le chargement de points de contrôle GGUF via les Pipelines n'est actuellement pas pris en charge.

L'exemple suivant charge le modèle transformer FLUX.1 DEV en utilisant la variante de quantification GGUF Q2_K.

Avant de commencer, veuillez installer gguf dans votre environnement

pip install -U gguf

Étant donné que GGUF est un format de fichier unique, utilisez ~FromSingleFileMixin.from_single_file pour charger le modèle et passez-y GGUFQuantizationConfig.

Lors de l’utilisation de points de contrôle GGUF, les poids quantifiés restent dans un dtype à faible mémoire (généralement torch.uint8) et sont déquantifiés dynamiquement puis convertis dans le compute_dtype configuré lors de chaque passe avant de chaque module à travers le modèle. Le GGUFQuantizationConfig vous permet de définir le compute_dtype.

Les fonctions utilisées pour la déquantisation dynamique sont basées sur le travail remarquable de city96, qui a créé les ports Pytorch de l'implémentation numpy originale de 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")

Utilisation de noyaux CUDA optimisés avec GGUF

Les noyaux CUDA optimisés peuvent accélérer l’inférence des modèles quantifiés GGUF d’environ 10 %. Cette fonctionnalité nécessite un GPU compatible avec torch.cuda.get_device_capability supérieur à 7 et la bibliothèque de noyaux :

pip install -U kernels

Une fois installé, définissez DIFFUSERS_GGUF_CUDA_KERNELS=true pour utiliser des noyaux optimisés lorsque ceux-ci sont disponibles. Notez que les noyaux CUDA peuvent introduire de légères différences numériques par rapport à l’implémentation GGUF originale, ce qui peut entraîner des variations visuelles subtiles dans les images générées. Pour désactiver l’utilisation des noyaux CUDA, définissez la variable d’environnement DIFFUSERS_GGUF_CUDA_KERNELS=false.

Les noyaux GGUF sont téléchargés depuis le dépôt Isotr0py/ggml, dont l’éditeur n’est pas un éditeur de noyaux approuvé sur le Hub. Son chargement télécharge et exécute du code depuis le Hub, Diffusers exige donc que vous activiez explicitement cette option en définissant DIFFUSERS_TRUST_REMOTE_KERNELS=true. Consultez Faire confiance aux noyaux distants pour plus de détails.

Types de quantification pris en charge

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

Convertir en GGUF

Utilisez l'Espace ci-dessous pour convertir un point de contrôle Diffusers au format GGUF pour l'inférence. lancer la conversion :

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

Lors de l’utilisation de points de contrôle GGUF au format Diffusers, il est obligatoire de fournir le chemin du config du modèle. Si la configuration du modèle se trouve dans un subfolder, il faut également le spécifier.

Update on GitHub