← barcha maqolalar

quantization nima va qanday ishlaydi

· 3 daq · llm · inference

llm ni o‘z kompyuteringizda ishga tushirmoqchi bo‘lsangiz, birinchi muammo modelning sifati emas. birinchi muammo — xotira. 7b model fp16 formatida 14 gb vram talab qiladi. bu esa 12 gb lik videokartaga sig‘maydi.

quantization aynan shu muammoni hal qiladi.

model xotirasini hisoblaymiz

model ichida faqat sonlar bor. 7b model degani — taxminan 7 milliard parametr. har bir parametr qancha joy egallashi formatga bog‘liq:

fp16    2 bayt      7e9 × 2    = 14 gb
int8    1 bayt      7e9 × 1    = 7 gb
int4    0.5 bayt    7e9 × 0.5  = 3.5 gb

amalda int4 da 3.5 gb emas, 4–4.5 gb chiqadi. buning sababini quyida ko‘ramiz.

quantization qanday ishlaydi

har bir sonni alohida siqish samarasiz. shuning uchun vaznlar kichik bloklarga bo‘linadi. masalan, har 32 yoki 64 ta vazn bitta blokni tashkil qiladi. har bir blok uchun ikkita qo‘shimcha son saqlanadi: scale va zero point.

blok ichidagi har bir vazn shu ikkisi yordamida butun songa aylantiriladi:

q = round(w / scale) + zero_point

modelni o‘qiyotganda teskari amal bajariladi. lekin asl son qaytmaydi, unga eng yaqin qiymat qaytadi. ana shu yo‘qolgan aniqlik quantization ning ta’siri hisoblanadi.

scale va zero_point ham xotira egallaydi. shu sababli int4 da haqiqiy hajm 3.5 gb emas, 4 gb dan sal ko‘proq bo‘ladi. blok qancha kichik bo‘lsa, sifat shuncha yaxshi, lekin qo‘shimcha xarajat ham shuncha ko‘p.

formatlar

bu yerda bitta chalkashlik bor, uni darhol aniqlashtirib olaylik.

gguf — bu quantization usuli emas, balki fayl formati. llama.cpp shu formatdan foydalanadi. uning ichida Q4_K_M, Q5_K_M, Q8_0 kabi turli sxemalar bo‘lishi mumkin. ya’ni "gguf model" iborasi modelning necha bitda ekanini bildirmaydi.

qolganlari esa haqiqiy usullar.

gptq — model o‘qitilib bo‘lgandan keyin qo‘llaniladi. qatlamlar ketma-ket ko‘rib chiqiladi va kichik kalibratsiya to‘plami yordamida har bir vaznni qaysi tomonga yaxlitlash kerakligi hisoblanadi. natija oddiy yaxlitlashdan ancha yaxshi chiqadi.

awq — bu usulning asosiy g‘oyasi oddiy: vaznlarning hammasi bir xil ahamiyatga ega emas. aktivatsiyalarga qarab eng muhim bir foizi aniqlanadi va aynan o‘shalar himoyalanadi. nomi ham shundan kelib chiqqan — activation-aware.

fp8 — 8 bitli suzuvchi nuqta (e4m3 va e5m2). h100 va ada avlodidagi videokartalar buni apparat darajasida qo‘llab-quvvatlaydi, shuning uchun tezlik ham ortadi.

fp4 va nvfp4 — 4 bitli suzuvchi nuqta. nvfp4 nvidia ning blackwell uchun formati. u mikro-bloklarga alohida masshtab beradi va shu hisobdan oddiy int4 dan aniqroq ishlaydi.

sifat qanchalik pasayadi

qisqa javob: 8 bitda deyarli pasaymaydi.

  • 8 bit — farqni sezish uchun maxsus test kerak bo‘ladi. kundalik ishda bilinmaydi.
  • 4 bit — farq bor, lekin kichik. yaxshi usul bilan (awq, gptq yoki Q4_K_M) ko‘p vazifalarda muammo tug‘dirmaydi.
  • 4 bitdan past — bu yerda sifat tez pasayadi. 2 va 3 bit hali tajriba bosqichida.

eng foydali qoida esa shunday: bir xil xotira uchun kattaroq modelni past aniqlikda olgan ma’qul. 4 bitli 13b model 8 bitli 7b modeldan deyarli har doim yaxshiroq ishlaydi, garchi ikkalasi ham taxminan 7 gb egallasa ham.

lekin sifat bir tekis pasaymaydi. kod yozish va matematika quantization ga eng sezgir sohalar, oddiy suhbat esa deyarli ta’sirlanmaydi. shuning uchun "4 bit yetarli" degan xulosani boshqalarning testiga emas, o‘z vazifangizga qarab chiqargan ma’qul.

ko‘pincha e’tibordan chetda qoladigan narsa

vaznlar — bu hisobning faqat yarmi. kontekst uzayganda kv cache ham vram ni egallay boshlaydi. u model hajmiga emas, suhbat uzunligiga qarab o‘sadi.

uzun kontekstda kv cache bemalol bir necha gigabaytga yetadi. 4 bitli 7b model videokartaga sig‘di deb xursand bo‘lasiz, keyin 8 ming tokenlik suhbatda xotira tugaydi. kv cache ni ham quantize qilish mumkin, ko‘pchilik inference server larida bunday sozlama bor.

qaysi birini tanlash kerak

  • videokartada ishlatilsa — awq yoki gptq, 4 bit.
  • mac yoki cpu da — gguf, Q4_K_M. muvozanat shu yerda eng yaxshi.
  • h100 yoki blackwell bo‘lsa — fp8, chunki apparat o‘zi qo‘llab-quvvatlaydi va tezlik tekinga keladi.
  • vram ham, tezlik ham yetarli bo‘lsa — umuman quantize qilmaslik kerak.