Apa itu quantization dalam machine learning?
Quantization menyimpan angka di dalam model dengan lebih sedikit bit, misalnya integer 8-bit atau 4-bit, bukan float 16-bit. Setiap blok weight punya satu scale, dan tiap weight disimpan sebagai integer kecil yang dikalikan dengan scale itu saat model berjalan. Ukuran model menjadi 2 sampai 4 kali lebih kecil dari fp16, dengan rounding error kecil yang terkendali.
Dengan quantization, large language model bisa berjalan di satu GPU, laptop, atau ponsel. Sistem serving memuat versi 4-bit atau 8-bit dari model terbuka supaya satu kartu bisa melayani lebih banyak request, dan alat lokal seperti llama.cpp menyediakan hampir semua model dalam versi quantized. Karena decode satu token demi satu token dibatasi memory bandwidth, weight yang lebih kecil juga mempercepat pembuatan teks. QLoRA juga melakukan fine-tuning di atas basis 4-bit yang dibekukan.
Ide utama
- Memori weight = parameter × bit ÷ 8, jadi perpindahan dari fp16 ke int4 memangkasnya 4×.
- Float menukar jangkauan dengan presisi lewat pembagian exponent dan mantissa; bf16 mempertahankan jangkauan fp32 dengan presisi lebih rendah.
- Absmax quantization memetakan weight terbesar ke level integer teratas dan membulatkan sisanya ke kisi seragam.
- Satu outlier meregangkan scale untuk semua weight yang memakainya bersama, jadi scale per-group melindungi sisanya dengan biaya penyimpanan kecil.
- Quantization weight-only mempercepat decode yang memory-bound, sedangkan W8A8 juga mempercepat kerja yang compute-bound.
- Metode seperti GPTQ, AWQ, dan NF4 menjaga model 4-bit tetap dekat dengan presisi penuh, di titik saat pembulatan biasa tidak cukup.
Pertanyaan umum
Berapa memori yang dibutuhkan model quantized?
Kalikan jumlah parameter dengan bit per weight, lalu bagi 8 untuk mendapat byte. Model 7B memakan sekitar 14 GB dalam fp16, 7 GB dalam int8, dan 3,5 GB dalam int4. Scale per grup sedikit menambah: satu scale 16-bit per 128 weight berbiaya 0,125 bit tambahan per weight. KV cache dan aktivasi butuh memori di luar weight.
Apakah bf16 termasuk quantization?
Konversi weight fp32 ke bf16 memangkas memorinya separuh, dan sebagian alat menyebutnya quantization. Namun, dalam sebagian besar tulisan tentang LLM, quantization berarti menyimpan weight sebagai integer 8-bit atau lebih kecil dengan scale per grup. bf16 adalah float 16-bit dengan jangkauan exponent fp32, jadi tidak butuh scale; model biasanya di-train dalam bf16, lalu di-quantize dari sana.
Apa bedanya post-training quantization dan quantization-aware training?
Post-training quantization (PTQ) mengonversi model yang sudah jadi, terkadang dengan beberapa ratus sampel kalibrasi, dan butuh waktu beberapa menit sampai beberapa jam. Quantization-aware training (QAT) menyimulasikan pembulatan selama training supaya weight menyesuaikan diri. QAT biasanya lebih tahan pada bit width yang sangat rendah, tetapi butuh training pipeline dan komputasi jauh lebih besar, jadi sebagian besar rilis LLM memakai PTQ.
Berapa akurasi yang hilang pada quantization 4-bit?
Dengan metode yang baik seperti GPTQ atau AWQ, model 4-bit weight-only biasanya hanya sedikit memburuk pada perplexity dan skornya mendekati fp16 pada sebagian besar benchmark. Weight 8-bit nyaris tanpa kehilangan. Di bawah 4 bit, kualitas turun lebih cepat, dan model kecil lebih terpukul daripada model besar karena tiap weight membawa lebih banyak pengetahuan model.
Apa arti nama GGUF seperti Q4_K_M?
GGUF adalah format file model yang dipakai llama.cpp. Q4 berarti sekitar 4 bit per weight, K menandai keluarga k-quant, yang menyimpan blok kecil weight dengan scale sendiri di dalam super-block yang lebih besar, dan M adalah campuran sedang yang mempertahankan sebagian tensor sensitif pada presisi lebih tinggi. Rata-rata sebenarnya sedikit di atas jumlah bit nominalnya.
Bisakah model quantized di-fine-tune?
Tidak secara langsung, karena pembulatan ke beberapa level saja menghapus gradient update yang kecil. QLoRA mengatasinya dengan membekukan basis NF4 4-bit dan melatih adapter LoRA dalam presisi 16-bit di atasnya. Basis itu di-dequantize langsung di setiap forward pass dan backward pass, sehingga model 65B bisa di-fine-tune di satu GPU 48 GB.
Penjelasan terkait
- LoRA dan Parameter-Efficient Fine-Tuning · Mengadaptasi model besar dengan melatih matriks low-rank kecil, bukan semua weight
- Aljabar Linear · Vector, matriks, dan bahasa data
- Neural Network · Cara neuron dan layer mengenali gambar
- KV Cache · Kenapa LLM menyimpan key dan value di cache, dan berapa biayanya
- Sampling: Temperature, Top-k, dan Top-p · Cara model bahasa memilih token berikutnya
- Mixture of Experts · Mengirim tiap token ke beberapa expert dalam model yang jauh lebih besar
Referensi
- Frantar et al. (2022), "GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers"
- Lin et al. (2023), "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration"
- Dettmers et al. (2023), "QLoRA: Efficient Finetuning of Quantized LLMs"
- Dettmers et al. (2022), "LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale"
- Nagel et al. (2021), "A White Paper on Neural Network Quantization"
Terakhir diperbarui