Memahami kapan fine-tuning benar-benar dibutuhkan dan kapan cukup prompt/RAG. Dibahas LoRA dan QLoRA, persiapan dataset, serta praktik fine-tune model kecil agar tidak membuang waktu dan biaya untuk yang tidak perlutype: text

Di episode 9 kalian memasang alat ukur. Episode ini membahas salah satu pertanyaan paling sering disalahpahami AI engineer: fine-tuning. Banyak tim langsung fine-tune model saat prompt "tidak cukup bagus" — padahal 90% kasus, yang dibutuhkan adalah prompt yang lebih baik, RAG, atau evaluasi yang lebih teliti.
Mengapa episode ini penting? Karena fine-tuning itu mahal: biaya data, waktu, dan risiko. Memahami kapan melakukannya — dan kapan tidak — adalah keterampilan yang menyelamatkan tim dari pemborosan besar. Dan ketika benar-benar dibutuhkan, teknik modern (LoRA/QLoRA) membuatnya jauh lebih murah daripada yang dibayangkan.
Pertanyaan kuncinya: "Apakah masalahnya bisa diselesaikan dengan prompt?"
| Situasi | Solusi yang Tepat |
|---|---|
| Model belum tahu fakta spesifik | RAG (episode 7) |
| Format output tidak konsisten | Structured output (episode 5) |
| Gaya/kepribadian yang diinginkan | Prompt engineering yang matang |
| Terminologi/format domain yang jarang diketahui model | Fine-tuning |
| Biaya/latensi terlalu tinggi (model terlalu besar) | Fine-tuning (model kecil bisa mengimbangi) |
| Data sensitif, model API dilarang | Self-host + fine-tune (episode 21) |
Aturan praktisnya: coba prompt + RAG + eval dulu; fine-tune hanya jika langkah-langkah itu gagal di bawah evaluasi yang terukur. Fine-tune bukan solusi prompt yang malas.
Fine-tuning mengubah bobot model dengan data contoh jawaban yang diinginkan. Yang berubah adalah perilaku: cara model mengikuti format, gaya menulis, atau memahami domain — bukan menanamkan fakta baru (untuk itu tetap butuh RAG).
Konsekuensi penting: fine-tuning tidak membuat model tahu fakta yang tidak ada di data training-nya. Ia mengajarkan bagaimana menjawab, bukan apa yang harus dijawab. Kesalahan memahami ini adalah sumber paling umum kekecewaan terhadap fine-tuning.
Fine-tune penuh (semua bobot) butuh GPU raksasa. LoRA (Low-Rank Adaptation) mengubahnya: alih-alih melatih semua bobot, LoRA melatih matriks tambahan kecil yang "menyuntikkan" adaptasi ke lapisan model. Parameter terlatih turun drastis (0.1-1% dari total).
QLoRA menambahkan quantisasi: bobot inti dikompres ke presisi rendah (4-bit) sehingga model kecil bisa di-fine-tune di satu GPU konsumen.
| Aspek | Full fine-tune | LoRA | QLoRA |
|---|---|---|---|
| Bobot yang dilatih | Semua | Sangat sedikit | Sangat sedikit |
| Kebutuhan GPU | Sangat besar | Besar | Satu GPU (konsumen) |
| Kualitas | Tertinggi | Mendekati full | Sedikit di bawah LoRA |
| Ukuran output | Model penuh | Adapter kecil (MB) | Adapter kecil (MB) |
Kelebihan paling praktis: output LoRA berupa adapter kecil (puluhan MB), bukan model utuh — mudah disimpan, diberi versi, dan diganti.
Fine-tuning adalah proyek data, bukan proyek kode. Dataset harus berkualitas tinggi: contoh kecil yang bagus mengalahkan contoh banyak yang asal-asalan. Format dasar untuk instruksi:
{"instruction": "Tulis ringkasan laporan ini",
"input": "Laporan penjualan Q3...",
"output": "Penjualan Q3 tumbuh 12%, didorong segmen digital."}
{"instruction": "Konversi nominal ke rupiah tertulis",
"input": "150000",
"output": "seratus lima puluh ribu rupiah"}Aturan emas persiapan data:
Untuk pemula, jalur termudah adalah Unsloth (optimasi fine-tuning) di atas Qwen/Llama kecil dengan QLoRA:
from unsloth import FastLanguageModel
from unsloth.chat_templates import get_chat_template
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Qwen2.5-7B-Instruct",
max_seq_length=2048,
load_in_4bit=True,
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
lora_alpha=16,
lora_dropout=0,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
use_gradient_checkpointing=True,
)
# ... siapkan dataset, lalu latih dengan SFTTrainer ...Jalur ini bisa dilakukan di Google Colab gratis. Hasil akhirnya adalah adapter kecil yang bisa digabungkan ke model kapan saja:
model.save_pretrained_merged("model-hasil", tokenizer, save_method="merged_16bit")Tip
Selalu mulai dari model kecil (1.5B-8B) dan evaluasi hasilnya sebelum berinvestasi ke model besar. Untuk banyak produk, model 3-8B yang di-fine-tune sudah mengalahkan model frontier yang di-prompting — dengan biaya serving sepersepuluhnya (episode 22).
Inti yang harus dibawa pulang:
Di episode 11 selanjutnya kita masuk wilayah paling menarik di 2026: agents & agentic workflows — ReAct, tool loops, orchestrasi, multi-agent, dan membangun agent end-to-end yang bisa menyelesaikan tugas berlapis. Sampai jumpa di episode 11!