Views
No views yet
unsloth/Qwen2.5-3B-bnb-4bit.unsloth/Qwen2.5-3B-bnb-4bit (4-bit quantized Qwen2.5-3B)bkai-foundation-models/vi-alpaca (1,000-sample slice, 1 epoch)argilla/ultrafeedback-binarized-preferences-cleaned
(2,000 pairs, 1 epoch)| Hyperparameter | Value |
|---|---|
| LoRA rank / alpha | 16 / 32 |
| LoRA target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| DPO β | 0.1 |
| Learning rate | 5e-7 |
| Loss type | sigmoid (standard DPO) |
| Epochs | 1 |
| Effective batch size | 8 (per-device 1 × grad-accum 8) |
| max_length / max_prompt_length | 512 / 256 |
| Metric | Value |
|---|---|
| Final DPO training loss | 0.7731 |
| Chosen reward (end of training) | -0.699 |
| Rejected reward (end of training) | -0.829 |
| Reward gap (chosen − rejected) | +0.130 |
chosen over
rejected responses relative to the frozen SFT reference, consistent with a
successful (if modest, given the small 3B/2k-pair scale) DPO run.submission/REFLECTION.md
and data/eval/side_by_side.jsonl.max_new_tokens limit,
more pronounced in the DPO adapter on 2/8 probes — likely related to
pad_token == eos_token making the stop signal noisier during DPO training.1from unsloth import FastLanguageModel
2from peft import PeftModel
3
4model, tokenizer = FastLanguageModel.from_pretrained(
5 model_name="unsloth/Qwen2.5-3B-bnb-4bit",
6 max_seq_length=512,
7 dtype=None,
8 load_in_4bit=True,
9)
10model = PeftModel.from_pretrained(model, "tamkudo1/lab22-dpo-vn")
11FastLanguageModel.for_inference(model)
12
13messages = [{"role": "user", "content": "Giải thích ngắn gọn thuật toán quicksort."}]
14inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True).to("cuda")
15out = model.generate(input_ids=inputs, max_new_tokens=256, do_sample=False)
16print(tokenizer.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))