0% read

Cara Fine-Tune Gemma 4 dengan LoRA (Langkah demi Langkah)

Apr 7, 2026

Gemma 4 sudah mengesankan dari bawaan, tapi bagaimana jika kamu butuh ia berbicara seperti brand-mu, mengikuti format output spesifikmu, atau menguasai domain khusus yang membuat model umum kesulitan? Di situlah fine-tuning berperan.

Kabar baik: kamu tidak butuh kluster A100 lagi. Dengan LoRA dan tool bernama Unsloth, kamu bisa fine-tune Gemma 4 di satu GPU dalam waktu kurang dari satu jam. Mari kita bahas seluruh prosesnya.

Mengapa Fine-Tune Sama Sekali?

Sebelum kamu menginvestasikan usaha, pastikan fine-tuning benar-benar yang kamu butuhkan. Berikut panduan keputusan cepat:

SituasiSolusi
Model tidak tahu domain-muFine-tune dengan data domain
Model mengabaikan format outputFine-tune dengan contoh format
Model butuh info terkiniGunakan RAG saja
Model terlalu verbose/singkatCoba prompt engineering dulu
Model kadang memberi jawaban salahCoba few-shot prompting dulu

Jika prompt engineering dan RAG tidak cukup, fine-tuning adalah langkah selanjutnya. Sebelum mendalami, coba prompt Gemma 4 terbaik kami — kamu mungkin memecahkan masalah hanya dengan prompting lebih baik. Untuk melihat lebih luas apa yang Gemma 4 bisa lakukan sebelum kamu mulai menyesuaikannya, cek panduan kasus penggunaan kami.

LoRA dan QLoRA Dijelaskan (Secara Sederhana)

LoRA (Low-Rank Adaptation) tidak memodifikasi bobot model asli. Sebaliknya, ia melatih set kecil bobot adapter yang duduk di atas model dasar. Bayangkan seperti memasang lensa kustom pada kamera daripada membangun ulang kamera.

  • Model dasar: dibekukan, tidak disentuh
  • Adapter: kecil (biasanya 1-5% dari ukuran model dasar)
  • Hasil: mendekati kualitas fine-tune penuh dengan sebagian kecil biaya

QLoRA melangkah lebih jauh — memuat model dasar dalam bentuk terkuantisasi 4-bit, memotong penggunaan memori sekitar setengahnya. Kamu mendapat 90%+ kualitas LoRA sambil muat di GPU yang jauh lebih kecil.

MetodeVRAM Dibutuhkan (Gemma 4 E4B)VRAM Dibutuhkan (Gemma 4 26B)Kualitas
Fine-tune penuh32GB+100GB+Terbaik
LoRA16GB48GB~98% dari penuh
QLoRA8GB24GB~95% dari penuh

Menyiapkan Unsloth

Unsloth adalah cara tercepat untuk fine-tune Gemma 4 dengan LoRA. Ia melakukan patch model untuk pelatihan 2x lebih cepat dan penggunaan memori 60% lebih sedikit dibanding HuggingFace vanilla.

# Buat virtual environment
python -m venv gemma4-finetune
source gemma4-finetune/bin/activate

# Instal Unsloth (termasuk semua dependensi)
pip install unsloth

# Untuk QLoRA di GPU lama, instal juga:
pip install bitsandbytes

Verifikasi setup-mu:

import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"GPU: {torch.cuda.get_device_name(0)}")
print(f"VRAM: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f} GB")

Menyiapkan Data Pelatihan

Datamu harus dalam format JSONL, dengan setiap baris berisi percakapan. Berikut struktur yang diharapkan Gemma 4:

{"messages": [{"role": "user", "content": "Apa kebijakan pengembalian?"}, {"role": "assistant", "content": "Kebijakan pengembalian kami memungkinkan pengembalian dalam 30 hari pembelian dengan struk asli."}]}
{"messages": [{"role": "user", "content": "Apakah kalian kirim internasional?"}, {"role": "assistant", "content": "Ya, kami kirim ke 45 negara. Pengiriman butuh 7-14 hari kerja."}]}
{"messages": [{"role": "system", "content": "Kamu adalah asisten medical coding."}, {"role": "user", "content": "Code: Pasien dengan bronkitis akut"}, {"role": "assistant", "content": "ICD-10: J20.9 - Bronkitis akut, tidak spesifik"}]}

Tips kualitas data:

  • 500-1000 contoh adalah sweet spot untuk sebagian besar tugas
  • Lebih banyak tidak selalu lebih baik — 500 contoh berkualitas mengalahkan 5000 yang asal-asalan
  • Sertakan edge case dan contoh negatif
  • Jaga respons konsisten dalam format dan nada
  • Validasi JSONL-mu sebelum pelatihan:
import json

def validate_jsonl(filepath):
    valid = 0
    errors = 0
    with open(filepath, 'r') as f:
        for i, line in enumerate(f, 1):
            try:
                data = json.loads(line)
                assert "messages" in data, "Missing 'messages' key"
                assert len(data["messages"]) >= 2, "Need at least 2 messages"
                valid += 1
            except (json.JSONDecodeError, AssertionError) as e:
                print(f"Line {i}: {e}")
                errors += 1
    print(f"\nValid: {valid}, Errors: {errors}")

validate_jsonl("training_data.jsonl")

Konfigurasi Pelatihan

Berikut skrip pelatihan lengkap menggunakan Unsloth:

from unsloth import FastLanguageModel
import torch

# Load model dengan QLoRA (4-bit)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="google/gemma-4-e4b",
    max_seq_length=4096,
    dtype=None,           # Auto-detect
    load_in_4bit=True,    # QLoRA
)

# Tambahkan LoRA adapter
model = FastLanguageModel.get_peft_model(
    model,
    r=16,                  # Rank — lebih tinggi = lebih kapasitas, lebih VRAM
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
    lora_alpha=16,
    lora_dropout=0,        # Unsloth teroptimasi — biarkan 0
    bias="none",
    use_gradient_checkpointing="unsloth",
)

# Load data pelatihan
from datasets import load_dataset
dataset = load_dataset("json", data_files="training_data.jsonl", split="train")

# Argumen pelatihan
from trl import SFTTrainer
from transformers import TrainingArguments

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
    max_seq_length=4096,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=10,
        num_train_epochs=3,
        learning_rate=2e-4,
        fp16=not torch.cuda.is_bf16_supported(),
        bf16=torch.cuda.is_bf16_supported(),
        logging_steps=10,
        output_dir="outputs",
        optim="adamw_8bit",
        seed=42,
    ),
)

# Latih
trainer.train()

# Simpan LoRA adapter
model.save_pretrained("gemma4-finetuned-lora")
tokenizer.save_pretrained("gemma4-finetuned-lora")

Parameter kunci untuk dituning:

  • r=16: LoRA rank. Mulai dengan 16, naik ke 32 atau 64 jika kualitas kurang
  • num_train_epochs=3: Biasanya 2-5 sudah cukup. Waspada overfitting
  • learning_rate=2e-4: Default bekerja baik. Turunkan ke 1e-4 jika pelatihan tidak stabil
  • per_device_train_batch_size=2: Naikkan jika punya ruang VRAM

Ekspor ke GGUF

Setelah adapter kamu terlatih, kamu mungkin ingin menjalankannya secara lokal dengan Ollama. Itu berarti konversi ke format GGUF. Untuk rincian detail opsi kuantisasi dan trade-off-nya, lihat panduan GGUF kami.

# Merge adapter dan ekspor ke GGUF (kuantisasi Q4_K_M)
model.save_pretrained_gguf(
    "gemma4-finetuned-gguf",
    tokenizer,
    quantization_method="q4_k_m",
)

# Atau ekspor di beberapa level kuantisasi
for method in ["q4_k_m", "q5_k_m", "q8_0"]:
    model.save_pretrained_gguf(
        f"gemma4-finetuned-{method}",
        tokenizer,
        quantization_method=method,
    )
KuantisasiUkuran File (E4B)Kehilangan KualitasTerbaik Untuk
Q4_K_M~2.5 GBMinimalKebanyakan user
Q5_K_M~3.2 GBSangat kecilFokus kualitas
Q8_0~4.8 GBDapat diabaikanSaat VRAM memungkinkan

Deploy dengan Ollama

Buat Modelfile untuk membawa model fine-tuned-mu ke Ollama:

# Modelfile
FROM ./gemma4-finetuned-gguf/gemma4-finetuned-q4_k_m.gguf

PARAMETER temperature 0.7
PARAMETER top_p 0.9

SYSTEM "Kamu adalah asisten yang membantu, fine-tuned untuk customer support."

Lalu build dan jalankan:

# Buat model kustom
ollama create my-gemma4 -f Modelfile

# Test
ollama run my-gemma4 "Apa kebijakan pengembalian kalian?"

# Verifikasi terdaftar
ollama list

Model fine-tuned-mu sekarang berjalan persis seperti model Ollama lainnya. Kamu bisa menggunakannya dengan API Ollama, membangun aplikasi di atasnya, atau membagikannya dengan tim-mu.

Masalah Umum dan Solusinya

Kehabisan memori saat pelatihan: Turunkan per_device_train_batch_size ke 1, aktifkan gradient_checkpointing, atau beralih ke model dasar lebih kecil.

Model menghasilkan sampah setelah fine-tuning: Datamu mungkin punya masalah formatting, atau kamu berlatih terlalu banyak epoch. Kurangi epoch dan validasi JSONL-mu.

Ekspor GGUF gagal: Pastikan kamu punya ruang disk cukup (3-5x ukuran model selama konversi) dan versi Unsloth-mu up to date.

Training loss tidak menurun: Learning rate mungkin terlalu rendah. Coba 5e-4. Juga cek apakah datamu benar-benar punya pola yang kamu ingin model pelajari.

Langkah Selanjutnya

gemma4 — interact

Stop reading. Start building.

~/gemma4 $ Get hands-on with the models discussed in this guide. No deployment, no friction, 100% free playground.

Launch Playground />
Gemma 4 AI

Gemma 4 AI

Related Guides

Cara Fine-Tune Gemma 4 dengan LoRA (Langkah demi Langkah) | Blog