บทที่ 3 จาก 5 · Fine-tune โมเดลภาษา — เมื่อไหร่ควรทำ ทำอย่างไร และรู้ได้อย่างไรว่าได้ผล
LoRA และ QLoRA ในทางปฏิบัติ: เลือกโมเดลฐานภาษาไทยและเครื่องมือ
LoRA เทรนเฉพาะเมทริกซ์เล็ก ๆ ที่เสียบเข้าไปในโมเดล QLoRA ทำแบบเดียวกันบนโมเดลที่บีบเป็น 4 บิต ทำให้ fine-tune ได้บนการ์ดจอใบเดียว บทนี้อธิบายหลักการ ข้อแลกเปลี่ยน โมเดลฐานภาษาไทยที่มีให้เลือกพร้อมไลเซนส์ และเครื่องมือรุ่นปัจจุบัน
พอมีข้อมูลแล้ว คำถามต่อไปคือจะเทรนอย่างไร การเทรนทุกพารามิเตอร์ของโมเดล (full fine-tuning) ต้องใช้หน่วยความจำมาก ทีมเล็กส่วนใหญ่จึงใช้ LoRA หรือ QLoRA
3.1 LoRA: ไม่แตะน้ำหนักเดิม เทรนแค่ส่วนเสริมเล็ก ๆ
งานวิจัย LoRA (2021) อธิบายว่าวิธีนี้ แช่แข็งน้ำหนักเดิมของโมเดล แล้วเสียบเมทริกซ์ขนาดเล็กที่เทรนได้เข้าไปในแต่ละชั้น ผลที่รายงานเมื่อเทียบกับการ fine-tune GPT-3 175B แบบเต็มด้วย Adam
- จำนวนพารามิเตอร์ที่ต้องเทรน ลดลง 10,000 เท่า
- หน่วยความจำ GPU ที่ต้องใช้ ลดลง 3 เท่า
- ไม่เพิ่มเวลาตอบ เมื่อรวมส่วนเสริมเข้ากับโมเดลแล้ว (บทที่ 5)
ผลที่ได้จากการเทรนเรียกว่า adapter เป็นไฟล์เล็กที่ต้องใช้คู่กับโมเดลฐานตัวเดิมเสมอ
3.2 QLoRA: LoRA บนโมเดลที่บีบเป็น 4 บิต
งานวิจัย QLoRA (2023) นำโมเดลฐานมาบีบเป็น 4 บิตด้วยชนิดข้อมูลใหม่ชื่อ NF4 แล้วเทรน LoRA บนนั้น พร้อมเทคนิคประหยัดหน่วยความจำอีกสองอย่าง คือ double quantization และ paged optimizers ผลที่รายงานคือ fine-tune โมเดล 65B ได้บน GPU 48GB ใบเดียว โดยยังได้ผลงานเทียบเท่าการ fine-tune แบบ 16 บิต
3.3 ข้อแลกเปลี่ยน: LoRA เรียนน้อยกว่า แต่ลืมน้อยกว่า
งานวิจัยของ Biderman และคณะ (2024) เทียบ LoRA กับการเทรนเต็มในงานสองด้าน คือเขียนโปรแกรมและคณิตศาสตร์ ด้วยการตั้งค่า LoRA แบบมาตรฐาน และสรุปว่า LoRA ทำได้ด้อยกว่าการเทรนเต็มอย่างมาก ในงานเป้าหมาย แต่ รักษาความสามารถเดิมของโมเดลนอกงานเป้าหมายได้ดีกว่า
ผลกับงานของคุณอาจต่างจากนี้ สำหรับทีมเล็กที่อยากสอนงานเฉพาะ โดยไม่ให้โมเดลเสียความสามารถทั่วไป ข้อแลกเปลี่ยนนี้มักคุ้ม แต่ต้องวัดเสมอ (บทที่ 4)
3.4 เลือกโมเดลฐาน: ภาษาไทยและไลเซนส์
ตัวเลือกที่มีการ์ดโมเดลอย่างเป็นทางการ ข้อมูลจากหน้าการ์ดบน Hugging Face ณ วันที่ตรวจ
| โมเดล | สร้างต่อจาก | ไลเซนส์ตามการ์ด | หมายเหตุ |
|---|---|---|---|
| Typhoon 2.5 (typhoon-ai) | Qwen3 ขนาด 4B และ 30B-A3B | Apache 2.0 | การ์ดลิงก์ไปที่ไฟล์ไลเซนส์ของ Qwen ควรอ่านทั้งคู่ |
| Typhoon 2.1 | Gemma3 12B และ 4B | ไลเซนส์ Gemma | ข้อจำกัดของ Gemma ส่งต่อไปถึงโมเดลที่ดัดแปลง (บทที่ 5) |
| ThaiLLM-8B | Qwen3-8B-Base | Apache 2.0 | เป็น base model ยังไม่ได้สอนให้ทำตามคำสั่ง การ์ดแนะนำ LLaMA-Factory สำหรับขั้นนี้ |
| Pathumma (NECTEC) 4B | ThaiLLM | Apache 2.0 | ข้อมูลที่ใช้ post-train ไม่เปิดเผย |
| SEA-LION v4.8 (AI Singapore) | NVIDIA Nemotron 3 | MIT | ภาษาไทยเป็นหนึ่งใน 8 ภาษา โมเดลต้นทางของ NVIDIA ใช้ไลเซนส์แยก อ่านด้วย |
| OpenThaiGPT 1.6 72B | Qwen2.5-72B-Instruct | ไลเซนส์ของ Qwen | ขนาดใหญ่ ต้องใช้ทรัพยากรมาก |
ข้อควรรู้เรื่องไลเซนส์ของโมเดลที่เป็นฐานอีกชั้น
- Qwen รุ่นล่าสุดไม่ได้เป็น Apache 2.0 ทุกตัว Qwen3.8-27B เป็น Apache 2.0 แต่ Qwen3.8-Flash-Next ใช้ Qwen Community License ซึ่งธุรกิจแบบให้บริการโมเดล (Model as a Service) หรือผู้ช่วยทำงานด้วย AI ต้องขอไลเซนส์แยก
- Gemma 4 เป็น Apache 2.0 ส่วน Gemma รุ่นก่อนหน้าอยู่ภายใต้ Gemma Terms of Use
- Llama 4 ต้องแสดง “Built with Llama” เมื่อเผยแพร่ โมเดลที่ fine-tune จาก Llama แล้วเผยแพร่ต้องมีชื่อขึ้นต้นด้วย “Llama” และต้องขอไลเซนส์แยกถ้าผู้ใช้เกิน 700 ล้านคนต่อเดือน ณ วันที่ Llama 4 ออก
เรื่อง tokenizer งานวิจัย Typhoon รุ่นแรก (2023) รายงานว่าการเพิ่มโทเคนภาษาไทย 5,000 ตัว ทำให้ tokenizer เข้ารหัสภาษาไทยได้มีประสิทธิภาพกว่าของ GPT-4 ถึง 2.62 เท่า แต่ Typhoon 2 ไม่ได้เพิ่มโทเคนแบบนั้นแล้ว ข้อนี้ไม่ได้บอกว่าแนวไหนถูก แต่บอกว่าจำนวนโทเคนของภาษาไทยต่างกันมากในแต่ละโมเดล และมีผลต่อความยาวข้อความที่ใส่ได้และค่าใช้จ่าย
3.5 เครื่องมือ (รุ่นล่าสุด ณ 25 กันยายน 2026)
| เครื่องมือ | ใช้ทำอะไร | รุ่น |
|---|---|---|
| Transformers | โหลดและรันโมเดล | 5.17.0 |
| PEFT | LoRA และวิธีเทรนแบบประหยัดอื่น ๆ | 0.21.0 |
| TRL | ไลบรารีสำหรับเทรน รวม SFTTrainer สำหรับ fine-tune ด้วยตัวอย่าง | 1.13.0 |
| bitsandbytes | บีบโมเดลเป็น 4 และ 8 บิต (เบื้องหลัง QLoRA) | 0.50.2 |
| Unsloth | เทรนเร็วขึ้นและใช้หน่วยความจำน้อยลง | 2026.9.11 |
| Axolotl | เทรนด้วยไฟล์ตั้งค่า | 0.19.0 |
| LLaMA-Factory | เทรนได้หลายโมเดลจากที่เดียว | 0.9.5 |
เครื่องมือเหล่านี้ออกรุ่นใหม่บ่อย ชื่อพารามิเตอร์เปลี่ยนได้ระหว่างรุ่น ให้ดูตัวอย่างในเอกสารของรุ่นที่ติดตั้งจริง อย่าคัดลอกโค้ดจากบทความเก่า รวมถึงบทความนี้
3.6 ขั้นตอนโดยรวม
- เลือกโมเดลฐานที่ไลเซนส์ตรงกับการใช้งาน และรองรับภาษาไทยดีพอสำหรับงานของคุณ
- เตรียมข้อมูลเป็น messages แยกชุดเทรนกับชุดทดสอบ (บทที่ 4)
- โหลดโมเดลฐาน ถ้าหน่วยความจำไม่พอให้โหลดแบบ 4 บิตสำหรับ QLoRA
- ตั้งค่า LoRA ด้วย PEFT แล้วเทรนด้วย SFTTrainer ของ TRL ซึ่งใส่ chat template ให้เอง
- วัดผลกับชุดทดสอบ เทียบกับโมเดลฐานที่ใช้แค่ prompt
- รวม adapter เข้ากับโมเดล แล้วนำไปใช้ (บทที่ 5) ถ้าเทรนด้วย QLoRA ต้องโหลดโมเดลฐานแบบ 16 บิตใหม่ก่อนรวม
3.7 ตัวอย่างสมมติ: เลือกให้ตรงงาน
ร้านในบทก่อน ๆ ต้องการโมเดลจัดหมวดข้อความลูกค้าที่รันบนเครื่องเดียวในร้าน ข้อความเป็นภาษาไทยปนอังกฤษ และจะใช้เชิงพาณิชย์
ทางเลือกที่สมเหตุสมผลคือโมเดลขนาดเล็กที่ไลเซนส์อนุญาตให้ใช้เชิงพาณิชย์ และมีรุ่นที่สอนให้ทำตามคำสั่งภาษาไทยมาแล้ว เช่น Typhoon 2.5 รุ่น 4B ในตารางหัวข้อ 3.4 แล้วใช้ QLoRA เทรน การเลือกโมเดล 72B เพราะ “ใหญ่กว่าน่าจะดีกว่า” จะทำให้ต้นทุนการรันสูงเกินงานจัดหมวดที่มีคำตอบเพียงไม่กี่แบบ
3.8 ลงมือหลังอ่านบทนี้
- จดสามข้อของโมเดลฐานที่เลือก: สร้างต่อจากอะไร ไลเซนส์อะไร และไลเซนส์ของโมเดลต้นทางอีกชั้นคืออะไร
- ติดตั้งเครื่องมือรุ่นปัจจุบัน แล้วเปิดตัวอย่างในเอกสารของรุ่นนั้น
- ลองเทรนกับข้อมูลชุดเล็กก่อน เพื่อให้แน่ใจว่าขั้นตอนทั้งหมดทำงาน แล้วค่อยใช้ข้อมูลเต็ม
บทถัดไปว่าด้วยการวัดว่าโมเดลที่เทรนแล้วดีขึ้นจริง และไม่ได้เสียอะไรไป
แหล่งอ้างอิง
- LoRA: Low-Rank Adaptation of Large Language Models (arXiv 2106.09685)
- QLoRA: Efficient Finetuning of Quantized LLMs (arXiv 2305.14314)
- LoRA Learns Less and Forgets Less (arXiv 2405.09673)
- Typhoon 2.5 Qwen3 4B model card
- Typhoon 2.1 Gemma3 12B model card
- ThaiLLM-8B model card
- NECTEC Pathumma-llm-text-4.0.0
- AI Singapore Nemotron-SEA-LION-v4.8-30B-A3B
- OpenThaiGPT 1.6 72B
- Qwen3.8-27B · Qwen3.8-Flash-Next licence
- Gemma 4 (Apache 2.0) · Gemma Terms of Use
- Meta — Llama 4 Community License
- Typhoon: Thai Large Language Models (arXiv 2312.13951) · Typhoon 2 (arXiv 2412.13702)
- Hugging Face PEFT · TRL SFT Trainer