LLM: Lora

From OnnoWiki
Revision as of 04:04, 5 October 2025 by Onnowpurbo (talk | contribs) (Created page with "Siap, Pak Onno. Berikut “how-to” singkat & praktis memakai **LoRA** di **Ollama**—mulai dari melatih adapter (QLoRA/PEFT), mengonversi (bila perlu), sampai **meng-attach...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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. 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

  1. atau

ollama pull gemma2:2b ```

  1. 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

  1. 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"

)

  1. ... DataCollator & Trainer, lalu trainer.train()
  1. Simpan adapter PEFT:

model.save_pretrained("my_lora_adapter")

  1. -> 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.

  1. 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

  1. clone llama.cpp bila belum

git clone https://github.com/ggerganov/llama.cpp cd llama.cpp

  1. 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])

  1. 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)**

```

  1. Modelfile

FROM llama3.2:3b

  1. template/sistem opsional

SYSTEM Anda adalah asisten singkat, sopan, dan menjawab dalam Bahasa Indonesia.

  1. 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**

```

  1. 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])

  1. 5) Build & Jalankan di Ollama

```bash

  1. dari folder yang berisi Modelfile + adapter

ollama create sekolah-lora -f Modelfile

  1. uji jalan

ollama run sekolah-lora

  1. lalu ketik prompt:
  2. > Ringkas Bab 1 buku AI untuk SMK dalam 5 poin.

```

  1. 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"