LoRA: Low-Rank Adaptation ສຳລັບການ Fine-Tune ໂມເດວພາສາຂະໜາດໃຫຍ່ແບບປະຢັດ
LoRA: Low-Rank Adaptation ສຳລັບການ Fine-Tune ໂມເດວພາສາຂະໜາດໃຫຍ່ແບບປະຢັດ
ໃນຍຸກທີ່ Large Language Models (LLMs) ກາຍເປັນເຕັກໂນໂລຊີຫົວໃຈຫຼັກຂອງເຕັກໂນໂລຊີ AI, ການນຳເອົາໂມເດວໃຫຍ່ໆເຊັ່ນ LLaMA-3 ຫຼື Mistral ມາສອນໃຫ້ເຂົ້າໃຈບໍລິບົດຂອງປະເທດລາວ — ຕົວຢ່າງ: ການສ້າງແຊັດບອດຕອບຄຳຖາມລູກຄ້າສະເພາະທາງສຳລັບທະນາຄານໃນນະຄອນຫຼວງວຽງຈັນ ຫຼື ການພັດທະນາໂມເດວພາສາລາວ (Lao NLP) — ແມ່ນມີສິ່ງທ້າທາຍອັນຍິ່ງໃຫຍ່ຄື: “ຕົ້ນທຶນການຄິດໄລ່ (Compute Cost)“.
ການເຮັດ Full Parameter Fine-Tuning ໂມເດວຂະໜາດ 7 ຕື້ພາຣາມິເຕີ ອາດຈະຕ້ອງໃຊ້ GPU ລະດັບ Data Center ເຊັ່ນ Nvidia A100 ຫຼາຍໜ່ວຍພ້ອມກັນ. ແຕ່ວ່າ, ສຳລັບນັກພັດທະນາ ຫຼື ທີມວິໄຈຢູ່ມະຫາວິທະຍາໄລແຫ່ງຊາດ (ມຊ) ທີ່ມີພຽງ GPU ສຳລັບຜູ້ບໍລິໂພກທົ່ວໄປ (ເຊັ່ນ RTX 3090 ຫຼື 4090) ໜ່ວຍດຽວເດ? ຄຳຕອບຂອງບັນຫານີ້ຄືການນຳໃຊ້ LoRA (Low-Rank Adaptation).
LoRA ແມ່ນຫຍັງ? ແລະ ຄະນິດສາດເບື້ອງຫຼັງ
LoRA ຖືກສະເໜີໂດຍທີມວິໄຈຈາກ Microsoft ໃນປີ 2021. ແນວຄິດຫຼັກແມ່ນອີງໃສ່ສົມມຸດຕິຖານ “Low Intrinsic Dimension” ເຊິ່ງເຊື່ອວ່າ: ເຖິງແມ່ນໂມເດວ AI ຈະມີພາຣາມິເຕີຫຼາຍຕື້ຕົວ, ແຕ່ເມື່ອເຮົາເອົາມັນມາຮຽນຮູ້ວຽກໃໝ່ແບບສະເພາະເຈາະຈົງ (ເຊັ່ນ: ການແປພາສາລາວ-ອັງກິດ), ການປັບປ່ຽນນ້ຳໜັກພາຍໃນເຄືອຂ່າຍ ຕ້ອງການພື້ນທີ່ຍ່ອຍ (Subspace) ທີ່ນ້ອຍຫຼາຍເທົ່ານັ້ນ ກໍສາມາດບັນລຸປະສິດທິຜົນໄດ້ແລ້ວ.
ສົມຜົນການແຍກມາຕຣິກ (Matrix Decomposition)
ໃຫ້ ເປັນ Pre-trained Weights ຂອງໂມເດວ (ເຊິ່ງໃນ LoRA, ນ້ຳໜັກສ່ວນນີ້ຈະຖືກ Freeze ໄວ້ ຄືບໍ່ມີການອັບເດດ Gradient ໃດໆ).
ໃນການອັບເດດນ້ຳໜັກປົກກະຕິ, ເຮົາຕ້ອງຊອກຫາຄ່າການປ່ຽນແປງ ທີ່ມີຂະໜາດ ເທົ່າເດີມ. ແຕ່ LoRA ຈະໃຊ້ການຄູນກັນຂອງສອງມາຕຣິກນ້ອຍໆ ຄື ແລະ ຂຶ້ນມາແທນ:
ໂດຍທີ່:
- (ເລີ່ມຕົ້ນດ້ວຍການສຸ່ມຄ່າເປັນສູນ - Zero initialization)
- (ເລີ່ມຕົ້ນດ້ວຍການສຸ່ມຄ່າແບບ Gaussian - Gaussian initialization)
- ແມ່ນ Rank ທີ່ເຮົາກຳນົດຂຶ້ນມາເອງ ເຊິ່ງ . ຕົວຢ່າງຖ້າ , ເຮົາອາດຈະຕັ້ງ ເທົ່ານັ້ນ.
ສະນັ້ນ, Forward Pass ຂອງ Linear Layer ຈະປ່ຽນເປັນ:
ການຄູນດ້ວຍຄ່າ (Alpha Scaling)
ໃນການນຳໃຊ້ຈິງ, ຜົນລັບການອັບເດດມາຕຣິກຈະຖືກຄູນດ້ວຍສຳປະສິດ ເຊິ່ງ ເປັນຄ່າຄົງທີ່:
ການເຮັດແບບນີ້ຊ່ວຍຮັກສາສະຖຽນລະພາບຂອງ Gradient ຖ້າເຮົາປ່ຽນແປງຄ່າ . ຖ້າເຮົາຕັ້ງຄ່າ , ລະດັບການແຜ່ກະຈາຍຂອງການອັບເດດຈະຄົງທີ່ ເຮັດໃຫ້ເຮົາບໍ່ຈຳເປັນຕ້ອງຈູນ (Tuning) Learning Rate ໃໝ່ທຸກຄັ້ງທີ່ປ່ຽນ Rank.
ປະຕິບັດການຈິງ: ການຂຽນໂຄ້ດ Fine-Tune ດ້ວຍ LoRA
ມາເບິ່ງວິທີການຂຽນໂຄ້ດດ້ວຍ PyTorch ເພື່ອ Fine-tune ໂມເດວ LLaMA ເພື່ອສ້າງເປັນ AI ຊ່ວຍສະຫຼຸບເອກະສານກົດໝາຍແຮງງານລາວ. ເຮົາຈະໃຊ້ Library peft ຈາກ Hugging Face.
import torch
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model
# 1. ໂຫຼດໂມເດວພາສາ (ຕົວຢ່າງ: LLaMA-3 8B)
model_name = "meta-llama/Meta-Llama-3-8B"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16, # ໃຊ້ bfloat16 ເພື່ອປ້ອງກັນການລົ້ນເຫລືອຂອງ VRAM
device_map="auto"
)
# 2. ກຳນົດຄ່າ LoRA Config
lora_config = LoraConfig(
r=16, # Rank: ຂະໜາດຂອງມາຕຣິກຍ່ອຍທີ່ເຮົາຈະເທຣນ (ອາດຈະເລີ່ມທີ່ 16 ສຳລັບພາສາລາວ)
lora_alpha=32, # ຕົວຄູນ (Scaling factor)
target_modules=["q_proj", "v_proj", "o_proj", "down_proj"], # ແຊກ LoRA ເຂົ້າໄປໃນ Attention & MLP layers
lora_dropout=0.05, # Dropout ເພື່ອປ້ອງກັນ Overfitting
bias="none",
task_type="CAUSAL_LM"
)
# 3. ຫຸ້ມໂມເດວດ້ວຍ LoRA (Wrap model)
peft_model = get_peft_model(model, lora_config)
# 4. ກວດສອບເບິ່ງຈຳນວນພາຣາມິເຕີທີ່ຈະຕ້ອງໄດ້ຝຶກຈິງ
peft_model.print_trainable_parameters()
ເມື່ອ Run ໂຄ້ດນີ້, Output ອາດຈະອອກມາປະມານ:
trainable params: 13,631,488 || all params: 8,044,228,608 || trainable%: 0.1694%
ເຊິ່ງໝາຍຄວາມວ່າທ່ານຕ້ອງຝຶກປັບແຕ່ງ Parameters ພຽງແຕ່ 0.16% ຂອງໂມເດວທັງໝົດເທົ່ານັ້ນ!
ການປະຍຸກໃຊ້ໃນໜ້າວຽກຕົວຈິງໃນລາວ ແລະ ການປັບແຕ່ງຂັ້ນສູງ
- Resource Optimization ສຳລັບ SME ລາວ: ການທີ່ພາຣາມິເຕີຫຼຸດລົງເຫຼືອບໍ່ເຖິງ 1% ຊ່ວຍຫຼຸດການໃຊ້ VRAM ຈາກ 100GB ເຫຼືອພຽງປະມານ 10-15GB (ຖ້າບວກກັບ QLoRA). ນີ້ເປີດໂອກາດໃຫ້ບໍລິສັດ Startup ໃນວຽງຈັນ ສາມາດໃຊ້ເຄື່ອງ Server ຂະໜາດນ້ອຍຂອງຕົນເອງໃນການເທຣນລະບົບ Recommendation ຫຼື Support Chatbot ໄດ້.
- ການຈັດການກັບພາສາລາວ (Target Modules): ພາສາລາວມີໂຄງສ້າງໄວຍາກອນສະເພາະຕົວ ແລະ ບໍ່ມີການຍະຫວ່າງລະຫວ່າງຄຳຢ່າງຊັດເຈນ. ການ apply LoRA ພຽງແຕ່ໃສ່ Attention Layers (ຄື
q_proj,v_proj) ອາດຈະບໍ່ພຽງພໍ. ຄວນພິຈາລະນາ apply ໃສ່ກຸ່ມ MLP layer ນຳ (ເຊັ່ນgate_proj,up_proj,down_proj) ເພື່ອໃຫ້ໂມເດວຮຽນຮູ້ຄຳສັບໃໝ່ໆ ແລະ ຮູບແບບການປະກອບປະໂຫຍກພາສາລາວໄດ້ດີຂຶ້ນ. - Weight Merging ຫຼັງການເທຣນ: ເມື່ອຝຶກສຳເລັດແລ້ວ, ເພື່ອການນຳໄປໃຊ້ງານຈິງ (Inference Deployment), ທ່ານສາມາດບວກມາຕຣິກເຂົ້າກັນໄດ້ເລີຍ ເປັນ . ນີ້ເຮັດໃຫ້ຕອນໃຊ້ງານຈິງ ບໍ່ມີການຄຳນວນຊັກຊ້າ (Zero Latency Overhead) ຕື່ມຂຶ້ນມາເລີຍ.
ສິ່ງທີ່ຄວນຈື່ (Key Takeaways)
- LoRA ແມ່ນການເພີ່ມ, ບໍ່ແມ່ນການປ່ຽນແທນ: ມັນຮັກສາຄວາມຮູ້ເກົ່າຂອງໂມເດວ (ເຊັ່ນ ຄວາມຮູ້ຮອບຕົວ, ຕັກກະສາດ) ໄວ້ໃຫ້ຄົງເດີມ ໂດຍການ Freeze ນ້ຳໜັກເກົ່າ ແລະ ຮຽນຮູ້ວິທີການນຳໃຊ້ຄວາມຮູ້ນັ້ນມາຕອບເປັນພາສາລາວ ຫຼື ຄວາມຮູ້ສະເພາະທາງ ຜ່ານມາຕຣິກ ແລະ .
- Rank (r) ເປັນທັງສາດ ແລະ ສິນ: ສຳລັບວຽກວິເຄາະທົ່ວໄປ (Classification) ການໃຊ້ ອາດຈະພໍແລ້ວ, ແຕ່ສຳລັບວຽກທີ່ປ່ຽນແປງໂດເມນໜັກໆເຊັ່ນ ສອນພາສາໃໝ່ (Lao Language Modeling) ທ່ານອາດຈະຕ້ອງຍັບໄປໃຊ້ ຫຼື .
- ເປັນມິດກັບຊັບພະຍາກອນ: ເປີດປະຕູສູ່ການພັດທະນາ Sovereign AI ຮູບແບບທ້ອງຖິ່ນໃຫ້ເກີດຂຶ້ນຈິງໄດ້.
ສະຫຼຸບ ເຕັກນິກ LoRA ໄດ້ເຂົ້າມາປ່ຽນແປງວົງການ AI ຢ່າງສິ້ນເຊີງ, ໂດຍສະເພາະຢ່າງຍິ່ງສຳລັບປະເທດທີ່ກຳລັງພັດທະນາ ຫຼື ອົງກອນທີ່ມີງົບປະມານຈຳກັດ. ສຳລັບນັກພັດທະນາຊາວລາວ, ມັນປົດລັອກຂໍ້ຈຳກັດດ້ານ Hardware ເຮັດໃຫ້ເຮົາສາມາດນຳເອົາໂມເດວລະດັບໂລກ ມາປັບແຕ່ງໃຫ້ເຂົ້າກັບພາສາລາວ, ວັດທະນະທຳລາວ ແລະ ຕອບໂຈດທຸລະກິດຈິງພາຍໃນປະເທດໄດ້ ໂດຍບໍ່ຈຳເປັນຕ້ອງມີ Data Center ຂະໜາດໃຫຍ່. ການເຂົ້າໃຈຫຼັກການທາງຄະນິດສາດ ແລະ ການໃຊ້ງານ LoRA ຄືກຸນແຈສຳຄັນທີ່ຈະຊ່ວຍໃຫ້ທ່ານສາມາດສ້າງ Custom LLM ທີ່ແຂງແກ່ນ ແລະ ປະຢັດຕົ້ນທຶນໄດ້ຢ່າງແທ້ຈິງ.