LLM: Lora
Siap, Pak Onno. Berikut “how-to” singkat & praktis memakai **LoRA** di **Ollama**—mulai dari melatih adapter (QLoRA/PEFT), mengonversi (bila perlu), sampai **meng-attach** adapter itu ke model base via **Modelfile**.
- 1) Pilih base model di Ollama
Contoh aman & ringan untuk RTX 4060 8 GB:
- `llama3.2:3b` atau `llama3.1:8b`
- `gemma2:2b`
Tarik dulu basisnya:
```bash ollama pull llama3.2:3b
- atau
ollama pull gemma2:2b ```
- 2) Latih LoRA (QLoRA/PEFT) dari HuggingFace
Latihan bisa dilakukan di Linux/Colab dengan stack open-source (transformers + peft + bitsandbytes/unsloth). Output yang kita incar: **adapter PEFT** berupa `adapter_model.safetensors` + `adapter_config.json`.
Contoh kerangka (ringkas):
```python
- pip install -U transformers peft datasets accelerate bitsandbytes
from datasets import load_dataset from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments from peft import LoraConfig, get_peft_model, TaskType import torch
base_model = "meta-llama/Llama-3.2-3B-Instruct" # selaraskan dengan base di Ollama tok = AutoTokenizer.from_pretrained(base_model, use_fast=True) tok.pad_token = tok.eos_token
ds = load_dataset("json", data_files={"train":"train.jsonl","eval":"eval.jsonl"})
model = AutoModelForCausalLM.from_pretrained(
base_model, load_in_4bit=True, device_map="auto"
)
lora_cfg = LoraConfig(
r=16, lora_alpha=32, lora_dropout=0.05, target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj"], task_type=TaskType.CAUSAL_LM
) model = get_peft_model(model, lora_cfg)
args = TrainingArguments(
output_dir="out_lora", per_device_train_batch_size=4, gradient_accumulation_steps=4, learning_rate=2e-4, num_train_epochs=3, logging_steps=50, fp16=True, eval_strategy="no", save_strategy="epoch"
)
- ... DataCollator & Trainer, lalu trainer.train()
- Simpan adapter PEFT:
model.save_pretrained("my_lora_adapter")
- -> akan ada my_lora_adapter/adapter_model.safetensors & adapter_config.json
```
> Catatan: Anda bisa pakai **Unsloth** untuk hemat VRAM & training lebih cepat. Hasil akhirnya juga **adapter PEFT (safetensors)**, cocok dengan langkah berikutnya.
- 3) (Opsional) Konversi adapter → GGUF
- Ollama saat ini menerima 2 jenis adapter** di Modelfile:
- **Safetensors adapter (PEFT)** untuk arsitektur Llama/Mistral/Gemma; atau
- **GGUF adapter** (hasil konversi dari PEFT). ([docs.ollama.com][1])
Kalau Anda sudah punya **safetensors**, Anda **bisa langsung pakai** (bagian #4). Kalau ingin **GGUF adapter**, konversikan dengan skrip `llama.cpp` (contoh umum):
```bash
- clone llama.cpp bila belum
git clone https://github.com/ggerganov/llama.cpp cd llama.cpp
- contoh konversi PEFT -> GGUF adapter
python3 convert-lora-to-gguf.py \
--base /path/hf_base_model_dir \ --lora /path/my_lora_adapter \ --outfile /path/my_lora.gguf
```
(Beberapa tutorial/notebook komunitas juga menunjukkan alur konversi PEFT → GGUF lalu dipakai di runtime llama.cpp/Ollama.) ([Hugging Face][2])
- 4) Buat **Modelfile** yang menempelkan LoRA ke base model
Buat folder kerja, lalu tulis **Modelfile** (pilih salah satu—safetensors ATAU gguf):
- A. Memakai adapter Safetensors (PEFT)**
```
- Modelfile
FROM llama3.2:3b
- template/sistem opsional
SYSTEM Anda adalah asisten singkat, sopan, dan menjawab dalam Bahasa Indonesia.
- tempelkan adapter PEFT (safetensors)
ADAPTER ./my_lora_adapter # folder berisi adapter_model.safetensors & adapter_config.json PARAMETER num_ctx 4096 PARAMETER temperature 0.6 ```
- B. Memakai adapter GGUF**
```
- Modelfile
FROM llama3.2:3b SYSTEM Anda adalah asisten singkat, sopan, dan menjawab dalam Bahasa Indonesia. ADAPTER ./my_lora.gguf PARAMETER num_ctx 4096 PARAMETER temperature 0.6 ```
> Sintaks `ADAPTER` dan contoh “Safetensor adapter” / “GGUF adapter” didokumentasikan resmi di **Ollama Modelfile Reference**. Pastikan **base model (FROM)** sama persis dengan model yang dipakai saat melatih LoRA, agar perilaku tidak acak. ([docs.ollama.com][1])
- 5) Build & Jalankan di Ollama
```bash
- dari folder yang berisi Modelfile + adapter
ollama create sekolah-lora -f Modelfile
- uji jalan
ollama run sekolah-lora
- lalu ketik prompt:
- > Ringkas Bab 1 buku AI untuk SMK dalam 5 poin.
```
- 6) Tips praktis (RTX 4060 8 GB, offline, open-source)
- **Cocokkan base**: Kalau latih di `meta-llama/Llama-3.2-3B-Instruct`, gunakan `FROM llama3.2:3b`. Mismatch base ↔ adapter bisa bikin output kacau. ([docs.ollama.com][1])
- **Format data**: Untuk *instruction tuning*, JSONL bergaya `{"instruction": "...", "input": "", "output": "..."}` memudahkan.
- **Kecil dulu**: Mulai dari 2–4B params agar iterasi cepat; naikkan jika perlu.
- **Evaluator cepat**: Setelah build, siapkan *probe prompts* (10–20 soal) dan uji konsistensi jawaban sebelum dipakai siswa.
- **Lisensi**: Pastikan lisensi base model & data pembelajaran kompatibel untuk distribusi ke sekolah.
- **Fallback**: Jika inferensi berat, turunkan `num_ctx` atau pakai kuantisasi bawaan Ollama (model base-nya sudah terkuantisasi).
---
Kalau Bapak mau, saya bisa bantu **template dataset JSONL**, contoh **Trainer (PEFT/Unsloth)** yang rapi untuk Bahasa Indonesia, dan **skrip evaluasi** singkat supaya LoRA-nya konsisten untuk materi SMK.
[1]: https://docs.ollama.com/modelfile "Modelfile reference - Ollama" [2]: https://huggingface.co/blog/ngxson/gguf-my-lora?utm_source=chatgpt.com "Introducing GGUF-my-LoRA"