Buckets:
Başlangıç
Kantizasyon, orijinal verinin hassasiyetini korumaya çalışırken veriyi daha az bit ile temsil etmeye odaklanır. Bu genellikle, aynı bilgiyi daha az bit ile temsil etmek için bir veri türünü dönüştürmek anlamına gelir. Örneğin, model ağırlıklarınız 32 bit kayan nokta olarak saklanıyor ve 16 bit kayan nokta olarak kantize ediliyorsa, bu model boyutunu yarıya indirir; bu da depolamayı kolaylaştırır ve bellek kullanımını azaltır. Daha düşük hassasiyet, daha az bit ile hesaplamaların yapılması daha az zaman aldığı için çıkarımı da hızlandırabilir.
Diffusers, Flux gibi büyük difüzyon modellerinin daha erişilebilir hale getirilmesi için birden fazla kuantizasyon arka ucunu destekler. Bu kılavuz, bir pipeline'ın önceden eğitilmiş veya kuantize edilmemiş bir checkpoint'ten başlatılırken PipelineQuantizationConfig sınıfını kullanarak nasıl kuantize edileceğini gösterir.
Hattın seviyesinde kuantizasyon
Kantizasyon yapılandırmasına ne kadar özelleştirme uygulamak istediğinize bağlı olarak PipelineQuantizationConfig'i kullanmanın iki yolu vardır.
- temel kullanım senaryoları için
quant_backend,quant_kwargsvecomponents_to_quantizeargümanlarını tanımlayın - daha ince ayarlı kuantizasyon kontrolü için, bireysel model bileşenleri için kuantizasyon yapılandırmasını sağlayan bir
quant_mappingtanımlayın
Temel kuantizasyon
Aşağıdaki parametrelerle PipelineQuantizationConfig sınıfını başlatın.
quant_backend, kullanılacak kuantizasyon arka ucunu belirtir. Şu anda desteklenen arka uçlar şunlardır:bitsandbytes_4bit,bitsandbytes_8bit,gguf,quantovetorchao.quant_kwargs, kullanılacak kuantizasyon argümanlarını belirtir.
Bu
quant_kwargsargümanları her backend için farklıdır. Her backend için argümanları görüntülemek için Quantization API belgelerine başvurun.
components_to_quantize, pipeline'in hangi bileşenlerinin (bileşenlerin) kuantize edileceğini belirtir. Genellikle, transformer gibi en yoğun hesaplama gerektiren bileşenleri kuantize etmeniz gerekir. FluxPipeline gibi birden fazla metin kodlayıcı içeren bir pipeline varsa, kuantize edilecek diğer bir bileşen olarak metin kodlayıcıyı da değerlendirmeniz gerekir. Aşağıdaki örnek, FluxPipeline içindeki T5 metin kodlayıcıyı kuantize ederken CLIP modelini olduğu gibi bırakır.components_to_quantize, birden fazla model için bir liste veya tek bir model için bir dize kabul eder.
Aşağıdaki örnek, BitsAndBytesConfig içinden load_in_4bit, bnb_4bit_quant_type ve bnb_4bit_compute_dtype argümanlarıyla bitsandbytes arka ucunu yükler.
import torch
from diffusers import DiffusionPipeline
from diffusers.quantizers import PipelineQuantizationConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={"load_in_4bit": True, "bnb_4bit_quant_type": "nf4", "bnb_4bit_compute_dtype": torch.bfloat16},
components_to_quantize=["transformer", "text_encoder_2"],
)
Hattı (pipeline) nicelleştirmek (quantize) için pipeline_quant_config değerini from_pretrained() fonksiyonuna iletin.
pipe = DiffusionPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
image = pipe("photo of a cute dog").images[0]
Gelişmiş kuantizasyon
quant_mapping argümanı, bir iş akışındaki her bir bileşenin nasıl nicelendirileceğine dair daha fazla seçenek sunar; örneğin farklı nicelendirme altyapılarını birleştirmek gibi.
PipelineQuantizationConfig nesnesini başlatın ve ona bir quant_mapping iletin. quant_mapping, pipeline'daki transformer ve metin kodlayıcı gibi her bir bileşen için kuantizasyon seçeneklerini belirtmenizi sağlar.
Aşağıdaki örnek, transformer ve metin kodlayıcı için iki kuantizasyon arka ucunu, QuantoConfig ve transformers.BitsAndBytesConfig'i kullanır.
import torch
from diffusers import DiffusionPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers.quantization_config import QuantoConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": QuantoConfig(weights_dtype="int8"),
"text_encoder_2": TransformersBitsAndBytesConfig(
load_in_4bit=True, compute_dtype=torch.bfloat16
),
}
)
Transformers içinde ayrı bir bitsandbytes arka ucu bulunur. Transformers'tan gelen bileşenler için transformers.BitsAndBytesConfig içe aktarıp kullanmanız gerekir. Örneğin, FluxPipeline içindeki text_encoder_2, Transformers'tan bir T5EncoderModel olduğu için diffusers.BitsAndBytesConfig yerine transformers.BitsAndBytesConfig kullanmanız gerekir.
Bu ayrı importları yönetmek istemiyorsanız veya her pipeline bileşeninin nereden geldiğinden emin değilseniz, yukarıdaki temel kuantizasyon yöntemini kullanın.
import torch
from diffusers import DiffusionPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16),
"text_encoder_2": TransformersBitsAndBytesConfig(
load_in_4bit=True, compute_dtype=torch.bfloat16
),
}
)
Hattı (pipeline) nicelleştirmek (quantize) için pipeline_quant_config değerini from_pretrained() fonksiyonuna iletin.
pipe = DiffusionPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
image = pipe("photo of a cute dog").images[0]
Önceden kuantize edilmiş kontrol noktalarını yükleme
Bazı kuantizasyon arka uçları, Hub'a zaten kuantize edilmiş olarak yüklenmiş kontrol noktalarını (checkpoint) yüklemeyi destekler. Bu durumda, kuantizasyon yapılandırması modelin config.json dosyasında saklanır ve otomatik olarak okunur — bir PipelineQuantizationConfig oluşturmanıza veya quantization_config argümanını iletmenize gerek yoktur.
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"rootonchair/ERNIE-Image-Turbo-nunchaku-lite-nvfp4",
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
Aşağıdaki arka uçlar, önceden kantlanmış kontrol noktalarını kutudan çıktığı gibi yüklemeyi destekler.
| Arka uç | Notlar |
|---|---|
| bitsandbytes | Config, config.json dosyasında saklanır; ek argüman gerekmez. Hem anlık olarak nicelleştirmeyi hem de önceden nicelleştirilmiş checkpoint'leri yüklemeyi destekler. |
| torchao | Yukarıdakiyle aynı. |
| GGUF | Model sınıflarıyla from_single_file kullanır; pipeline düzeyinde yükleme desteklenmez. |
| BFL | Black Forest Labs fp8r ve nvfp4 tek dosyalık checkpoint'leri from_single_file ile yükler; pipeline düzeyinde yükleme desteklenmez. |
| AutoRound | Yalnızca yükleme desteklenir; önce AutoRound CLI veya Python API ile kuantizasyon yapın. |
| Nunchaku Lite | Config, config.json dosyasında saklanır; kernels paketi gerektirir. Yalnızca yükleme desteklenir. |
| ModelOpt | Yalnızca önceden kuantize edilmiş modellerin yüklenmesi desteklenir. |
| SDNQ | Hem anlık kuantizasyonu hem de önceden kuantize edilmiş modellerin yüklenmesini destekler; sdnq paketini gerektirir. |
Kaynaklar
Quantization hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın.
Eğer kuantizasyona yeniyseniz, DeepLearning.AI iş birliğiyle hazırlanan ve başlangıç seviyesine uygun aşağıdaki kurslara göz atmanızı öneririz.
Yeni bir kuantizasyon yöntemi eklemekle ilgileniyorsanız, Yeni kuantizasyon yöntemi katkı rehberine başvurun.
Transformers kuantizasyonu Genel Bakış sayfası, farklı kuantizleme altyapılarının avantaj ve dezavantajlarına genel bir bakış sunar.
Her bir kuantizasyon arka ucuna kısa bir giriş, bir arka uç seçme yöntemi ve kuantizasyonun diğer bellek optimizasyonlarıyla birleştirilmesi hakkında bilgi için Diffusers'ta Kuantizasyon Arka Uçlarını Keşfetme blog yazısını okuyun.
Xet Storage Details
- Size:
- 11 kB
- Xet hash:
- 818c044e7c802bf51615c51ef2ca01a39ee45094504ac22359ef0d04472f2481
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.