Membuat model lebih kecil, lebih cepat, dan lebih hemat biaya: kuantisasi INT8/FP8 untuk mempercepat inference, distillation yang menyalin kemampuan model besar ke model kecil, serta pruning untuk membuang bobot yang tidak berguna — dengan evaluasi ketat terhadap dampak kualitasnya

Setelah di episode 22 sistem serving kalian berjalan di Kubernetes, muncul satu pertanyaan yang menentukan biaya dan latensi: bisakah model ini dibuat lebih ringan? Model yang lebih kecil berarti: muat di lebih banyak hardware, lebih cepat merespons, dan jauh lebih murah per prediksi. Di dunia produksi 2026, model optimization bukan opsional — ia adalah lembah antara "model bekerja" dan "model menguntungkan".
Episode ini membangun tiga teknik inti: kuantisasi (mengurangi presisi angka), distillation (melatih model kecil meniru model besar), dan pruning (membuang bagian yang tidak berguna). Ketiganya berbagi satu prinsip yang tidak bisa ditawar: jangan pernah mengoptimalkan tanpa mengukur dampaknya — dan itu menuntun kembali ke disiplin evaluasi episode 7 dan 24.
Kuantisasi mengurangi presisi numerik bobot dan aktivasi. Model dilatih di FP32 (atau BF16); saat inference, bobot bisa dipetakan ke presisi lebih rendah:
| Presisi | Ukuran (per bobot) | Penggunaan |
|---|---|---|
| FP32 | 4 byte | Referensi |
| BF16 / FP16 | 2 byte | Training modern, kualitas tinggi |
| FP8 | 1 byte | Training & inference LLM skala besar |
| INT8 | 1 byte | Inference standar (CPU & GPU) |
| INT4 | 0.5 byte | QLoRA & model yang sangat ringkas |
Pendekatan kuantisasi:
from torch.ao.quantization import quantize_dynamic
# Dynamic quantization — sederhana, cocok untuk model klasik
quantized_model = quantize_dynamic(model, dtype=torch.qint8)
torch.save(quantized_model.state_dict(), "model_int8.pt")Untuk LLM, kuantisasi umumnya terjadi saat load model dengan AWQ/GPTQ (4-bit) atau fp8 (yang didukung vLLM langsung):
vllm serve Qwen/Qwen2.5-7B-Instruct --quantization fp8Rutinitas yang wajib dilakukan: evaluasi sebelum vs sesudah kuantisasi pada eval set yang sama, ukur metrik kualitas dan latency/throughput/memori. Model 4-bit yang turun 2% accuracy tapi 4x lebih murah sering kali merupakan keputusan bisnis yang tepat; model yang turun 10% jelas tidak.
for name, model in [("fp32", fp32_model), ("int8", int8_model)]:
acc = evaluate(model, eval_set)
lat = measure_latency(model)
print(f"{name}: accuracy={acc:.3f}, p95={lat:.1f}ms")Knowledge distillation melatih model kecil (student) untuk meniru output model besar (teacher). Alih-alih hanya belajar dari label, student belajar dari probabilitas teacher — yang jauh lebih informatif (misal teacher tahu "anjing" sedikit mirip "serigala").
Teacher (besar, akurat) ── soft labels ──► Student (kecil, murah)
↑
true labelsUntuk LLM (distilasi juga disebut model compression), contoh populer: keluarga DistilBERT (mengompres BERT ~40% dengan mempertahankan 97% performa) dan Phi series yang dilatih dari data sintetis guru. Varian modern:
import torch.nn.functional as F
def distillation_loss(student_logits, teacher_logits, labels, alpha=0.5, T=2.0):
soft = F.kl_div(
F.log_softmax(student_logits / T, dim=1),
F.softmax(teacher_logits / T, dim=1),
reduction="batchmean",
) * (T**2)
hard = F.cross_entropy(student_logits, labels)
return alpha * soft + (1 - alpha) * hardTemperatur T mengontrol "kelembutan" distribusi teacher; alpha menimbang pengaruh soft vs hard loss.
Pruning menghapus sebagian bobot (atau neuron/heads) yang berkontribusi paling sedikit, sehingga model lebih kecil dan lebih cepat. Dua pendekatan:
import torch
threshold = torch.quantile(torch.abs(model.weight), q=0.3)
mask = torch.abs(model.weight) > threshold
model.weight.data *= maskPerhatikan kelemahan: pruning satu kali sering terlalu agresif. Iterative pruning — prune sedikit, fine-tune, ulangi — jauh lebih stabil.
Optimasi yang realistis menggabungkan teknik berurutan:
Tiap langkah menurunkan kualitas sedikit — oleh karena itu evaluasi di tiap langkah adalah kunci. Kalian perlu tahu persis kapan penurunan kualitas melewati batas yang bisa diterima.
Tip
Urutan yang umumnya paling efektif: kuantisasi dulu (tanpa retraining, murah), lalu cek dampaknya. Jika belum cukup kecil/cepat, baru distillation atau pruning — yang butuh training ulang dan lebih mahal. Optimasi adalah iterasi: mulai dari yang termurah, ukur, berhenti saat cukup.
| Pitfall | Dampak | Pencegahan |
|---|---|---|
| Kuantisasi tanpa evaluasi kualitas | Kualitas turun tak terdeteksi | Eval sebelum/ sesudah |
| Pruning satu kali yang agresif | Model rusak permanen | Iterative pruning + fine-tune |
| Distilasi tanpa soft labels | Student tidak belajar struktur | Gunakan probabilitas teacher |
| Sparse pruning tanpa hardware khusus | Tidak ada percepatan nyata | Structured pruning |
| Optimasi untuk optimasi | Complexitas tanpa manfaat | Mulai termurah, ukur, berhenti |
Pada episode 23 ini, kalian telah menguasai optimasi model:
Di episode 24 selanjutnya kita akan membahas Advanced Evaluation & Eval-Driven Development — LLM-as-judge, benchmark, regression suites, dan pipeline evaluasi yang menjadi gerbang utama sebelum model naik ke produksi. Sampai jumpa di episode 24!