Diffusers documentation

Quanto

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

Quanto

Quanto arka ucu kullanımdan kaldırılmıştır ve 1.0.0 sürümünde kaldırılacaktır. bitsandbytes veya torchao gibi diğer desteklenen kuantizasyon arka uçlarından birine geçmeyi düşünün.

Quanto, Optimum için bir PyTorch kuantizasyon arka ucudur. Çok yönlülük ve sadelik göz önünde bulundurularak tasarlanmıştır:

  • Tüm özellikler, acil modda (eager mode) kullanılabilir (izlenemeyen modellerle çalışır)
  • Kuantizasyon farkındalıklı eğitimi destekler
  • Kantize modeller torch.compile ile uyumludur
  • Quantize edilmiş modeller cihazdan bağımsızdır (ör. CUDA, XPU, MPS, CPU)

Quanto arka ucunu kullanabilmek için öncelikle optimum-quanto>=0.2.6 ve accelerate paketlerini yüklemeniz gerekir.

pip install optimum-quanto accelerate

Artık QuantoConfig nesnesini from_pretrained() metoduna geçirerek bir modeli kuantize edebilirsiniz. Quanto kütüphanesi nn.Conv2d ve nn.LayerNorm modüllerini kuantize etmeye izin verse de, Diffusers şu anda yalnızca bir modeldeki nn.Linear katmanlarındaki ağırlıkların kuantize edilmesini desteklemektedir. Aşağıdaki kod parçası, Quanto ile float8 kuantizasyonunun nasıl uygulanacağını göstermektedir.

import torch
from diffusers import FluxTransformer2DModel, QuantoConfig

model_id = "black-forest-labs/FLUX.1-dev"
quantization_config = QuantoConfig(weights_dtype="float8")
transformer = FluxTransformer2DModel.from_pretrained(
      model_id,
      subfolder="transformer",
      quantization_config=quantization_config,
      dtype=torch.bfloat16,
)

pipe = FluxPipeline.from_pretrained(model_id, transformer=transformer, dtype=dtype)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A cat holding a sign that says hello world"
image = pipe(
    prompt, num_inference_steps=50, guidance_scale=4.5, max_sequence_length=512
).images[0]
image.save("output.png")

Belirli modüllerde Kuantizasyonu Atlayın

QuantoConfig içindeki modules_to_not_convert argümanını kullanarak belirli modüller üzerinde kuantizasyon uygulamasını atlamak mümkündür. Lütfen bu argümana geçirilen modüllerin state_dict içindeki modüllerin anahtarlarıyla eşleştiğinden emin olun.

import torch
from diffusers import FluxTransformer2DModel, QuantoConfig

model_id = "black-forest-labs/FLUX.1-dev"
quantization_config = QuantoConfig(weights_dtype="float8", modules_to_not_convert=["proj_out"])
transformer = FluxTransformer2DModel.from_pretrained(
      model_id,
      subfolder="transformer",
      quantization_config=quantization_config,
      dtype=torch.bfloat16,
)

Quanto Arka Ucu ile from_single_file Kullanımı

QuantoConfig, ~FromOriginalModelMixin.from_single_file ile uyumludur.

import torch
from diffusers import FluxTransformer2DModel, QuantoConfig

ckpt_path = "https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/flux1-dev.safetensors"
quantization_config = QuantoConfig(weights_dtype="float8")
transformer = FluxTransformer2DModel.from_single_file(ckpt_path, quantization_config=quantization_config, dtype=torch.bfloat16)

Kantize Edilmiş Modellerin Kaydedilmesi

Diffusers, ~ModelMixin.save_pretrained yöntemi kullanılarak Quanto modellerini serialize etmeyi destekler.

Doğrudan Quanto kütüphanesiyle nicelleştirilen modeller ile Diffusers kullanılarak Quanto arka uç olarak nicelleştirilen modeller için seri hale getirme ve yükleme gereksinimleri farklıdır. Şu anda, doğrudan Quanto ile nicelleştirilen modelleri ~ModelMixin.from_pretrained kullanarak Diffusers'a yüklemek mümkün değildir.

import torch
from diffusers import FluxTransformer2DModel, QuantoConfig

model_id = "black-forest-labs/FLUX.1-dev"
quantization_config = QuantoConfig(weights_dtype="float8")
transformer = FluxTransformer2DModel.from_pretrained(
      model_id,
      subfolder="transformer",
      quantization_config=quantization_config,
      dtype=torch.bfloat16,
)
# save quantized model to reuse
transformer.save_pretrained("<your quantized model save path>")

# you can reload your quantized model with
model = FluxTransformer2DModel.from_pretrained("<your quantized model save path>")

Quanto ile torch.compile kullanımı

Şu anda Quanto arka ucu aşağıdaki kuantizasyon türleri için torch.compile desteklemektedir:

  • int8 ağırlıkları
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, QuantoConfig

model_id = "black-forest-labs/FLUX.1-dev"
quantization_config = QuantoConfig(weights_dtype="int8")
transformer = FluxTransformer2DModel.from_pretrained(
    model_id,
    subfolder="transformer",
    quantization_config=quantization_config,
    dtype=torch.bfloat16,
)
transformer = torch.compile(transformer, mode="max-autotune", fullgraph=True)

pipe = FluxPipeline.from_pretrained(
    model_id, transformer=transformer, dtype=dtype
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"
images = pipe("A cat holding a sign that says hello").images[0]
images.save("flux-quanto-compile.png")

Desteklenen Kuantizasyon Türleri

Ağırlıklar

  • float8
  • int8
  • int4
  • int2
Update on GitHub