Diffusers documentation
Kuantisasi
Kuantisasi
Teknik kuantisasi mengurangi biaya memori dan komputasi dengan merepresentasikan bobot dan aktivasi menggunakan tipe data presisi rendah seperti bilangan bulat 8-bit (int8). Hal ini memungkinkan pemuatan model yang lebih besar yang biasanya tidak muat di memori, serta mempercepat inferensi.
Pelajari cara mengkuantisasi model dalam panduan Kuantisasi.
PipelineQuantizationConfig
kelas 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 )
Parameter
- quant_backend (
str) — Backend kuantisasi yang akan digunakan. Saat menggunakan opsi ini, kami mengasumsikan bahwa backend tersebut tersedia untukdiffusersdantransformers. - quant_kwargs (
dict) — Parameter untuk menginisialisasi kelas backend kuantisasi. - components_to_quantize (
list) — Komponen dari pipeline yang akan dikuantisasi. - quant_mapping (
dict) — Pemetaan yang mendefinisikan spesifikasi kuantisasi yang akan digunakan untuk komponen pipeline. Saat menggunakan argumen ini, pengguna tidak diharapkan untuk menyediakanquant_backend,quant_kawargs, dancomponents_to_quantize.
Kelas konfigurasi yang digunakan saat menerapkan kuantisasi secara langsung pada from_pretrained().
BFLQuantizationConfig
kelas diffusers.BFLQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | None = None )
Konfigurasi untuk memuat checkpoint yang dikuantisasi dengan skema fp8r dan nvfp4 dari Black Forest Labs.
Kedua skema dibaca dari checkpoint melalui ~FromSingleFileMixin.from_single_file; kuantisasi model secara langsung tidak didukung. Lapisan linear dikuantisasi ketika bobotnya disertai tensor skala:
fp8r:weightadalahfloat8_e4m3fndengan bentuk[N, K]danweight_scaleadalah skala fp32 per baris[N].nvfp4:weightadalahuint8dengan bentuk[N, K/2](dua nilai E2M1 per byte),weight_scaleadalah skala blokfloat8_e4m3fn[N, K/16], danweight_scale_2sertainput_scaleadalah skalar fp32 yang menyimpan skala bobot global dan skala aktivasi yang dikalibrasi (layout ModelOpt NVFP4).
BitsAndBytesConfig
kelas 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 )
Parameter
- load_in_8bit (
bool, opsional, defaultFalse) — Flag ini digunakan untuk mengaktifkan kuantisasi 8-bit dengan LLM.int8(). - load_in_4bit (
bool, opsional, defaultFalse) — Flag ini digunakan untuk mengaktifkan kuantisasi 4-bit dengan mengganti lapisan Linear menjadi lapisan FP4/NF4 daribitsandbytes. - llm_int8_threshold (
float, opsional, default 6.0) — Ini sesuai dengan ambang anomali untuk deteksi anomali seperti yang dijelaskan dalam makalahLLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale: https://huggingface.co/papers/2208.07339 Nilai hidden states yang berada di atas ambang ini akan dianggap sebagai anomali dan operasi pada nilai-nilai tersebut akan dilakukan dalam fp16. Nilai biasanya terdistribusi normal, artinya, sebagian besar nilai berada dalam rentang [-3,5, 3,5], namun terdapat beberapa anomali sistematis yang sangat berbeda distribusinya pada model besar. Anomali ini sering berada dalam interval [-60, -6] atau [6, 60]. Kuantisasi Int8 bekerja dengan baik untuk nilai dengan magnitudo ~5, tetapi melampaui itu, terdapat penalti kinerja yang signifikan. Ambang default yang baik adalah 6, tetapi ambang yang lebih rendah mungkin diperlukan untuk model yang lebih tidak stabil (model kecil, fine-tuning). - llm_int8_skip_modules (
list[str], opsional) — Daftar eksplisit modul yang tidak ingin dikonversi ke 8-bit. Ini berguna untuk model seperti Jukebox yang memiliki beberapa head di berbagai tempat dan tidak selalu di posisi terakhir. Misalnya untuk modelCausalLM,lm_headterakhir biasanya tetap dipertahankan dalamdtypeaslinya. - llm_int8_enable_fp32_cpu_offload (
bool, opsional, defaultFalse) — Flag ini digunakan untuk kasus penggunaan lanjutan dan pengguna yang memahami fitur ini. Jika Anda ingin membagi model Anda ke dalam bagian-bagian berbeda dan menjalankan beberapa bagian dalam int8 di GPU serta beberapa bagian dalam fp32 di CPU, Anda dapat menggunakan flag ini. Hal ini berguna untuk offloading model besar sepertigoogle/flan-t5-xxl. Perhatikan bahwa operasi int8 tidak akan dijalankan di CPU. - llm_int8_has_fp16_weight (
bool, opsional, defaultFalse) — Flag ini menjalankan LLM.int8() dengan bobot utama 16-bit. Hal ini berguna untuk fine-tuning karena bobot tidak perlu dikonversi bolak-balik untuk backward pass. - bnb_4bit_compute_dtype (
torch.dtypeatau str, opsional, defaultnyatorch.float32) — Ini mengatur tipe komputasi yang mungkin berbeda dari tipe input. Misalnya, input mungkin berupa fp32, tetapi komputasi dapat diatur ke bf16 untuk percepatan. - bnb_4bit_quant_type (
str, opsional, defaultnya"fp4") — Ini mengatur tipe data kuantisasi pada lapisan bnb.nn.Linear4Bit. Opsinya adalah tipe data FP4 dan NF4 yang ditentukan olehfp4ataunf4. - bnb_4bit_use_double_quant (
bool, opsional, defaultFalse) — Flag ini digunakan untuk kuantisasi bersarang, di mana konstanta kuantisasi dari kuantisasi pertama dikuantisasi lagi. - bnb_4bit_quant_storage (
torch.dtypeatau str, opsional, defaultnyatorch.uint8) — Ini mengatur tipe penyimpanan untuk mengemas parameter 4-bit yang dikuantisasi. - kwargs (
dict[str, Any], opsional) — Parameter tambahan untuk menginisialisasi objek konfigurasi.
Ini adalah kelas pembungkus untuk semua atribut dan fitur yang mungkin dapat Anda gunakan pada model yang telah dimuat menggunakan bitsandbytes.
Ini menggantikan load_in_8bit atau load_in_4bit, sehingga kedua opsi tersebut saling eksklusif.
Saat ini hanya mendukung kuantisasi LLM.int8(), FP4, dan NF4. Jika metode lain ditambahkan ke bitsandbytes,
maka argumen tambahan akan ditambahkan ke kelas ini.
Mengembalikan True jika model dapat dikuantisasi, False jika tidak.
Pemeriksa keselamatan yang memastikan argumen benar - juga mengganti beberapa argumen NoneType dengan nilai default-nya.
Metode ini mengembalikan metode kuantisasi yang digunakan untuk model. Jika model tidak dapat dikuantisasi, metode ini mengembalikan None.
to_diff_dict
< source >( ) → dict[str, Any]
Mengembalikan
dict[str, Any]
Kamus dari semua atribut yang membentuk instance konfigurasi ini,
Menghapus semua atribut dari config yang sesuai dengan atribut config default untuk keterbacaan yang lebih baik dan menyerialisasi ke kamus Python.
GGUFQuantizationConfig
kelas diffusers.GGUFQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | None = None )
Ini adalah kelas konfigurasi untuk teknik kuantisasi GGUF.
NunchakuLiteQuantizationConfig
kelas diffusers.NunchakuLiteQuantizationConfig
< source >( compute_dtype: 'torch.dtype' | str | None = Nonesvdq_w4a4: dict[str, Any] | None = Noneawq_w4a16: dict[str, Any] | None = None**kwargs )
Parameter
- compute_dtype (
torch.dtype, defaultnyatorch.bfloat16) — dtype runtime yang digunakan oleh buffer floating-point di dalam modul terkuantisasi. - svdq_w4a4 (
dict, opsional) — Konfigurasi target SVDQ W4A4 eksplisit denganprecision,group_size,rank, dantargets. - awq_w4a16 (
dict, opsional) — Konfigurasi target AWQ W4A16 eksplisit denganprecision,group_size, dantargets.
Konfigurasi untuk memuat checkpoint Nunchaku Lite.
Dukungan Nunchaku Lite di Diffusers memuat checkpoint prequantized. Untuk membuat checkpoint yang kompatibel, gunakan diffuse-compressor untuk memilih atau menyesuaikan konfigurasi target
untuk arsitektur model, melakukan kuantisasi dan mengekspor transformer, serta mengemasnya sebagai pipeline Diffusers dengan
quantization_config ringkas yang disimpan di config.json.
State dict yang diekspor harus cocok persis dengan arsitektur model Diffusers target. Checkpoint yang dikuantisasi dengan proyeksi QKV yang digabungkan tidak akan dapat dimuat ke dalam konfigurasi model yang mengharapkan modul proyeksi Q, K, dan V yang terpisah.
Contoh konfigurasi config.json ringkas:
{
"_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
kelas diffusers.QuantoConfig
< source >( weights_dtype: str = 'int8'modules_to_not_convert: list[str] | None = None**kwargs )
Ini adalah kelas pembungkus untuk semua atribut dan fitur yang mungkin dapat Anda gunakan pada model yang telah dimuat menggunakan quanto.
QuantoConfigtidak lagi didukung dan akan dihapus pada versi 1.0.0. Pertimbangkan untuk beralih ke salah satu backend kuantisasi lain yang didukung, seperti BitsAndBytesConfig atau TorchAoConfig.
modules_to_not_convert (list, opsional, default ke None):
Daftar modul yang tidak akan dikuantisasi, berguna untuk mengkuantisasi model yang secara eksplisit membutuhkan beberapa modul tetap berada pada presisi aslinya (misalnya encoder Whisper, encoder Llava, lapisan gate Mixtral).
Pemeriksa keselamatan yang memastikan argumen benar
SDNQConfig
kelas diffusers.SDNQConfig
< source >( *args**kwargs )
Parameter
- weights_dtype (
str, opsional, default"int8") — Dtype target untuk bobot setelah kuantisasi, misalnya"int8","uint4","float8_e4m3fn". Lihatsdnq.common.accepted_weight_dtypesuntuk semua nilai yang didukung. - group_size (
int, opsional, default0) — Jumlah elemen tensor yang berbagi grup kuantisasi yang sama.0memilih secara otomatis berdasarkanweights_dtype,-1menonaktifkan pengelompokan dan menggunakan kuantisasi per baris. - use_svd (
bool, opsional, defaultFalse) — Apakah akan menerapkan algoritma SVDQuant di atas kuantisasi SDNQ. - use_quantized_matmul (
bool, opsional, defaultFalse) — Apakah akan menggunakan matmul kuantisasi INT8 / FP8 / FP16 pada forward pass alih-alih BF16 / FP16. - modules_to_not_convert (
list, opsional, defaultnyaNone) — Daftar modul yang dilewati selama kuantisasi. - kwargs (
dict[str, Any], opsional) — Argumen kata kunci tambahan yang diteruskan kesdnq.SDNQConfig(mis.quantized_matmul_dtype,svd_rank,use_hadamard,quant_conv,quant_embedding,modules_dtype_dict).
Kelas konfigurasi untuk SDNQ (SD.Next Quantization).
Perpustakaan sdnq menyediakan konfigurasi dan kuantizer yang kompatibel dengan diffusers; kelas ini adalah pabrik tipis yang mendelegasikan ke mereka sehingga checkpoint quant_method="sdnq" dapat dimuat secara native dengan diffusers. Semua argumen diteruskan ke sdnq.SDNQConfig. Memerlukan perpustakaan sdnq: pip install sdnq.
Referensi: https://github.com/Disty0/sdnq
TorchAoConfig
kelas diffusers.TorchAoConfig
< source >( quant_type: 'AOBaseConfig'modules_to_not_convert: list[str] | None = None**kwargs )
Parameter
- quant_type (
AOBaseConfig) — Instans subclassAOBaseConfigyang menentukan tipe kuantisasi. Lihat dokumentasi torchao untuk kelas config yang tersedia (mis.Int4WeightOnlyConfig,Int8WeightOnlyConfig,Float8WeightOnlyConfig,Float8DynamicActivationFloat8WeightConfig, dll.). - modules_to_not_convert (
list[str], opsional, defaultNone) — Daftar modul yang tidak akan dikuantisasi, berguna untuk mengkuantisasi model yang secara eksplisit membutuhkan beberapa modul tetap berada pada presisi aslinya.
Ini adalah kelas konfigurasi untuk teknik kuantisasi/keroposan torchao.
Contoh:
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,
)Buat konfigurasi dari kamus.
Buat metode kuantisasi yang sesuai berdasarkan konfigurasi.
Mengonversi konfigurasi menjadi kamus.
DiffusersQuantizer
kelas diffusers.DiffusersQuantizer
< source >( quantization_config: QuantizationConfigMixin**kwargs )
Kelas abstrak dari kuantizer HuggingFace. Saat ini mendukung kuantisasi model HF diffusers untuk inferensi dan/atau kuantisasi. Kelas ini hanya digunakan untuk diffusers.models.modeling_utils.ModelMixin.from_pretrained dan belum dapat digunakan dengan mudah di luar cakupan metode tersebut.
Atribut
quantization_config (diffusers.quantizers.quantization_config.QuantizationConfigMixin):
Konfigurasi kuantisasi yang mendefinisikan parameter kuantisasi dari model Anda yang ingin dikuantisasi.
modules_to_not_convert (list[str], opsional):
Daftar nama modul yang tidak akan dikonversi saat mengkuantisasi model.
required_packages (list[str], opsional):
Daftar paket pip yang wajib diinstal sebelum menggunakan kuantizer.
requires_calibration (bool):
Apakah metode kuantisasi memerlukan kalibrasi model sebelum digunakan.
sesuaikan argumen max_memory untuk infer_auto_device_map() jika memori tambahan diperlukan untuk kuantisasi
adjust_target_dtype
< source >( torch_dtype: torch.dtype )
Override metode ini jika Anda ingin menyesuaikan variabel target_dtype yang digunakan dalam from_pretrained untuk menghitung device_map dalam kasus device_map berupa str. Misalnya, untuk bitsandbytes kami memaksa target_dtype menjadi torch.int8 dan untuk 4-bit kami meneruskan enum kustom accelerate.CustomDtype.int4.
check_if_quantized_param
< source >( model: ModelMixinparam_value: torch.Tensorparam_name: strstate_dict: dict**kwargs )
memeriksa apakah komponen state_dict yang dimuat merupakan bagian dari param kuantisasi + beberapa validasi; hanya didefinisikan untuk metode kuantisasi yang memerlukan pembuatan parameter baru untuk kuantisasi.
memeriksa apakah parameter terkuantisasi memiliki bentuk yang diharapkan.
mengambil komponen yang diperlukan dari state_dict dan membuat param yang dikuantisasi.
Potensi untuk mendekuantisasi model guna mengambil model asli, dengan sedikit penurunan akurasi / kinerja. Perhatikan bahwa tidak semua skema kuantisasi mendukung ini.
Faktor yang digunakan dalam caching_allocator_warmup untuk mendapatkan jumlah byte yang akan dialokasikan sebelumnya guna pemanasan cuda.
Faktor 2 berarti kita mengalokasikan semua byte dalam model kosong (karena kita mengalokasikan dalam fp16), faktor 4 berarti
kita mengalokasikan setengah dari memori bobot yang berada dalam model kosong, dan seterusnya…
get_special_dtypes_update
< source >( modeltorch_dtype: torch.dtype )
mengembalikan dtypes untuk modul yang tidak dikuantisasi - digunakan untuk perhitungan device_map dalam kasus di mana str dilewatkan sebagai device_map. Metode ini akan menggunakan modules_to_not_convert yang dimodifikasi di _process_model_before_weight_loading. Model diffusers belum memiliki atribut modules_to_not_convert tetapi ini bisa berubah segera di masa depan.
postprocess_model
< source >( model: ModelMixin**kwargs )
Lakukan proses pascapemrosesan model setelah pemuatan bobot. Pastikan untuk menimpa metode abstrak _process_model_after_weight_loading.
preprocess_model
< source >( model: ModelMixin**kwargs )
Mengatur atribut model dan/atau mengonversi model sebelum pemuatan bobot. Pada titik ini, model harus diinisialisasi pada perangkat meta sehingga Anda dapat dengan bebas memanipulasi kerangka model untuk mengganti modul secara in-place. Pastikan untuk menimpa metode abstrak _process_model_before_weight_loading.
update_device_map
< source >( device_map: dict[str, typing.Any] | None )
Override metode ini jika Anda ingin mengganti device map yang ada dengan yang baru. Misalnya, untuk
bitsandbytes, karena accelerate adalah persyaratan wajib, jika tidak ada device_map yang di-pass, device_map akan diatur ke
`“auto”“
update_missing_keys
< source >( modelmissing_keys: listprefix: str )
Override metode ini jika Anda ingin menyesuaikan missing_keys.
update_torch_dtype
< source >( torch_dtype: torch.dtype )
Beberapa metode kuantisasi memerlukan pengaturan dtype model secara eksplisit ke dtype target. Anda perlu menimpa metode ini jika ingin memastikan perilaku tersebut tetap terjaga
Metode ini digunakan untuk memeriksa potensi konflik dengan argumen yang diteruskan dalam from_pretrained. Anda perlu mendefinisikannya untuk semua kuantizer masa depan yang diintegrasikan dengan diffusers. Jika tidak ada pemeriksaan eksplisit yang diperlukan, cukup kembalikan apa pun.