Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

Quantization: ຫຍໍ້ຂະໜາດໂມເດວພາສາຂະໜາດໃຫຍ່ (LLM) ໃຫ້ໃຊ້ງານເທິງແລັບທັອບທົ່ວໄປໄດ້

ໂພສເມື່ອ # Large Language Models # Quantization # Model Optimization # AI

Quantization: ຫຍໍ້ຂະໜາດໂມເດວພາສາຂະໜາດໃຫຍ່ (LLM) ໃຫ້ໃຊ້ງານເທິງແລັບທັອບທົ່ວໄປໄດ້

ປັດຈຸບັນ, ຖ້າທ່ານເປັນນັກພັດທະນາ AI ຢູ່ລາວທີ່ຢາກຈະນຳໃຊ້ໂມເດວພາສາຂະໜາດໃຫຍ່ (LLM) ເຊັ່ນ Llama-3 ທີ່ລຸ້ນ 70 ຕື້ພາຣາມິເຕີ (70B parameters) ເພື່ອມີເປົ້າໝາຍສ້າງລະບົບວິເຄາະຂໍ້ມູນລູກຄ້າສຳລັບ SME ທ້ອງຖິ່ນ ຫຼື ພັດທະນາແຊັດບັອດທ່ອງທ່ຽວໃນນະຄອນຫຼວງວຽງຈັນ, ສິ່ງກີດຂວາງທຳອິດທີ່ທ່ານຈະພົບຄື “ຮາດແວ” (Hardware).

ໂມເດວ 70B ໃນຮູບແບບມາດຕະຖານ FP16 (16-bit Floating Point) ຕ້ອງການໜ່ວຍຄວາມຈຳ VRAM ເຖິງ 140GB! ນັ້ນໝາຍຄວາມວ່າທ່ານອາດຈະຕ້ອງເຊົ່າ Cloud GPU ລະດັບ A100 (80GB) ເຖິງ 2 ໜ່ວຍເຊິ່ງມີຄ່າໃຊ້ຈ່າຍທີ່ສູງຫຼາຍ. ແຕ່ຈະເປັນແນວໃດຖ້າພວກເຮົາສາມາດບີບອັດໂມເດວນີ້ໃຫ້ສາມາດຣັນເທິງ MacBook Pro ທີ່ມີ Unified Memory ຫຼື Gaming Laptop ທີ່ມີການາດຈໍທົ່ວໄປໄດ້? ຄຳຕອບສຳລັບການແກ້ບັນຫານີ້ແມ່ນ Quantization.

Quantization ແມ່ນຫຍັງ? ເຈາະເລິກເບື້ອງຫຼັງທາງຄະນິດສາດ

ໃນທາງຄອມພິວເຕີ ແລະ ຄະນິດສາດ, Quantization ແມ່ນການສ້າງ Mapping Function ເພື່ອແປງຄ່າ Weights ແລະ Activations ຈາກຂໍ້ມູນທີ່ມີຄວາມລະອຽດສູງ (High-Precision) ເຊັ່ນ 16-bit (FP16) ຫຼື 32-bit (FP32) ລົງມາເປັນຂໍ້ມູນທີ່ມີຂະໜາດນ້ອຍກວ່າ (Low-Precision) ເຊັ່ນ 8-bit Integer (INT8) ຫຼື ແມ້ກະທັ່ງ 4-bit (INT4/NF4).

ສົມຜົນພື້ນຖານຂອງການເຮັດສາເຍົາແບບ Linear Quantization ຄື:

Q = clip(round(R / S) + Z)

ໂດຍທີ່:

ເມື່ອເຮົາສູນເສຍຄວາມລະອຽດ, ໂມເດວຈະມີຄ່າ Perplexity (ຄວາມສັບສົນໃນການທຳນາຍຄຳສັບ) ເພີ່ມຂຶ້ນເລັກນ້ອຍ. ແຕ່ດ້ວຍເຕັກນິກສະໄໝໃໝ່, ເຮົາສາມາດຮັກສາຄວາມສາມາດຂອງໂມເດວ 70B ໄວ້ໄດ້ເກືອບ 95% ໃນຂະນະທີ່ໃຊ້ VRAM ຫຼຸດລົງເຫຼືອພຽງປະມານ 35-40GB (ສຳລັບ 4-bit).

ເຕັກນິກການເຮັດ Quantization ທີ່ນິຍົມໃນປັດຈຸບັນ (Advanced Approaches)

ສຳລັບນັກພັດທະນາ AI (AI Developers) ທີ່ຕ້ອງການເອົາໂມເດວມາເຊີບ (Serve) ຫຼື ຝຶກສອນເພີ່ມ (Fine-tune) ທ້ອງຖິ່ນ, ການເລືອກ Algorithm ເປັນສິ່ງສຳຄັນ:

1. GPTQ (Accurate Post-Training Quantization)

GPTQ ແມ່ນການເຮັດ Quantization ໃນລະດັບບລັອກ (Block-wise) ທີ່ໃຊ້ຂໍ້ມູນສົມຜົນ Hessian (Second-order information) ເພື່ອຊອກຫາວ່າ Weights ໃດທີ່ສາມາດຕັດອອກ ຫຼື ຫຼຸດຄວາມລະອຽດໄດ້ໂດຍທີ່ສົ່ງຜົນກະທົບຕໍ່ Output ໜ້ອຍທີ່ສຸດ. ເໝາະສຳລັບການເອົາໂມເດວໄປໃຊ້ງານຈິງ (Inference) ເທິງການາດຈໍ NVIDIA (CUDA).

2. AWQ (Activation-aware Weight Quantization)

ແທນທີ່ຈະສົນໃຈແຕ່ຄ່າ Weights ຢ່າງດຽວ, AWQ ຈະສັງເກດການປ່ຽນແປງຂອງ “Activations” ຕອນທີ່ຂໍ້ມູນໄຫຼຜ່ານໂມເດວ. ມັນຈະຮັກສາ Weights ປະມານ 1% ທີ່ສຳຄັນທີ່ສຸດໄວ້ໃນຮູບແບບ FP16 ແລະ ບີບອັດສ່ວນທີ່ເຫຼືອເປັນ 4-bit. AWQ ໃຫ້ປະສິດທິພາບຄວາມໄວສູງຫຼາຍເມື່ອຣັນຜ່ານ vLLM.

3. GGUF & llama.cpp (The Best For Mac & Consumer Laptops)

ນີ້ຄື Game-changer ສຳລັບນັກພັດທະນາໃນປະເທດລາວ. GGUF ເປັນ Format ຂອງໂມເດວທີ່ອອກແບບມາສຳລັບເຄື່ອງມືຊື່ llama.cpp. ມັນອະນຸຍາດໃຫ້ເຮົາສາມາດແບ່ງການປະມວນຜົນ (Offloading) ລະຫວ່າງ CPU RAM ແລະ GPU VRAM. ຖ້າທ່ານມີ MacBook ມັນຍັງຮອງຮັບ Apple Metal (MPS) ຢ່າງເຕັມຮູບແບບ, ເຮັດໃຫ້ການຣັນ 70B Model ສາມາດເຮັດໄດ້ຢ່າງມີປະສິດທິພາບ.

ການນຳໃຊ້ງານຈິງ: ການໂຫຼດໂມເດວ 70B ແບບ 4-bit ສຳລັບລະບົບພາສາລາວ

ຖ້າພວກເຮົາຕ້ອງການ Fine-tune ໂມເດວ 70B ໃຫ້ເຂົ້າໃຈໄວຍາກອນພາສາລາວ ຫຼື ບໍລິບົດສະເພາະເຊັ່ນ: ການອັບເດດລະດັບນໍ້າຂອງ, ການສັນຈອນໃນວຽງຈັນ ຫຼື ສິນຄ້າກະສິກຳຈາກປາກຊ່ອງ, ເຮົາຈະໃຊ້ເຕັກນິກທີ່ເອີ້ນວ່າ QLoRA ຮ່ວມກັບຫໍສະໝຸດ BitsAndBytes.

ລຸ່ມນີ້ຄືຕົວຢ່າງ Code ໃນການໂຫຼດໂມເດວລະດັບ 70B ມາໄວ້ເທິງ Hardware ທີ່ມີຊັບພະຍາກອນຈຳກັດ ໂດຍໃຊ້ເຕັກນິກ NF4 (NormalFloat 4-bit):

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

# 1. ກຳນົດຄ່າ BitsAndBytes ໃຫ້ເປັນ 4-bit Quantization (NF4)
# NF4 (NormalFloat 4) ແມ່ນ Data type ທີ່ຖືກອອກແບບມາສຳລັບ Weights ທີ່ມີການແຈກຢາຍແບບ Normal Distribution ໂດຍສະເພາະ
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16, # ປະມວນຜົນການຄຳນວນ (Matrix multiplication) ດ້ວຍ FP16 ເພື່ອຄວາມໄວ
    bnb_4bit_quant_type="nf4",           # ໃຊ້ NF4 ສໍາລັບເກັບຂໍ້ມູນ Weights
    bnb_4bit_use_double_quant=True,      # Quantize ຕົວ Scale factor ອີກຮອບເພື່ອປະຢັດ VRAM ເພີ່ມຕື່ມ
)

model_id = "meta-llama/Llama-2-70b-hf" # ຕົວຢ່າງໂມເດວ 70B

# 2. ໂຫຼດ Tokenizer ແລະ Model
print("ກຳລັງໂຫຼດໂມເດວຂະໜາດໃຫຍ່ ເຂົ້າສູ່ VRAM...")
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto" # ໃຫ້ລະບົບແບ່ງໂຫຼດເຂົ້າ VRAM ຂອງ GPU ອັດຕະໂນມັດ
)

print(f"ການໂຫຼດສຳເລັດ! ປະລິມານ VRAM ທີ່ໃຊ້ປະຈຸບັນ: {model.get_memory_footprint() / 1e9:.2f} GB")

ໝາຍເຫດ: ໂມເດວຂະໜາດ 70B ເມື່ອໂຫຼດດ້ວຍ 4-bit ຈະກິນພື້ນທີ່ VRAM ປະມານ 36-38 GB ເທົ່ານັ້ນ! ເຊິ່ງທ່ານສາມາດໃຊ້ GPU ເຊັ່ນ NVIDIA RTX 4090 (24GB) ຈຳນວນ 2 ໜ່ວຍແບບເຊື່ອມຕໍ່ກັນ, ຫຼຸດຄ່າໃຊ້ຈ່າຍກວ່າການໃຊ້ Enterprise Hardware ໄດ້ຫຼາຍເທົ່າຕົວ.

Key Takeaways

ບົດສະຫຼຸບ

ເຕັກນິກ Quantization ບໍ່ພຽງແຕ່ເປັນເລື່ອງຂອງການຫຍໍ້ຂະໜາດໂມເດວ, ແຕ່ມັນຄື ການກະຈາຍໂອກາດທາງດ້ານ AI (Democratizing AI). ມັນອະນຸຍາດໃຫ້ນັກຮຽນ, ນັກຄົ້ນຄວ້າ ແລະ ນັກທຸລະກິດໃນປະເທດລາວທີ່ອາດຈະບໍ່ມີທຶນມະຫາສານໃນການເຂົ້າເຖິງ Supercomputer ສາມາດນຳໃຊ້, ທົດລອງ ແລະ ພັດທະນາເຕັກໂນໂລຊີລະດັບໂລກໄດ້. ການປ່ຽນໂມເດວ 70 ຄື Parameter ມາສູ່ໜ້າຈໍແລັບທັອບທົ່ວໄປ ເຮັດໃຫ້ພວກເຮົາສາມາດພັດທະນາ AI ທີ່ເຂົ້າໃຈພາສາ ແລະ ບໍລິບົດທ້ອງຖິ່ນຂອງລາວໄດ້ງ່າຍ ແລະ ປະຢັດຕົ້ນທຶນໄດ້ຢ່າງແທ້ຈິງ.