Tutorial dari persiapan GPU dan dataset sampai evaluasi adapter, merge opsional, GGUF, dan serving — lengkap dengan checkpoint, troubleshooting, dan batas kapan harus handover ke tim teknis.
LoRA memungkinkan model pretrained diadaptasi tanpa melatih ulang seluruh bobotnya. Base model tetap dibekukan, sementara adapter berukuran jauh lebih kecil dilatih untuk mengubah pola perilaku model. QLoRA menambahkan quantization pada base model agar penggunaan memory training dapat ditekan. Tutorial ini memakai Qwen2.5 Instruct + LLaMA-Factory sebagai contoh praktik: mulai dari baseline, dataset, WebUI training, evaluasi adapter, merge bila perlu, lalu serving melalui GGUF dan Ollama.
Transparansi AI. Artikel ini disusun dengan bantuan AI untuk riset dan drafting, kemudian ditinjau dan disunting oleh tim Sequel Cloud untuk memastikan akurasi teknis dan relevansi isi.
Intisari Artikel
- LoRA melatih adapter kecil, bukan seluruh base model. QLoRA memakai quantization untuk menekan memory training, tetapi kebutuhan VRAM tetap bergantung konfigurasi.
- Fine-tuning bukan otomatis pilihan terbaik untuk knowledge yang sering berubah. Untuk harga, stok, SOP, atau dokumen yang harus selalu fresh, retrieval/RAG biasanya lebih mudah diperbarui dan diaudit.
- Training selesai bukan berarti eksperimen berhasil. Adapter harus dibandingkan dengan baseline menggunakan prompt evaluasi yang sama sebelum merge atau deployment.
- WebUI menjadi jalur utama agar mudah diikuti; CLI/YAML disediakan sebagai jalur reproducible untuk pembaca teknis.
- Setiap tahap punya checkpoint dan batas handover. Driver/CUDA conflict, repeated OOM, merge/export, GGUF, dan production serving masuk wilayah teknis yang lebih dalam.
Siapa yang Bisa Mengikuti Tutorial Ini?
Tutorial ini bukan untuk pemula komputer absolut, tetapi juga tidak mengharuskan latar belakang machine-learning engineering. Pembaca yang nyaman membuka Terminal, copy-paste command, membuat file teks, membaca pesan error sederhana, dan menggunakan browser dapat mengikuti jalur utamanya.
Badge di setiap bagian bukan label “siapa boleh membaca”. Badge menjawab satu pertanyaan praktis: bagian ini masih aman dicoba sendiri, atau sudah waktunya meminta bantuan teknis?
- Bisa Diikuti Non-Teknis: keputusan, evaluasi, atau langkah yang tidak mengubah sistem secara berisiko.
- Non-Teknis + Panduan: ada terminal/config sederhana; lanjut selama checkpoint sesuai.
- Handover ke Tim Teknis: berhenti bila checkpoint gagal dan masalah masuk driver, dependency, permission, networking, atau system config.
- Tim IT / Engineering: production serving, security, deployment, dan troubleshooting lanjutan.
1. Pastikan Fine-Tuning Memang Solusi yang Tepat
Fine-tuning masuk akal ketika masalahnya adalah perilaku output: format jawaban, tone, pola respons, atau task behavior yang ingin dibuat lebih konsisten tanpa harus diulang terus dalam prompt.
Contoh: customer-service assistant diminta selalu mengikuti pola empati → tindakan → langkah berikutnya. Ini lebih dekat ke behavior adaptation daripada knowledge retrieval.
Sebaliknya, bila masalahnya adalah harga produk, stok, SOP terbaru, atau dokumen internal yang sering berubah, fine-tuning biasanya bukan pilihan pertama. Knowledge seperti itu lebih mudah diperbarui dan dilacak melalui retrieval/RAG.
Serial terkait: Prompt Engineering vs Fine-Tuning vs RAG.
2. Simpan Baseline Sebelum Menyentuh Model
Eksperimen tanpa baseline membuat hasil sulit dinilai. Sebelum training, simpan 5–10 prompt evaluasi dan jawaban dari base model.
Prompt contoh: “Paket saya sudah lima hari belum sampai. Apa yang harus saya lakukan?”
Prompt contoh: “Produk datang rusak. Bagaimana proses penggantiannya?”
Simpan jawaban awal ke file baseline-evaluation.md. Prompt ini tidak boleh diubah setelah training, karena nantinya dipakai untuk membandingkan base model vs base model + LoRA adapter.
3. Pilih Model Eksperimen: Kecil Dulu
Tutorial ini memakai keluarga Qwen2.5 Instruct sebagai contoh. Model kecil seperti varian 1.5B atau 3B lebih cocok untuk membuktikan pipeline sebelum mencoba model yang lebih besar.
Tujuan eksperimen pertama bukan memenangkan benchmark. Tujuannya memastikan alur dataset → train → adapter → evaluate benar-benar bekerja.
LoRA mempertahankan base model tetap beku dan melatih adapter kecil. Adapter harus diuji sebelum dianggap berhasil.
4. Cek GPU dan Catat VRAM
Jalur utama tutorial mengasumsikan Linux dengan GPU NVIDIA. Sebelum install framework, pastikan GPU dan driver terlihat oleh sistem.
Aksi
Buka Terminal. Pada server remote, masuk melalui SSH:
ssh user@alamat-serverLalu jalankan:
nvidia-smiYang Muncul
Idealnya terlihat tabel berisi nama GPU, driver, memory usage, dan proses yang sedang memakai GPU.
Checkpoint
GPU terdeteksi dan VRAM terlihat. Catat nama GPU, total VRAM, dan memory yang sedang terpakai.
Jika Tidak Sesuai
nvidia-smi tidak tersedia atau NVIDIA-SMI gagal berkomunikasi dengan driver, jangan melanjutkan training. Driver/CUDA troubleshooting adalah system-level work.Jangan Jadikan Angka VRAM sebagai Hukum
QLoRA dapat menekan memory karena base model dimuat dalam precision rendah, tetapi kebutuhan aktual tetap dipengaruhi ukuran model, sequence length, batch size, gradient accumulation, target modules, optimizer, precision, dan gradient checkpointing. Karena itu artikel ini tidak menjanjikan “model X pasti cukup dengan Y GB”.
5. Siapkan Python, Git, Folder Kerja, dan Virtual Environment
Cek Python dan Git
python3 --version
git --versionCheckpoint: kedua command berjalan tanpa command not found.
Buat Working Directory
mkdir -p ~/lora-lab
cd ~/lora-lab
pwdYang muncul: path seperti /home/user/lora-lab. Jangan jalankan eksperimen dari random directory yang juga menyimpan aplikasi production.
Clone LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LlamaFactory.git
cd LlamaFactoryBuat Virtual Environment
python3 -m venv .venv
source .venv/bin/activate
which pythonCheckpoint: path Python mengarah ke folder .venv.
Install LLaMA-Factory
pip install -e .
pip install -r requirements/metrics.txt
llamafactory-cli versionCheckpoint: versi LLaMA-Factory muncul tanpa traceback.
Pastikan PyTorch Melihat GPU
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CUDA tidak tersedia')"Idealnya keluar True dan nama GPU.
nvidia-smi bekerja tetapi PyTorch menjawab False, kemungkinan ada mismatch dependency/PyTorch/CUDA. Jangan “menebak-nebak” versi package sampai environment rusak.6. Jalankan LLaMA-Factory WebUI
Dengan virtual environment masih aktif, jalankan:
llamafactory-cli webuiTerminal akan menampilkan alamat WebUI. Buka alamat tersebut melalui browser. Pada instalasi lokal, alamat biasanya berupa localhost dengan port yang ditampilkan oleh proses.
Checkpoint: halaman LLaMA Board terbuka dan area Training, Evaluation & Prediction, Chat, serta Export tersedia.
0.0.0.0. Untuk remote environment, gunakan akses internal atau SSH tunnel yang dikontrol.7. Siapkan Dataset Customer Service
Use case contoh adalah assistant CS yang harus konsisten memakai struktur empati → tindakan → langkah berikutnya. Dataset seharusnya mengajarkan pola respons, bukan membuat janji bisnis yang tidak dapat diverifikasi.
Buat File Dataset
Dari folder repository LLaMA-Factory:
nano data/sales_cs_dataset.jsonIsi dengan contoh seperti berikut:
[
{
"instruction": "Jawab keluhan pelanggan tentang keterlambatan pengiriman dengan nada empatik, jelaskan bahwa paket sedang dilacak, lalu berikan langkah berikutnya.",
"input": "Paket saya belum sampai sudah 5 hari. Ini mengecewakan.",
"output": "Mohon maaf atas keterlambatan pengiriman. Tim sedang melakukan pengecekan posisi paket. Nomor tiket pelacakan akan diberikan setelah status terbaru tersedia."
}
]Validasi JSON
python -m json.tool data/sales_cs_dataset.json > /dev/null && echo "JSON valid"Checkpoint: terminal menampilkan JSON valid.
Daftarkan Dataset
Buka data/dataset_info.json dan tambahkan entry berikut tanpa merusak struktur JSON yang sudah ada:
"sales_cs_dataset": {
"file_name": "sales_cs_dataset.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}Restart WebUI bila dataset belum muncul. Dropdown Dataset harus menampilkan sales_cs_dataset.
8. Training LoRA / QLoRA melalui WebUI
Buka area Training di LLaMA Board. Nama field dapat berubah mengikuti versi LLaMA-Factory, jadi gunakan label current yang tersedia di WebUI dan hindari memaksa value lama bila UI sudah berbeda.
8.1 Pilih Model
Pilih/isi model Qwen2.5 Instruct yang berukuran kecil untuk eksperimen awal. Pastikan model, tokenizer, dan template tetap satu keluarga yang kompatibel.
8.2 Training Stage
Pilih SFT — Supervised Fine-Tuning.
8.3 Fine-Tuning Method
Pilih LoRA. Untuk jalur QLoRA, aktifkan 4-bit quantization hanya bila environment dan dependency mendukungnya.
8.4 Dataset
Pilih sales_cs_dataset. Jika tidak muncul, kembali ke registrasi dataset; jangan memilih dataset lain hanya agar tombol Start aktif.
8.5 Starting Configuration
Gunakan konfigurasi konservatif sebagai starting point, bukan “angka terbaik universal”:
| Parameter | Starting point tutorial | Catatan |
|---|---|---|
| Per-device batch | 1 | Naikkan hanya bila memory cukup. |
| Gradient accumulation | 8 | Mengompensasi batch kecil. |
| Learning rate | 1e-4 | Starting point LoRA, bukan universal optimum. |
| Epoch | 3 | Dataset kecil mudah overfit; evaluasi output. |
| LoRA rank | 8 | Kapasitas adapter meningkat jika rank naik. |
| LoRA target | all | Gunakan target yang kompatibel dengan setup current. |
| Cutoff length | Konservatif | Sesuaikan panjang contoh; makin panjang makin boros memory. |
| bf16 | Jika hardware mendukung | Jangan dipaksa pada hardware yang tidak kompatibel. |
| 4-bit | Jika QLoRA dipilih | Memerlukan environment quantization yang sesuai. |
8.6 Output Directory
Gunakan nama yang menjelaskan eksperimen, misalnya saves/qwen25-3b/lora/sales-cs-v1. Jangan menimpa experiment sebelumnya.
8.7 Klik Start
Training dianggap berhasil setelah behavior target membaik, bukan hanya karena process selesai atau loss turun.
9. Monitoring dan Troubleshooting
Log training akan menampilkan progress dan metric seperti loss. Loss berguna untuk melihat optimization berjalan, tetapi loss turun tidak otomatis membuktikan model lebih berguna.
Checkpoint Training Teknis
- Process tidak crash.
- Tidak ada persistent CUDA OOM.
- Loss tidak berubah menjadi NaN.
- Adapter checkpoint muncul di output directory.
CUDA Out of Memory
Jika log menampilkan CUDA out of memory, coba satu perubahan pada satu waktu:
- Kurangi per-device batch size.
- Pendekkan cutoff length.
- Gunakan model lebih kecil.
- Aktifkan 4-bit quantization bila jalur QLoRA memang dipakai.
- Gunakan gradient checkpointing bila tersedia dan sesuai.
- Periksa proses GPU lain dengan
nvidia-smi.
nvidia-smiDataset Tidak Ditemukan
Periksa nama entry di dataset_info.json, nama file, lokasi file, syntax JSON, lalu restart WebUI.
Loss NaN
Training Sangat Lambat
Periksa GPU utilization, model download, CPU/data-loading bottleneck, disk, dan compute capability. NVMe membantu I/O, tetapi fine-tuning LLM tetap compute-heavy.
10. Uji Adapter Sebelum Merge
Setelah adapter tersimpan, jangan langsung merge. Gunakan area Chat atau Evaluation & Prediction untuk memuat base model yang sama dan adapter hasil training.
Jalankan prompt baseline yang disimpan sebelum training. Bandingkan output secara berdampingan.
| Dimensi | Pertanyaan Evaluasi | Skor sederhana |
|---|---|---|
| Format | Apakah struktur jawaban mengikuti pola yang diinginkan? | 1–5 |
| Tone | Apakah gaya bahasa konsisten? | 1–5 |
| Instruction compliance | Apakah model melakukan pekerjaan yang diminta? | 1–5 |
| Factual discipline | Apakah model membuat janji/fakta yang tidak tersedia? | 1–5 |
11. Merge & Export Hanya Bila Diperlukan
Adapter LoRA tidak wajib di-merge. Banyak runtime dapat menggunakan base model + adapter langsung. Merge diperlukan bila deployment target lebih mudah menangani standalone model.
Di LLaMA-Factory buka area Export, lalu tentukan base model, adapter, export directory, dan opsi export yang sesuai.
Checkpoint: model hasil export tersimpan di directory baru. Jangan menimpa base model original.
12. Convert Model ke GGUF
Untuk jalur serving yang menggunakan Ollama pada tutorial ini, model hasil merge dikonversi ke GGUF menggunakan tooling llama.cpp. Compatibility architecture harus diverifikasi terhadap versi current.
Clone dan Build llama.cpp
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config ReleaseConvert Hugging Face Model
python3 convert_hf_to_gguf.py /path/to/merged-modelNama file output dapat berbeda mengikuti model dan tooling current. Cek file .gguf yang benar-benar dihasilkan.
Quantize — Opsional
./build/bin/llama-quantize /path/to/model-f16.gguf /path/to/model-Q4_K_M.gguf Q4_K_MQ4_K_M hanya contoh trade-off size/memory/quality, bukan universal best setting.
13. Serving Lokal dengan Ollama
Tutorial memakai jalur terkontrol merged model → GGUF → Ollama. Jangan mengasumsikan direktori Safetensors Qwen hasil merge selalu dapat langsung di-import ke Ollama.
Buat Modelfile
FROM ./model-Q4_K_M.gguf
SYSTEM "Anda adalah asisten layanan pelanggan yang mengikuti kebijakan perusahaan."
PARAMETER temperature 0.3Create dan Run
ollama create sales-assistant -f Modelfile
ollama run sales-assistantCheckpoint: model berjalan dan prompt evaluasi dapat dijalankan kembali. Cocokkan behavior dengan adapter yang diuji sebelum merge.
Training dan serving punya kebutuhan berbeda. Serving dipilih berdasarkan benchmark, bukan asumsi “CPU pasti cukup”.
Bila organisasi memiliki hardware/GPU sendiri tetapi membutuhkan fasilitas colocation, qRack dapat relevan sebagai tempat menjalankan hardware milik organisasi. Ini bukan GPU compute service dari Sequel.
qVM — Infrastruktur untuk Serving dan Internal AI Workload
Setelah training selesai di environment GPU, kebutuhan serving ditentukan oleh model, quantization, RAM, CPU, context length, concurrency, dan target latency. qVM dapat dipertimbangkan untuk eksperimen serving, internal API, atau workload AI ringan–menengah setelah benchmark menunjukkan resource-nya sesuai.
Sizing harus mengikuti benchmark workload aktual. qVM pada artikel ini tidak diposisikan sebagai GPU training environment.
Untuk dedicated/heavier serving workload, qMetal dapat dievaluasi bila karakteristik CPU, RAM, storage, concurrency, dan target latency memang membutuhkan kelas resource tersebut.
14. Bisa ollama run Belum Berarti Production-Ready
Local inference hanya membuktikan runtime bekerja. Production serving masih membutuhkan authentication, TLS, access control, firewall, resource limits, rate limiting, monitoring, health checks, logging, backup artifact, rollback, dan observability.
Pembaca boleh memahami seluruh alur, tetapi execution boundary berubah ketika risiko sistem dan production meningkat.
15. Appendix: YAML + CLI untuk Reproducibility
WebUI menjadi jalur utama tutorial. Untuk eksperimen yang harus direplikasi, simpan konfigurasi training sebagai YAML. Nama model dan template harus disesuaikan dengan setup current.
model_name_or_path: <QWEN_MODEL_ID>
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 8
lora_target: all
dataset: sales_cs_dataset
template: <CURRENT_QWEN_TEMPLATE>
cutoff_len: 1024
output_dir: saves/qwen25/lora/sales-cs-v1
logging_steps: 10
plot_loss: true
report_to: none
per_device_train_batch_size: 1
gradient_accumulation_steps: 8
learning_rate: 1.0e-4
num_train_epochs: 3.0
bf16: truellamafactory-cli train qwen_sales_cs_lora.yamlbf16 tergantung hardware; QLoRA membutuhkan quantization dependency yang sesuai; cutoff dan batch memengaruhi memory.16. Kapan Harus Kembali ke RAG atau Prompt Engineering?
Fine-tuning dapat mengubah behavior dan parameter model, tetapi bukan pengganti sistem knowledge yang harus fresh dan traceable.
| Masalah | Pendekatan yang lebih dekat |
|---|---|
| Tone tidak konsisten | Prompting atau LoRA |
| Format output harus disiplin | Structured generation / prompting / LoRA |
| Model harus mengikuti pola respons tertentu | LoRA dapat relevan |
| Harga atau stok harus terbaru | RAG / database / tool |
| SOP sering berubah | RAG |
| Jawaban harus punya source/citation | RAG lebih mudah diaudit |
| Behavior + knowledge internal | LoRA + RAG dapat dikombinasikan |
Untuk tutorial RAG lengkap, baca Membangun RAG Sendiri: Panduan Praktis dari Nol hingga Production.
Glosarium: Istilah Teknis dalam Bahasa Awam
| Istilah Teknis | Bahasa Awam | Makna dalam Artikel |
|---|---|---|
| Base Model | Model awal | Model pretrained sebelum adaptation. |
| Fine-Tuning | Pelatihan lanjutan | Menyesuaikan model terhadap contoh/task tertentu. |
| LoRA | Adapter kecil | Melatih matriks tambahan tanpa memperbarui seluruh base weights. |
| QLoRA | LoRA hemat memory | Base model dikuantisasi lalu LoRA adapter dilatih. |
| Adapter | Bobot tambahan | Artifact PEFT yang menyimpan adaptation hasil training. |
| SFT | Latihan dari contoh jawaban | Supervised Fine-Tuning dengan pasangan instruction/response. |
| Epoch | Satu putaran dataset | Berapa kali training melewati seluruh data. |
| Batch Size | Jumlah contoh per step | Salah satu faktor besar penggunaan memory. |
| Gradient Accumulation | Mengumpulkan beberapa step kecil | Memungkinkan effective batch lebih besar tanpa batch GPU besar. |
| Cutoff Length | Batas panjang sequence | Mempengaruhi context training dan memory. |
| VRAM | Memory GPU | Resource utama yang sering membatasi training. |
| Quantization | Menurunkan precision | Mengurangi ukuran/memory model dengan trade-off tertentu. |
| Merge | Menggabungkan adapter | Membuat standalone model dari base + adapter bila deployment membutuhkannya. |
| GGUF | Format model runtime | Format yang umum digunakan ekosistem llama.cpp dan dapat dipakai dalam jalur Ollama artikel ini. |
| Baseline | Kondisi sebelum training | Pembanding untuk menilai apakah adapter benar-benar membantu. |
| Overfitting | Menghafal latihan | Model terlihat bagus pada data latihan tetapi buruk pada variasi baru. |
| Checkpoint | Titik verifikasi | Kondisi yang harus benar sebelum melanjutkan langkah berikutnya. |
FAQ
Apakah LoRA sama dengan full fine-tuning?
Tidak. LoRA membekukan base model dan melatih parameter tambahan ber-rank rendah, sehingga jumlah parameter yang perlu dilatih jauh lebih kecil.
Apa perbedaan LoRA dan QLoRA?
QLoRA memakai base model yang dikuantisasi—umumnya 4-bit—kemudian melatih LoRA adapter di atasnya. Tujuannya menekan memory training, tetapi memory aktual tetap bergantung konfigurasi.
Apakah fine-tuning bisa menambahkan fakta baru?
Training dapat memengaruhi apa yang dipelajari model dari contoh, tetapi untuk knowledge yang sering berubah dan harus selalu fresh, retrieval lebih mudah diperbarui dan diaudit. Karena itu artikel tidak menggunakan aturan absolut “fine-tuning hanya mengajarkan behavior”.
Apakah GPU wajib?
Untuk workflow praktis LLM seperti tutorial ini, GPU sangat direkomendasikan. CPU training dapat menjadi terlalu lambat untuk iterasi yang produktif.
Apakah adapter harus di-merge?
Tidak. Adapter dapat dipakai bersama base model. Merge hanya diperlukan bila deployment target lebih mudah menangani standalone model.
Mengapa harus evaluasi sebelum merge?
Karena process training yang selesai hanya membuktikan pipeline berjalan. Yang harus dibuktikan berikutnya adalah apakah behavior target benar-benar membaik dibanding baseline.
Apakah qVM digunakan untuk training LoRA?
Artikel ini tidak memosisikan qVM sebagai GPU training environment. qVM lebih relevan untuk eksperimen serving, internal API, atau AI workload yang memang cocok setelah CPU/RAM/model/concurrency di-benchmark.
Kesimpulan
Fine-tuning dengan LoRA bukan proses “download model → klik train → selesai”. Workflow yang lebih sehat adalah tentukan behavior → simpan baseline → siapkan dataset → verifikasi environment → train adapter → cek checkpoint → bandingkan output → revisi bila perlu → baru merge → pilih runtime → benchmark serving.
LoRA membuat adaptation lebih ringan karena tidak memperbarui seluruh base weights. QLoRA dapat menekan memory lebih jauh dengan quantization. Namun efisiensi komputasi tidak menggantikan dataset yang baik, evaluasi, dan operational discipline.
Tiga checkpoint paling penting justru bukan command:
- Apakah masalahnya memang membutuhkan fine-tuning?
- Apakah adapter benar-benar lebih baik daripada base model?
- Apakah deployment sudah aman dan sesuai workload?
Kalau jawabannya belum jelas, GPU yang lebih besar hanya membuat eksperimen yang salah berjalan lebih cepat.
Daftar Pustaka
- Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv. https://arxiv.org/abs/2106.09685
- Dettmers, T., Pagnoni, A., Holtzman, A., & Zettlemoyer, L. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. Advances in Neural Information Processing Systems. https://arxiv.org/abs/2305.14314
- LLaMA-Factory. (2026). Installation. LLaMA-Factory Documentation.
- LLaMA-Factory. (2026). Web UI. LLaMA-Factory Documentation.
- LLaMA-Factory. (2026). Supervised fine-tuning and model export documentation. LLaMA-Factory Documentation.
- ggml-org. (2026). llama.cpp. GitHub repository and documentation.
- Ollama. (2026). Importing a model. Ollama Documentation.