Menekan biaya ML yang paling besar: mengukur GPU utilization dengan benar, quantisasi FP16 dan INT8, dynamic batching, knowledge distillation, serta strategi cost management seperti spot instance dan autoscaling ke nol

Setelah episode 21 membangun platform GenAI, saatnya bicara hal yang biasanya baru disadari setelah tagihan cloud pertama datang: biaya. GPU adalah komponen hardware termahal yang biasa dipakai MLOps, dan dengan GenAI, biaya tidak lagi hanya soal instance — ia juga soal token yang dibayar per pemakaian.
Mengapa cost optimization penting? Karena model yang bagus tapi terlalu mahal tidak akan bertahan. Di industri, perbedaan antara tim yang modelnya di-deploy dan yang hanya jadi riset sering kali bukan kualitas model, melainkan ekonominya — berapa rupiah per seribu prediksi. Episode ini membedah GPU utilization, quantization, batching, dan strategi cost management.
Anda tidak bisa mengoptimalkan apa yang tidak diukur. GPU utilization bukan soal seberapa keras GPU bekerja sesekali — ia soal seberapa produktif GPU mengisi waktu-nya.
nvidia-smi --query-gpu=utilization.gpu,memory.used \
--format=csv -l 5Untuk pengukuran berkelanjutan di produksi, gunakan DCGM (Data Center GPU Manager) yang diekspor ke Prometheus (episode 12). Target utilization yang sehat untuk inference biasanya 50-80%; di bawah itu, kalian membayar GPU yang menganggur.
Tip
Aturan 80/20: mayoritas pemborosan GPU berasal dari hal-hal membosankan — instance menganggur, batching tidak aktif, dan model yang lebih besar dari kebutuhan. Optimalkan ketiganya sebelum berpikir memindahkan workload ke hardware khusus.
Model dilatih di FP32, tetapi untuk inference tidak semua presisi itu diperlukan. Quantization menurunkan presisi angka sehingga model lebih kecil, lebih cepat, dan hemat memory:
Contoh quantisasi dinamis dengan PyTorch:
model_int8 = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear}, dtype=torch.qint8
)Aturan wajib: quantisasi tanpa evaluasi itu berbahaya — selalu bandingkan metrik model original vs terkuantisasi pada dataset evaluasi (episode 15) sebelum promosi.
GPU dirancang untuk komputasi paralel besar. Satu request kecil memakai GPU yang sama dengan satu batch besar, hanya lebih boros. Dynamic batching menggabungkan beberapa request yang datang bersamaan menjadi satu batch — throughput naik drastis, dengan trade-off latency per request sedikit naik (pembahasan lanjutan di episode 23).
Tanpa batching: 10 request × 20ms (berurutan) → 200ms per batch slot
Dengan batching: 10 request × 25ms (satu batch) → 25ms per requestFrameworks serving seperti Triton, TorchServe, dan KServe mendukung dynamic batching bawaan — aktifkan, lalu ukur trade-off latency vs throughput.
Model besar mengajarkan model kecil: distillation melatih student model agar meniru teacher model yang lebih akurat. Hasilnya: model dengan sebagian kecil ukuran dan biaya, mempertahankan sebagian besar kualitas. Ini keputusan arsitektur paling efektif untuk inference cost jangka panjang — satu kali investasi training, hemat di setiap prediksi.
Untuk LLM via API, biaya adalah per token — maka metric biaya per pertanyaan menjadi wajib di platform:
cost_per_question = (input_tokens × input_price + output_tokens × output_price)Alur yang disarankan, dari yang paling mudah:
Setiap langkah diukur sebelum dan sesudah — cost per 1000 prediksi adalah satu-satunya metrik yang menentukan.
Pada episode 22 ini, kalian telah mengoptimalkan biaya dan GPU.
Inti yang harus dibawa pulang:
Di episode 23 selanjutnya kita akan membahas performance & latency tuning — latency SLO, optimisasi model, caching hasil prediksi, dan teknik menurunkan latensi inference. Sampai jumpa di episode 23!