rizbuy-submission-qwen3-indonesian
Model instruksi bahasa Indonesia hasil fine-tuning dari unsloth/Qwen3-4B menggunakan pustaka Unsloth dan TRL (SFTTrainer). Model dilatih menggunakan metode QLoRA 4-bit dan diekspor menggunakan metode bobot gabungan 16-bit (merged 16-bit) untuk kompatibilitas inferensi langsung tanpa memerlukan dependensi LoRA terpisah.
Spesifikasi Model
- Model Dasar:
unsloth/Qwen3-4B - Tipe Arsitektur: Causal Language Model (Transformer)
- Format Bobot: 16-bit Merged (
merged_16bitSafetensors) - Panjang Konteks Maksimal: 1024 token
- Bahasa: Indonesia (
id) - Lisensi: Apache-2.0
Konfigurasi Pelatihan & Hyperparameter
Model ini dilatih dengan konfigurasi teknis berikut:
1. Dataset
- Sumber Data:
Ichsan2895/alpaca-gpt4-indonesian - Distribusi Data:
- Data Latih: 40.000 sampel (acak dengan seed 3407)
- Data Evaluasi: 200 sampel (acak dengan seed 3407)
- Format Pesan: Chat template
qwen2.5dengan system prompt:"Kamu adalah asisten AI yang membantu menjawab pertanyaan pengguna berdasarkan data dan fakta yang kamu miliki."
2. Parameter LoRA (PEFT)
- Rank ($r$): 8
- LoRA Alpha: 16
- LoRA Dropout: 0
- Target Modules:
["q_proj", "k_proj", "v_proj", "o_proj"] - Bias:
none - Gradient Checkpointing: Unsloth native engine
3. Hyperparameter SFTTrainer
- Optimizer:
paged_adamw_8bit - Learning Rate: $1\times 10^{-5}$ – $2\times 10^{-5}$
- LR Scheduler:
cosine - Warmup Steps: 50 – 70 langkah
- Per-Device Batch Size: 1
- Gradient Accumulation Steps: 4 – 8 langkah
- Max Steps: 800 langkah
- Precision: Mixed Precision (BF16 native jika didukung perangkat keras)
Cara Inferensi
Berikut adalah contoh inferensi menggunakan Hugging Face Transformers sesuai dengan parameter decoding yang digunakan saat validasi:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
model_id = "rizkyayub/rizbuy-submission-qwen3-indonesian"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16,
device_map="auto"
)
system_prompt = "Kamu adalah asisten AI yang membantu menjawab pertanyaan pengguna berdasarkan data dan fakta yang kamu miliki."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "Sebutkan 3 bandara terkenal di Indonesia beserta lokasinya!"}
]
inputs = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
attention_mask = torch.ones_like(inputs)
streamer = TextStreamer(tokenizer, skip_prompt=True)
terminators = [tokenizer.eos_token_id] if tokenizer.eos_token_id is not None else [151643]
pad_id = tokenizer.pad_token_id if tokenizer.pad_token_id is not None else terminators[0]
_ = model.generate(
input_ids=inputs,
attention_mask=attention_mask,
streamer=streamer,
max_new_tokens=256,
temperature=0.1,
top_k=20,
top_p=0.9,
repetition_penalty=1.05,
do_sample=True,
eos_token_id=terminators,
pad_token_id=pad_id,
)