Buckets:

mishig's picture
|
download
raw
5.33 kB

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 Backend 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 kuantize edilen modeller ile Diffusers kullanılarak Quanto arka uç olarak kullanılan modeller için seri hale getirme ve yükleme gereksinimleri farklıdır. Şu anda, doğrudan Quanto ile kuantize edilen 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

Xet Storage Details

Size:
5.33 kB
·
Xet hash:
5cd093bde4090526d904fc0b5fe61a000aaf09cf74e70644feebf26ee389ef58

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.