Tech Blog

Fine-Tune RAG ส่วนตัวด้วยแค่แล็ปท็อป RTX 2070

LLM Fine-tuning QLoRA GPU AI RAG

Fine-Tune RAG ส่วนตัวด้วยแค่แล็ปท็อป RTX 2070

ทำไมถึงอยากให้ทำงานในเครื่องทั้งหมด

my-rag-brain เก็บทุกอย่าง: บันทึกความคิดส่วนตัว บันทึกการตัดสินใจในงาน สิ่งที่สังเกตเห็น ผมไม่อยากส่งข้อมูลพวกนั้นไปให้ cloud API

อยากให้ทำงานในเครื่อง


Tiny-Critic คืออะไร

chunk ที่ RAG ดึงมาจาก ChromaDB ไม่จำเป็นต้องเกี่ยวข้องกับคำถามเสมอไป แม้ระยะทางจะใกล้ แต่เนื้อหาอาจคลาดเคลื่อนได้

Tiny-Critic คือโมเดลขนาดเล็กที่ตัดสินแบบไบนารีอีกครั้งว่า chunk ที่ดึงมาแล้วนั้นเกี่ยวข้องกับคำถามหรือไม่ และลบอันที่ไม่เกี่ยวข้องออก เพื่อลดบริบทก่อนส่งให้ LLM


สร้างข้อมูลฝึก

สร้างข้อมูลที่มีป้ายกำกับจากบันทึก RAG ที่มีอยู่ (คู่ระหว่างคำถามกับ chunk ที่ตี)

# ปรับสมดุล 2,114 คู่ให้เหลือ 1,036 คู่ (yes/no = 50:50)
positives = [(q, chunk, 1) for q, chunk in relevant_pairs]
negatives = [(q, chunk, 0) for q, chunk in irrelevant_pairs]
balanced = positives[:518] + negatives[:518]

ข้อมูลฝึกที่เอนเอียงจะลู่เข้าหาด้านเดียว การปรับสมดุลเป็นสิ่งจำเป็น


เทรนแบบ 4-bit quantization ด้วย QLoRA

ใช้ Qwen2.5-3B-Instruct แบบ 4-bit quantized กับ LoRA adapter โครงสร้างนี้ทำงานได้บน VRAM 8GB ของ RTX 2070 Max-Q

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)
model = AutoModelForSequenceClassification.from_pretrained(
    "Qwen/Qwen2.5-3B-Instruct",
    quantization_config=bnb_config,
    num_labels=2,
)
model = get_peft_model(model, LoraConfig(
    r=8, lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
))

ผลลัพธ์

รายการค่า
ข้อมูลฝึก2,114 คู่ → ปรับสมดุลเหลือ 1,036 คู่
เวลาเทรนประมาณ 1 ชั่วโมง 53 นาที (RTX 2070 Max-Q)
Loss สุดท้าย1.454
Token accuracyประมาณ 76% (สูงสุด ประมาณ 81%)

76% ไม่ได้สมบูรณ์แบบ แต่ในฐานะตัวกรองที่ทำงานโดยไม่มีค่าใช้จ่ายสำหรับปัญหา chunk ที่ไม่เกี่ยวข้องหลุดเข้ามา มันทำงานได้ดีเพียงพอ


ทำไมถึงไม่ใช้คลาวด์

ทั้งการเทรนและการอนุมานทำงานบน GPU ที่อยู่ตรงหน้า บันทึกส่วนตัวไม่ได้ออกไปไหน

นี่ไม่ใช่เรื่องความปลอดภัยมากนัก แต่เป็นเรื่องความรู้สึกที่ว่าข้อมูลของตัวเองอยู่ภายใต้การควบคุมของตัวเอง การตัดสินใจว่าจะใส่อะไรใน RAG ไม่ถูกจำกัดด้วยข้อกำหนดบริการของบุคคลที่สาม


บทความที่เกี่ยวข้อง

ส่งข้อความได้ตามสบาย

ไม่ว่าจะเป็นการว่าจ้างงาน แนะนำโปรเจกต์ ความคิดเห็น หรือคำถาม ยินดีรับทั้งหมด ผมหวังเป็นอย่างยิ่งว่าจะได้เชื่อมต่อกับผู้ที่มีอุดมการณ์อันสูงส่งเช่นเดียวกัน ผมจะมุ่งมั่นท้าทายในสิ่งที่ทุ่มเททั้งชีวิตต่อไป ขอขอบคุณและฝากเนื้อฝากตัวด้วยครับ