Quantization — machine-learning model weightlari, activationlari yoki boshqa sonli qiymatlarni yuqori aniqlikdagi formatdan pastroq aniqlikdagi formatga o‘tkazish jarayoni. Masalan, FP32 qiymatlarni FP16, BF16, INT8 yoki undan ham kichik bitli representationda saqlash mumkin. Asosiy maqsad model hajmini, memory sarfini va inference xarajatini kamaytirishdir.
Quantization modelni avtomatik ravishda kichraytiradi, ammo aniqlik va tezlik o‘rtasida muvozanat talab qiladi. Har model va hardware bir xil quantization usulidan bir xil foyda olmaydi.
Sonli format
Model weightlari odatda floating-point formatda saqlanadi.
Keng formatlar:
- FP32;
- FP16;
- BF16;
- INT8;
- INT4;
- binary yoki ternaryga oid representationlar.
Bit soni kamaygani sari bitta qiymat kamroq memory egallaydi.
Biroq ifodalanadigan sonlar diapazoni va aniqligi ham kamayadi.
Scale va zero-point
Integer quantization floating-point qiymatni ma’lum diapazonga map qiladi.
Soddalashtirilgan formula:
q = round(x / scale) + zero_point
Bu yerda x haqiqiy qiymat, q quantized qiymat.
Dequantizationda shu parametrlar orqali taxminiy floating-point qiymat tiklanadi.
Symmetric quantization
Symmetric quantization nol atrofida teng diapazon ishlatadi.
Zero-point odatda nol bo‘ladi.
Bu matrix multiplication va accelerator implementationini soddalashtiradi.
Weight distribution nolga yaqin simmetrik bo‘lsa yaxshi ishlashi mumkin.
Asymmetric quantization
Asymmetric quantization minimum va maximum qiymatga mos alohida zero-point ishlatadi.
Activationlar faqat musbat yoki notekis diapazonda bo‘lsa foydali.
Hisoblash biroz murakkabroq, lekin mavjud integer diapazondan yaxshiroq foydalanishi mumkin.
Per-tensor va per-channel
Per-tensor usulda butun tensor uchun bitta scale ishlatiladi.
Per-channel usulda har output channel yoki guruh uchun alohida scale beriladi.
Per-channel weightlarning turli diapazonini yaxshiroq saqlaydi.
Metadata va implementation murakkabligi biroz oshadi.
Post-training quantization
Model training tugagandan keyin quantize qilinadi.
Jarayon:
- pretrained model olinadi;
- representative calibration data beriladi;
- activation diapazonlari o‘lchanadi;
- scale va zero-point hisoblanadi;
- model quantized formatga o‘tkaziladi;
- sifat qayta baholanadi.
Bu usul tez va qo‘shimcha training talab qilmasligi mumkin.
Calibration
Calibration dataset production inputlarini yetarli ifodalashi kerak.
Juda kichik yoki noto‘g‘ri dataset activation diapazonini xato baholaydi.
Outlier qiymatlar scale’ni kengaytirib, ko‘p odatiy qiymatning aniqligini kamaytirishi mumkin.
Min-max, percentile va histogramga oid usullar qo‘llanadi.
Quantization-aware training
QAT training vaqtida quantization xatosini simulyatsiya qiladi.
Forward passda fake quantization qo‘llanadi, backward pass esa gradient approximationdan foydalanadi.
Model weightlari quantized representationga moslashadi.
QAT odatda post-training usulidan ko‘ra sifatni yaxshiroq saqlaydi, ammo qo‘shimcha training talab qiladi.
Dynamic quantization
Weightlar oldindan quantize qilinadi, activation scale esa runtime’da hisoblanadi.
Bu ayniqsa recurrent yoki linear layerlarda qo‘llanishi mumkin.
Calibration talabini kamaytiradi.
Runtime scale hisoblash overhead qo‘shadi.
Static quantization
Weight va activation diapazonlari oldindan calibration bilan belgilanadi.
Inference’da integer operationlar to‘liqroq ishlatiladi.
Bu tezlik uchun foydali, ammo representative calibration talab qiladi.
Weight-only quantization
Faqat weightlar past bitga o‘tkaziladi, activationlar floating-point bo‘lib qoladi.
Katta til modellarida memory bandwidth va model hajmini kamaytirish uchun keng qo‘llanadi.
Matrix multiplicationda weightlar runtime’da dequantize qilinishi yoki maxsus kernel bilan hisoblanishi mumkin.
Activation quantization
Activationlar inputga bog‘liq va diapazoni o‘zgaruvchan.
Shu sababli ularni quantize qilish weightga qaraganda murakkabroq.
Outlier channel yoki tokenlar sifatni buzishi mumkin.
SmoothQuantga o‘xshash usullar diapazonni weight va activation orasida qayta taqsimlashga intiladi.
Mixed precision
Modelning barcha layerlari bir xil bitda bo‘lishi shart emas.
Sezgir layerlar FP16, qolganlari INT8 yoki INT4 bo‘lishi mumkin.
Embeddings, normalization va output head ko‘pincha yuqoriroq precisionda qoldiriladi.
Mixed precision sifat va tezlikni muvozanatlashtiradi.
Model hajmi
FP32 weight to‘rt byte egallaydi.
INT8 taxminan bir byte.
Nazariy hajm to‘rt baravar kamayishi mumkin.
Amaliy artifactda scale, zero-point, metadata va packing overhead ham mavjud.
Tezlik
Quantization tezlikni faqat hardware va runtime mos integer yoki low-bit kernelga ega bo‘lsa oshiradi.
Oddiy CPU INT8 instructionlardan katta foyda olishi mumkin.
Ba’zi GPUlar FP16 yoki BF16da INT8dan samaraliroq bo‘lishi ehtimoli bor.
Benchmark aynan target device’da bajariladi.
Sifatni tekshirish
Quantized model quyidagilar bilan original modelga solishtiriladi:
O‘rtacha metric yaxshi bo‘lsa ham ayrim class yoki tillarda xato oshishi mumkin.
Outlier qiymatlar
Ba’zi layer yoki channelarda juda katta weight va activationlar mavjud bo‘ladi. Umumiy scale aynan shu outlierga moslansa, qolgan ko‘p qiymatlar kam integer darajaga siqiladi. Natijada aniqlik yo‘qoladi. Outlier channelni yuqori precisionda qoldirish, clipping, group-wise scale yoki weightni qayta taqsimlash usullari qo‘llanadi.
Quantized artifact
Model faylida faqat integer weight emas, scale, zero-point, group size va original tensor shape ham saqlanadi. Runtime aynan shu formatni tushunishi kerak. Bir library yaratgan INT4 artifact boshqa runtime’da to‘g‘ridan-to‘g‘ri ishlamasligi mumkin. Exportdan keyin output original model bilan sample-by-sample solishtiriladi.
Bog‘liq tushunchalar
Quantization, Integer arithmetic, FP16, BF16, INT8, Calibration, Quantization-aware training, Mixed precision, Model compression, Inference optimization