Menghadirkan model ke perangkat dengan sumber daya terbatas: quantization FP16/INT8/GGUF/AWQ/GPTQ, pruning dan distillation, lalu praktik optimasi dengan ONNX Runtime, TFLite, dan llama.cpp untuk edge.

Sejauh ini kita berfokus membuat model akurat. Tapi akurasi bukan segalanya: di produksi, model dijalankan jutaan kali, pada perangkat dari data center sampai smartphone, dengan batasan biaya dan latency yang keras. Episode ini membahas sisi efisiensi — bagaimana menjalankan model seakurat mungkin dengan resource sekecil mungkin.
Keterampilan ini semakin penting seiring tren 2025-2026: model besar dijalankan di laptop dan mobile, inference menjadi mayoritas biaya AI enterprise, dan quantization menjadi pembeda antara model yang "bisa" vs yang "layak produksi". Ini juga jembatan menuju episode 20 tentang deployment.
Model dilatih dalam FP32 (32-bit per bobot). Quantization menyimpan bobot dalam presisi lebih rendah — FP16, INT8, atau bahkan 4-bit — sehingga:
Trade-offnya adalah sedikit penurunan akurasi. Seni quantization adalah meminimalkan kerugian itu.
| Presisi | Ukuran | Umum untuk |
|---|---|---|
| FP16/BF16 | 2 byte/bobot | GPU inference, aman minimal loss |
| INT8 | 1 byte/bobot | CPU/NPU, loss kecil dengan PTQ yang baik |
| 4-bit (GGUF/AWQ/GPTQ) | 0.5 byte/bobot | LLM di perangkat dengan memori terbatas |
PTQ (Post-Training Quantization) — tanpa training ulang:
QAT (Quantization-Aware Training) — quantization disimulasikan selama training:
Aturan praktis: model besar dan overparameterized toleran terhadap PTQ; model kecil dan tugas sensitif butuh QAT.
Untuk LLM, format quantization sangat penting karena menentukan runtime yang bisa memakainya:
llama.cpp, jalan di CPU dan GPU dengan memori minimal. Standar untuk model lokal di laptop/mobile.huggingface-cli download Qwen/Qwen2.5-1.5B-Instruct-GGUF \
--local-dir ./qwen-gguf --include "qwen2.5-1.5b-instruct-q4_k_m.gguf"File GGUF bisa langsung dijalankan llama.cpp:
./llama-cli -m ./qwen-gguf/qwen2.5-1.5b-instruct-q4_k_m.gguf -p "Halo, siapa kamu?"Tip
Saat memilih kuantisasi GGUF, perhatikan nama: q4_k_m (4-bit, balance kualitas), q8_0 (8-bit, loss kecil), q2_k (2-bit, sangat kecil tapi kualitas turun). Untuk kebanyakan kasus, q4_k_m adalah sweet spot antara ukuran dan kualitas.
Pruning menghapus bobot yang hampir nol (tidak berkontribusi) dari jaringan. Setelah pruning, matriks menjadi sparse, dan dengan hardware/runtime yang mendukung, ukuran dan latency turun. Dua pendekatan:
Pruning + quantization sering digabung dan dapat memangkas model hingga 90% tanpa kehilangan akurasi signifikan (dengan fine-tune).
Knowledge distillation melatih student kecil meniru teacher besar — bukan dari label, tapi dari distribusi output teacher (soft logits). Student belajar "keyakinan" teacher, bukan sekadar jawaban benar.
Hasilnya: model kecil dengan akurasi mengejutkan, jauh lebih baik daripada melatih model kecil dari nol. Ini cara industri membuat model edge (misal MobileNet versi distilled). Konsep yang sama dipakai mengompresi LLM besar menjadi model kecil yang menjalankan tugas tertentu.
ONNX (Open Neural Network Exchange) adalah format pertukaran model lintas framework. ONNX Runtime mengoptimasi eksekusi di banyak hardware:
import torch
import onnxruntime as ort
model.eval()
torch.onnx.export(model, dummy_input, "model.onnx",
input_names=["input"], output_names=["output"],
dynamic_axes={"input": {0: "batch"}})
session = ort.InferenceSession("model.onnx", providers=["CPUExecutionProvider"])
result = session.run(None, {"input": batch_numpy})dynamic_axes mengizinkan variasi ukuran batch. ONNX Runtime bisa memakai TensorRT/CUDA provider di GPU — kombinasi quantization + provider sering memberi percepatan 2-5x.
Untuk Android/iOS, TensorFlow Lite adalah jalur utama. Model dikonversi dengan quantization INT8 dan post-training optimization:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model("model_saved")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
with open("model.tflite", "wb") as f:
f.write(tflite_model)TFLite mendukung GPU delegate dan NPU di perangkat — menjadikan model berjalan real-time di smartphone.
Warning
Selalu evaluasi model terquantisasi pada hardware target dengan dataset evaluasi yang sama. Akurasi yang bagus di GPU tidak menjamin hal yang sama di CPU INT8 — perbedaan runtime (misal perlakuan rounding) bisa mengubah hasil. Ukur, jangan menebak.
Pada episode 19 ini, kalian telah menguasai optimisasi inference.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan menyebarkan model: deployment & serving — TorchServe, vLLM untuk LLM, Triton Inference Server, Docker, plus monitoring drift, latency, dan throughput dengan OpenTelemetry. Sampai jumpa di episode 20!