Diffusers documentation
Kantizasyon
Kantizasyon
Kantizasyon teknikleri, ağırlıkları ve aktivasyonları 8-bit tamsayılar (int8) gibi daha düşük hassasiyetli veri türleriyle temsil ederek bellek ve hesaplama maliyetlerini azaltır. Bu sayede, normalde belleğe sığdıramayacağınız daha büyük modelleri yükleyebilir ve çıkarımı hızlandırabilirsiniz.
Kantizasyon kılavuzunda modelleri nasıl kantize edeceğinizi öğrenin.
PipelineQuantizationConfig
sınıf diffusers.PipelineQuantizationConfig
< source >( quant_backend: str = Nonequant_kwargs: dict[str, str | float | int | dict] = Nonecomponents_to_quantize: list[str] | str | None = Nonequant_mapping: dict[str, DiffQuantConfigMixin | 'TransformersQuantConfigMixin'] = None )
Parametreler
- quant_backend (
str) — Kullanılacak kuantizasyon arka ucu. Bu seçenek kullanıldığında, arka ucun hemdiffusershem detransformersiçin kullanılabilir olduğu varsayılır. - quant_kwargs (
dict) — Kuantizasyon arka uç sınıfını başlatmak için parametreler. - components_to_quantize (
list) — Nicelendirilecek bir boru hattının bileşenleri. - quant_mapping (
dict) — Pipeline bileşenleri için kullanılacak kuantizasyon özelliklerini tanımlayan eşleme. Bu argüman kullanıldığında, kullanıcılarınquant_backend,quant_kawargsvecomponents_to_quantizedeğerlerini sağlaması beklenmez.
from_pretrained() uygulaması sırasında anlık olarak (on-the-fly) nicelleştirme (quantization) uygulanırken kullanılacak yapılandırma sınıfı.
BFLQuantizationConfig
sınıf diffusers.BFLQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | None = None )
Black Forest Labs tarafından fp8r ve nvfp4 şemalarıyla nicelenmiş kontrol noktalarının yüklenmesi için yapılandırma.
Her iki şema da ~FromSingleFileMixin.from_single_file üzerinden checkpoint'ten okunur; modelin anlık olarak (on the fly) kuantize edilmesi desteklenmez. Bir lineer katman, ağırlığı ölçek tensörleriyle birlikte geldiğinde kuantize edilir:
fp8r:weight,float8_e4m3fntipinde ve[N, K]boyutundadır;weight_scaleise satır başına fp32 ölçeklendirme faktörüdür, boyutu[N]'dur.nvfp4:weight,uint8tipinde ve[N, K/2]boyutludur (bayt başına iki E2M1 değeri),weight_scalebirfloat8_e4m3fnblok ölçeğidir ve boyutu[N, K/16]'dır,weight_scale_2veinput_scaleise küresel ağırlık ölçeğini ve kalibre edilmiş aktivasyon ölçeğini (ModelOpt NVFP4 yerleşimi) içeren fp32 skalerleridir.
BitsAndBytesConfig
sınıf diffusers.BitsAndBytesConfig
< source >( load_in_8bit = Falseload_in_4bit = Falsellm_int8_threshold = 6.0llm_int8_skip_modules = Nonellm_int8_enable_fp32_cpu_offload = Falsellm_int8_has_fp16_weight = Falsebnb_4bit_compute_dtype = Nonebnb_4bit_quant_type = 'fp4'bnb_4bit_use_double_quant = Falsebnb_4bit_quant_storage = None**kwargs )
Parametreler
- load_in_8bit (
bool, isteğe bağlı, varsayılanFalse) — Bu bayrak, LLM.int8() ile 8-bit kuantizasyonu etkinleştirmek için kullanılır. - load_in_4bit (
bool, isteğe bağlı, varsayılanFalse) — Bu bayrak,bitsandbyteskütüphanesinden gelen FP4/NF4 katmanlarıyla Linear katmanlarını değiştirerek 4-bit kuantizasyonu etkinleştirmek için kullanılır. - llm_int8_threshold (
float, isteğe bağlı, varsayılan 6.0) — Bu,LLM.int8() : 8-bit Matrix Multiplication for Transformers at Scalemakalesinde açıklandığı üzere aykırı değer tespiti için aykırı değer eşiğine karşılık gelir: https://huggingface.co/papers/2208.07339 Bu eşiğin üzerindeki herhangi bir gizli durum değeri aykırı değer olarak kabul edilir ve bu değerler üzerindeki işlem fp16 ile yapılır. Değerler genellikle normal dağılıma sahiptir, yani çoğu değer [-3.5, 3.5] aralığındadır, ancak büyük modellerde çok farklı dağılan bazı istisnai sistematik aykırı değerler vardır. Bu aykırı değerler genellikle [-60, -6] veya [6, 60] aralığındadır. Int8 kuantizasyonu, büyüklüğü ~5 olan değerler için iyi çalışır, ancak bunun ötesinde önemli bir performans cezası vardır. İyi bir varsayılan eşik 6'dır, ancak daha kararsız modeller (küçük modeller, ince ayar) için daha düşük bir eşik gerekebilir. - llm_int8_skip_modules (
list[str], isteğe bağlı) — 8-bit'e dönüştürmek istemediğimiz modüllerin açık bir listesi. Bu, Jukebox gibi farklı konumlarda birden fazla başa sahip olan ve bunların son konumda bulunmadığı modeller için faydalıdır. ÖrneğinCausalLMmodellerinde, sonlm_headgenellikle orijinaldtype'inde tutulur. - llm_int8_enable_fp32_cpu_offload (
bool, isteğe bağlı, varsayılanFalse) — Bu bayrak, gelişmiş kullanım senaryoları ve bu özelliğin farkında olan kullanıcılar için kullanılır. Modelinizi farklı parçalara ayırıp bazı parçaları GPU'da int8, bazı parçaları CPU'da fp32 olarak çalıştırmak istiyorsanız bu bayrağı kullanabilirsiniz. Bu,google/flan-t5-xxlgibi büyük modelleri dışa aktarmak (offload) için faydalıdır. Not: int8 işlemleri CPU'da çalıştırılmaz. - llm_int8_has_fp16_weight (
bool, isteğe bağlı, varsayılanFalse) — Bu bayrak, LLM.int8()’i 16 bit ana ağırlıklarla çalıştırır. Bu, geriye yayılım için ağırlıkların ileri geri dönüştürülmesine gerek kalmadığından ince ayar için faydalıdır. - bnb_4bit_compute_dtype (
torch.dtypeor str, isteğe bağlı, varsayılantorch.float32) — Bu, giriş türünden farklı olabilecek hesaplama türünü ayarlar. Örneğin, girdiler fp32 olabilir, ancak hızlandırma için hesaplama bf16 olarak ayarlanabilir. - bnb_4bit_quant_type (
str, isteğe bağlı, varsayılan"fp4") — Bu, bnb.nn.Linear4Bit katmanlarındaki kuantizasyon veri türünü ayarlar. Seçenekler,fp4veyanf4ile belirtilen FP4 ve NF4 veri türleridir. - bnb_4bit_use_double_quant (
bool, isteğe bağlı, varsayılanFalse) — Bu bayrak, ilk kuantizasyondan gelen kuantizasyon sabitlerinin yeniden kuantize edildiği iç içe kuantizasyon için kullanılır. - bnb_4bit_quant_storage (
torch.dtypeveya str, isteğe bağlı, varsayılantorch.uint8) — Bu, kuantize edilmiş 4-bit parametreleri paketlemek için depolama türünü ayarlar. - kwargs (
dict[str, Any], isteğe bağlı) — Yapılandırma nesnesini başlatmak için kullanılacak ek parametreler.
bitsandbytes kullanılarak yüklenmiş bir modelde oynayabileceğiniz tüm olası öznitelikler ve özellikler hakkında bir sarmalayıcı sınıfıdır.
Bu, load_in_8bit veya load_in_4bit yerine geçer; bu nedenle her iki seçenek de birbirini dışlar.
Şu anda yalnızca LLM.int8(), FP4 ve NF4 kuantizasyonunu destekler. bitsandbytes kütüphanesine daha fazla yöntem eklenirse, bu sınıfa da daha fazla argüman eklenir.
Model kuantize edilebilirse True, aksi halde False döndürür.
Argümanların doğru olduğunu kontrol eden güvenlik denetleyicisi - bazı NoneType argümanlarını da varsayılan değerleriyle değiştirir.
Bu yöntem, model için kullanılan kuantizasyon yöntemini döndürür. Model kuantize edilemezse None döndürür.
to_diff_dict
< source >( ) → dict[str, Any]
Dönüş değeri
dict[str, Any]
Bu yapılandırma örneğini oluşturan tüm özniteliklerin sözlüğü,
Daha iyi okunabilirlik için config'ten varsayılan config özniteliklerine karşılık gelen tüm öznitelikleri kaldırır ve bir Python sözlüğüne serialize eder.
GGUFQuantizationConfig
sınıf diffusers.GGUFQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | None = None )
Bu, GGUF Kuantizasyon teknikleri için bir yapılandırma sınıfıdır.
NunchakuLiteQuantizationConfig
sınıf diffusers.NunchakuLiteQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | str | None = Nonesvdq_w4a4: dict[str, Any] | None = Noneawq_w4a16: dict[str, Any] | None = None**kwargs )
Parametreler
- compute_dtype (
torch.dtype, varsayılantorch.bfloat16) — Kantize modüllerdeki kayan noktalı tamponlar tarafından kullanılan çalışma zamanı dtype. - svdq_w4a4 (
dict, isteğe bağlı) —precision,group_size,rankvetargetsiçeren açık SVDQ W4A4 hedef yapılandırması. - awq_w4a16 (
dict, isteğe bağlı) —precision,group_sizevetargetsiçeren açık AWQ W4A16 hedef yapılandırması.
Nunchaku Lite kontrol noktalarının yüklenmesi için yapılandırma.
Diffusers'taki Nunchaku Lite desteği, önceden nicelenmiş kontrol noktalarını yükler. Uyumlu bir kontrol noktası oluşturmak için, model mimarisi için bir hedef yapılandırma seçmek veya uyarlamak, dönüştürücüyü nicellemek ve dışa aktarmak ve onu config.json içinde saklanan kompakt quantization_config ile bir Diffusers hattı olarak paketlemek için diffuse-compressor kullanın.
Dışa aktarılan state dict, hedef Diffusers model mimarisiyle tam olarak eşleşmelidir. Füzyonlu QKV projeksiyonları ile kuantize edilmiş checkpoint'ler, ayrı Q, K ve V projeksiyon modülleri bekleyen bir model yapılandırmasına yüklenemez.
Örnek kompakt config.json yapılandırması:
{
"_class_name": "ErnieImageTransformer2DModel",
"quantization_config": {
"quant_method": "nunchaku_lite",
"compute_dtype": "bfloat16",
"svdq_w4a4": {
"precision": "nvfp4",
"group_size": 16,
"rank": 32,
"targets": ["layers.0.self_attention.to_q"]
},
"awq_w4a16": {
"precision": "int4",
"group_size": 64,
"targets": ["final_linear"]
}
}
}QuantoConfig
sınıf diffusers.QuantoConfig
< source >( weights_dtype: str = 'int8'modules_to_not_convert: list[str] | None = None**kwargs )
quanto kullanılarak yüklenmiş bir modelle oynayabileceğiniz tüm olası öznitelikler ve özellikler hakkında bir sarmalayıcı sınıfıdır.
QuantoConfigkullanımdan kaldırılmıştır ve 1.0.0 sürümünde kaldırılacaktır. BitsAndBytesConfig veya TorchAoConfig gibi diğer desteklenen nicelleştirme (quantization) altyapılarından birine geçmeyi düşünün.
modules_to_not_convert (list, isteğe bağlı, varsayılan None):
Kantize edilmeyecek modüllerin listesi, bazı modüllerin orijinal hassasiyetlerinde bırakılmasını açıkça gerektiren modellerin kantize edilmesi için faydalıdır (ör. Whisper encoder, Llava encoder, Mixtral gate katmanları).
Argümanların doğru olduğunu kontrol eden güvenlik denetleyicisi
SDNQConfig
sınıf diffusers.SDNQConfig
< source >( *args**kwargs )
Parametreler
- weights_dtype (
str, isteğe bağlı, varsayılan"int8") — Kantizasyon sonrası ağırlıkların hedef dtype'i, örn."int8","uint4","float8_e4m3fn". Desteklenen tüm değerler içinsdnq.common.accepted_weight_dtypesdosyasına bakın. - group_size (
int, isteğe bağlı, varsayılan0) — Bir tensörün kaç elemanının aynı kuantizasyon grubunu paylaştığını belirtir.0,weights_dtypedeğerine göre otomatik seçim yapar,-1ise gruplamayı devre dışı bırakır ve satır bazlı kuantizasyon kullanır. - use_svd (
bool, isteğe bağlı, varsayılanFalse) — SDNQ kuantizasyonunun üzerine SVDQuant algoritmasının uygulanıp uygulanmayacağı. - use_quantized_matmul (
bool, isteğe bağlı, varsayılanFalse) — BF16 / FP16 yerine ileri geçişte (forward pass) kuantize INT8 / FP8 / FP16 matmul kullanılıp kullanılmayacağı. - modules_to_not_convert (
list, isteğe bağlı, varsayılanNone) — Kantizasyon sırasında atlanacak modüllerin listesi. - kwargs (
dict[str, Any], isteğe bağlı) —sdnq.SDNQConfig'e (ör.quantized_matmul_dtype,svd_rank,use_hadamard,quant_conv,quant_embedding,modules_dtype_dict) iletilen ek anahtar kelime argümanları.
SDNQ (SD.Next Quantization) için yapılandırma sınıfı.
sdnq kütüphanesi, diffusers ile uyumlu kendi yapılandırmasını ve nicelendiricisini içerir; bu sınıf, quant_method="sdnq" kontrol noktalarının diffusers ile yerel olarak yüklenmesini sağlamak üzere onlara devreden ince bir fabrikadır. Tüm argümanlar sdnq.SDNQConfig sınıfına iletilir. sdnq kütüphanesi gereklidir: pip install sdnq.
Referans: https://github.com/Disty0/sdnq
TorchAoConfig
sınıf diffusers.TorchAoConfig
< source >( quant_type: 'AOBaseConfig'modules_to_not_convert: list[str] | None = None**kwargs )
Parametreler
- quant_type (
AOBaseConfig) — Kantizasyon türünü belirten birAOBaseConfigalt sınıfı örneği. Kullanılabilir yapılandırma sınıfları için (ör.Int4WeightOnlyConfig,Int8WeightOnlyConfig,Float8WeightOnlyConfig,Float8DynamicActivationFloat8WeightConfigvb.) torchao belgelerine bakın. - modules_to_not_convert (
list[str], isteğe bağlı, varsayılanNone) — Kantize edilmeyecek modüllerin listesi; bazı modüllerin orijinal hassasiyetinde bırakılmasını açıkça gerektiren modelleri kantize etmek için kullanışlıdır.
Bu, torchao kuantizasyon/sıralama teknikleri için bir yapılandırma sınıfıdır.
Örnek:
from diffusers import FluxTransformer2DModel, TorchAoConfig
from torchao.quantization import Int8WeightOnlyConfig
quantization_config = TorchAoConfig(Int8WeightOnlyConfig())
transformer = FluxTransformer2DModel.from_pretrained(
"black-forest-labs/Flux.1-Dev",
subfolder="transformer",
quantization_config=quantization_config,
torch_dtype=torch.bfloat16,
)Sözlükten yapılandırma oluşturun.
Yapılandırmaya dayalı uygun kuantizasyon yöntemini oluşturun.
Yapılandırmayı sözlüğe dönüştürür.
DiffusersQuantizer
sınıf diffusers.DiffusersQuantizer
< source >( quantization_config: QuantizationConfigMixin**kwargs )
HuggingFace quantizer'ının soyut sınıfı. Şu anda, çıkarım ve/veya kuantizasyon için HF diffusers modellerini kuantize etmeyi destekler. Bu sınıf yalnızca diffusers.models.modeling_utils.ModelMixin.from_pretrained tarafından kullanılır ve henüz o yöntemin kapsamı dışında kolayca kullanılamaz.
Öznitelikler
quantization_config (diffusers.quantizers.quantization_config.QuantizationConfigMixin):
Kuantize etmek istediğiniz modelin kuantizasyon parametrelerini tanımlayan kuantizasyon yapılandırması.
modules_to_not_convert (list[str], isteğe bağlı):
Model kuantize edilirken dönüştürülmemesi gereken modül adlarının listesi.
required_packages (list[str], isteğe bağlı):
Kuantizatör kullanılmadan önce kurulması gereken gerekli pip paketlerinin listesi.
requires_calibration (bool):
Kuantizasyon yönteminin, kullanılmadan önce modelin kalibre edilmesini gerektirip gerektirmediği.
Ekstra belleğe ihtiyaç duyuluyorsa infer_auto_device_map() için max_memory argümanını ayarlayın
adjust_target_dtype
< source >( torch_dtype: torch.dtype )
from_pretrained içinde str olan bir device_map varsa, device_map'i hesaplamak için kullanılan target_dtype değişkenini ayarlamak istiyorsanız bu yöntemi geçersiz kılın. Örneğin, bitsandbytes için target_dtype değerini torch.int8 olarak zorunlu ayarlıyoruz ve 4-bit için accelerate.CustomDtype.int4 özel enum'unu geçiriyoruz.
check_if_quantized_param
< source >( model: ModelMixinparam_value: torch.Tensorparam_name: strstate_dict: dict**kwargs )
Yüklenen state_dict bileşeninin kuantize parametrenin bir parçası olup olmadığını kontrol eder ve bazı doğrulamalar yapar; yalnızca kuantizasyon için yeni parametreler oluşturmayı gerektiren kuantizasyon yöntemleri için tanımlıdır.
kuantize edilmiş parametrenin beklenen şekle sahip olup olmadığını kontrol eder.
state_dict'ten gerekli bileşenleri alır ve quantize edilmiş parametreyi oluşturur.
Modeli orijinal modelini geri almak için potansiyel olarak dekuantize edin; bu işlemde doğruluk / performans kaybı yaşanabilir. Not: Tüm kuantizasyon şemaları bunu desteklemez.
caching_allocator_warmup içinde cuda'yı ısıtmak için önceden ayırtılacak bayt sayısını elde etmek için kullanılacak çarpan.
2 çarpanı, boş modeldeki tüm baytların ayrıldığını (fp16'da ayırma yapıldığı için) ifade ederken, 4 çarpanı boş modelde bulunan ağırlıkların yarısı kadar belleğin ayrıldığını vb. ifade eder.
get_special_dtypes_update
< source >( modeltorch_dtype: torch.dtype )
kuantize edilmemiş modüller için dtypes döndürür - bir str, device_map olarak geçirildiğinde device_map'in hesaplanması için kullanılır. Yöntem, _process_model_before_weight_loading içinde değiştirilen modules_to_not_convert'i kullanır. diffusers modellerinde henüz herhangi bir modules_to_not_convert özniteliği yoktur ancak bu, gelecekte yakında değişebilir.
postprocess_model
< source >( model: ModelMixin**kwargs )
Ağırlıkların yüklenmesinin ardından modeli son işlemeye (post-process) tabi tutun. Soyut _process_model_after_weight_loading metodunu geçersiz kıldığınızdan emin olun.
preprocess_model
< source >( model: ModelMixin**kwargs )
Ağırlıkların yüklenmesinden önce model özniteliklerini ayarlamak ve/veya modeli dönüştürmek. Bu noktada modelin meta cihazda başlatılmış olması gerekir; böylece modülleri yerinde değiştirmek için modelin iskeletini serbestçe manipüle edebilirsiniz. Soyut _process_model_before_weight_loading metodunu geçersiz kılmayı unutmayın.
update_device_map
< source >( device_map: dict[str, typing.Any] | None )
Mevcut cihaz haritasını yeni bir harita ile geçersiz kılmak istiyorsanız bu yöntemi geçersiz kılın. Örneğin, accelerate zorunlu bir gereksinim olduğu için, bitsandbytes durumunda herhangi bir device_map geçirilmezse, device_map `“auto”“` olarak ayarlanır.
update_missing_keys
< source >( modelmissing_keys: listprefix: str )
missing_keys değerlerini ayarlamak istiyorsanız bu yöntemi geçersiz kılın.
update_torch_dtype
< source >( torch_dtype: torch.dtype )
Bazı kuantizasyon yöntemleri, modelin dtype değerinin hedef dtype olarak açıkça ayarlanmasını gerektirir. Bu davranışın korunmasını sağlamak istiyorsanız bu yöntemi geçersiz kılmanız gerekir
Bu yöntem, from_pretrained ile geçirilen argümanlarla olası çakışmaları kontrol etmek için kullanılır. diffusers ile entegre edilecek tüm gelecekteki kuantizörler için bunu tanımlamanız gerekir. Açık bir kontrol gerekmiyorsa, hiçbir şey döndürmeyin.