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

El formato de archivo GGUF se utiliza típicamente para almacenar modelos para inferencia con GGML y admite una variedad de opciones de cuantización por bloques. Diffusers admite la carga de puntos de control precuantizados y guardados en el formato GGUF mediante la carga con from_single_file en las clases de Modelo. La carga de puntos de control GGUF a través de Pipelines no está soportada actualmente.

El siguiente ejemplo cargará el modelo transformer FLUX.1 DEV utilizando la variante de cuantización GGUF Q2_K.

Antes de comenzar, instale gguf en su entorno

pip install -U gguf

Dado que GGUF es un formato de archivo único, use ~FromSingleFileMixin.from_single_file para cargar el modelo y pase GGUFQuantizationConfig.

Al usar puntos de control GGUF, los pesos cuantizados permanecen en un dtype de baja memoria (típicamente torch.uint8) y se descuantizan dinámicamente y se convierten al compute_dtype configurado durante el paso hacia adelante de cada módulo a través del modelo. La GGUFQuantizationConfig permite establecer el compute_dtype.

Las funciones utilizadas para la descuantización dinámica se basan en el gran trabajo realizado por city96, quien creó las portadas a Pytorch de la implementación original en numpy 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")

Uso de núcleos CUDA optimizados con GGUF

Los kernels de CUDA optimizados pueden acelerar la inferencia de modelos cuantizados en formato GGUF en aproximadamente un 10%. Esta funcionalidad requiere una GPU compatible con torch.cuda.get_device_capability mayor que 7 y la biblioteca de kernels:

pip install -U kernels

Una vez instalado, establece DIFFUSERS_GGUF_CUDA_KERNELS=true para usar kernels optimizados cuando estén disponibles. Ten en cuenta que los kernels de CUDA pueden introducir pequeñas diferencias numéricas en comparación con la implementación original de GGUF, lo que podría causar variaciones visuales sutiles en las imágenes generadas. Para deshabilitar el uso de kernels de CUDA, establece la variable de entorno DIFFUSERS_GGUF_CUDA_KERNELS=false.

Los kernels GGUF se descargan del repositorio Isotr0py/ggml, cuyo editor no es un editor de kernels de confianza en el Hub. Al cargarlo, se descarga y ejecuta código desde el Hub, por lo que Diffusers requiere que aceptes explícitamente esta acción estableciendo DIFFUSERS_TRUST_REMOTE_KERNELS=true. Consulta Confianza en kernels remotos para más detalles.

Tipos de cuantización admitidos

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

Convertir a GGUF

Utilice el Space de abajo para convertir un checkpoint de Diffusers al formato GGUF para inferencia. ejecutar conversión:

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

Al usar puntos de control GGUF en formato Diffusers, es obligatorio proporcionar la ruta de la config del modelo. Si la configuración del modelo se encuentra en una subfolder, también se debe especificar.

Update on GitHub