Post-Training LLM dengan TRL: SFT, Reward Modeling, dan DPO
Setelah sebuah base language model selesai dipretraining, model tersebut masih perlu dibentuk agar berguna dan selaras dengan ekspektasi manusia. TRL (Transformer Reinforcement Learning) adalah library dari Hugging Face untuk seluruh tahap post-training tersebut, mulai dari supervised fine-tuning sampai preference optimization. Tutorial ini membahas pipeline post-training modern dan menunjukkan cara memakai trainer-trainer TRL secara praktis, dengan Direct Preference Optimization (DPO) sebagai bagian utamanya.
Apa Itu TRL dan Posisinya
TRL adalah library yang berfokus pada langkah-langkah setelah pretraining. Tidak seperti wrapper yang sebagian besar hanya menyederhanakan konfigurasi, TRL menyediakan kelas-kelas trainer konkret untuk seluruh stack alignment: supervised fine-tuning, reward modeling, serta beberapa algoritma preference-optimization dan reinforcement learning.
TRL dibangun langsung di atas ekosistem Hugging Face:
- Transformers untuk memuat model dan tokenizer.
- PEFT untuk adapter yang hemat parameter seperti LoRA, sehingga model besar bisa dilatih di perangkat keras yang sederhana.
- Accelerate untuk pelatihan terdistribusi dan mixed-precision.
- Datasets untuk memuat dan memproses data.
Karena TRL memakai ulang komponen-komponen ini, semua hal yang sudah Anda ketahui tentang AutoModelForCausalLM, tokenizer, atau konfigurasi LoRA berlaku langsung di sini.
Pipeline Post-Training LLM Modern
Model instruction-following atau chat pada umumnya melewati tiga tahap:
TRL mencakup tahap 2 dan 3. Sebagian besar pekerjaan alignment di produksi saat ini menggabungkan satu putaran SFT yang diikuti satu putaran preference-optimization.
Instalasi
# Stack inti
pip install trl peft datasets accelerate
Ekstra yang direkomendasikan
pip install transformers bitsandbytes
pip install wandb # pelacakan eksperimen opsional
Verifikasi instalasi dan pastikan GPU terlihat:
import torch
import trl
print("Versi TRL:", trl.version)
print("CUDA tersedia:", torch.cuda.isavailable())
Trainer TRL bisa berjalan di CPU untuk eksperimen sangat kecil, tetapi post-training yang realistis membutuhkan GPU.
Format Dataset di TRL
TRL menstandarkan beberapa bentuk dataset. Menyiapkan format ini dengan benar adalah sebagian besar pekerjaannya.
- Format conversational (chat) untuk SFT: kolom
messagesberisi daftar dictionary{"role", "content"}. - Format preference untuk reward modeling dan DPO: kolom bernama
prompt,chosen, danrejected.
Format conversational terlihat seperti ini:
example = {
"messages": [
{"role": "system", "content": "Anda adalah asisten yang membantu."},
{"role": "user", "content": "Jelaskan apa itu vector database."},
{"role": "assistant", "content": "Vector database menyimpan embedding..."},
]
}
Format preference yang dipakai di sepanjang sisa tutorial ini:
example = {
"prompt": "Jelaskan apa itu vector database.",
"chosen": "Vector database menyimpan embedding dan mendukung similarity search...",
"rejected": "Itu cuma database biasa.",
}
TRL menerapkan chat template model secara otomatis ketika dataset berbentuk conversational, sehingga Anda jarang perlu memformat string secara manual.