Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

Mistral AI: ການຣັນໂມເດວອັດສະລິຍະຈາກເອີຣົບໃນເຄື່ອງຂອງທ່ານເອງ (Local Deployment)

ໂພສເມື່ອ # Model Updates & Ecosystems # LLMs # Local Deployment # Sparse Mixture of Experts

Mistral AI: ການຣັນໂມເດວອັດສະລິຍະຈາກເອີຣົບໃນເຄື່ອງຂອງທ່ານເອງ

ໃນຍຸກທີ່ປັນຍາປະດິດ (AI) ກ້າວໄປໜ້າຢ່າງໄວວາ, ການເພິ່ງພາປະມວນຜົນເທິງ Cloud ພຽງຢ່າງດຽວອາດຈະບໍ່ຕອບໂຈດສະເໝີໄປ ໂດຍສະເພາະສຳລັບນັກພັດທະນາ ຫຼື ອົງກອນໃນລາວ. ລອງນຶກພາບເບິ່ງວ່າ: ບໍລິສັດໂລຈິສຕິກ (Logistics) ໃນນະຄອນຫຼວງວຽງຈັນ ຕ້ອງການໃຊ້ AI ຊ່ວຍວິເຄາະເສັ້ນທາງການຈັດສົ່ງສິນຄ້າ ເພື່ອຫຼີກລ່ຽງລົດຕິດໃນຊ່ວງບຸນພະທາດຫຼວງ, ແຕ່ພວກເຂົາບໍ່ຕ້ອງການສົ່ງຂໍ້ມູນລູກຄ້າທີ່ເປັນຄວາມລັບຂຶ້ນໄປເທິງ Server ຢູ່ຕ່າງປະເທດ, ທັງຍັງມີຂໍ້ຈຳກັດເລື່ອງຄວາມໄວຂອງອິນເຕີເນັດ. ຄຳຕອບສຳລັບບັນຫານີ້ຄື: ການຣັນໂມເດວແບບ Local (Local Deployment).

Mistral AI ຈາກເອີຣົບໄດ້ສ້າງແຮງສັ່ນສະເທືອນໃນວົງການ ດ້ວຍການປ່ອຍໂມເດວ Mixtral 8x7B ອອກມາ ເຊິ່ງເປັນໂມເດວທີ່ມີປະສິດທິພາບທຽບເທົ່າ GPT-3.5 ແຕ່ສາມາດຣັນໄດ້ໃນ Hardware ລະດັບ Consumer ຖ້າເຮົາເຂົ້າໃຈວິທີການປັບແຕ່ງມັນ. ບົດຄວາມນີ້ຈະພາທ່ານນັກພັດທະນາ ເຈາະເລິກລົງໄປໃນສະຖາປັດຕະຍະກຳ Sparse Mixture of Experts (SMoE) ຂອງໂມເດວນີ້ ແລະ ວິທີການ Deploy ມັນໃນເຄື່ອງຂອງທ່ານເອງ.

ສະຖາປັດຕະຍະກຳ Sparse Mixture of Experts (SMoE): ເບື້ອງຫຼັງຄວາມສະຫຼາດ

ກ່ອນໜ້ານີ້, ໂມເດວພາສາຂະໜາດໃຫຍ່ (LLMs) ສ່ວນຫຼາຍໃຊ້ສະຖາປັດຕະຍະກຳແບບ “Dense” ໝາຍຄວາມວ່າ ທຸກໆ Parameter ໃນໂມເດວຈະຖືກນຳມາຄຳນວນໃນທຸກໆຄັ້ງທີ່ປ້ອນຂໍ້ມູນເຂົ້າໄປ (Token). ແຕ່ສຳລັບ Mixtral 8x7B, ພວກເຂົາໃຊ້ນະວັດຕະກຳທີ່ເອີ້ນວ່າ Sparse Mixture of Experts.

ການເຮັດວຽກຂອງ SMoE ກໍຄືກັບການເຮັດວຽກໃນອົງກອນຂະໜາດໃຫຍ່. ສົມມຸດທ່ານມີເອກະສານສອບຖາມ ຖ້າເປັນຄຳຖາມກ່ຽວກັບ ລະດັບນໍ້າຂອງ (Mekong River), ແທນທີ່ຈະໃຫ້ພະນັກງານທຸກຄົນໃນກະຊວງມາອ່ານແລະວິເຄາະ, ລະບົບຈະສົ່ງເອກະສານນັ້ນໄປໃຫ້ກົມຊັບພະຍາກອນນໍ້າໂດຍກົງ. ອັນນີ້ຊ່ວຍປະຢັດເວລາ ແລະ ຊັບພະຍາກອນໄດ້ຢ່າງມະຫາສານ.

ສົມຜົນການເຮັດວຽກຂອງ Gating Network (Router)

ໃນແຕ່ລະຊັ້ນ (Layer) ຂອງໂມເດວ, Mixtral ປະກອບມີ 8 Experts (ເຊິ່ງກໍຄື Feed-Forward Neural Networks - FFNN). ເມື່ອມີ Token ແລ່ນເຂົ້າມາ, Router (Gating Network) ຈະເປັນໂຕຕັດສິນວ່າຈະສົ່ງ Token ນີ້ໄປໃຫ້ Expert ໃດ. Mixtral ຈະເລືອກເອົາພຽງແຕ່ 2 ຄົນທີ່ເກັ່ງທີ່ສຸດສຳລັບ Token ນັ້ນ (Top-2 routing).

ສົມຜົນທາງຄະນິດສາດສຳລັບ SMoE ແມ່ນ:

y=i=1nG(x)iEi(x)y = \sum_{i=1}^{n} G(x)_i \cdot E_i(x)

ໂດຍທີ່:

ຜົນລັບທີ່ໄດ້: ເຖິງແມ່ນວ່າໂມເດວນີ້ຈະມີ Parameters ລວມເຖິງ 47 ຕື້ (47B) ໂຕ, ແຕ່ໃນການຄຳນວນແຕ່ລະ Token ມັນດຶງມາໃຊ້ພຽງປະມານ 13 ຕື້ (13B) ໂຕເທົ່ານັ້ນ. ນີ້ຄືເຫດຜົນທີ່ Inference Speed ຂອງມັນໄວຫຼາຍເມື່ອທຽບກັບໂມເດວ 47B ແບບ Dense.

ບັນຫາ Load Balancing (ຄໍຂວດ)

ສິ່ງທີ່ຕ້ອງລະວັງໃນເລື່ອງຂອງ SMoE ຄືການເກີດຄໍຂວດ (Bottleneck). ຖ້າ Router ສົ່ງທຸກຮູບແບບຄຳຖາມໄປຫາ Expert ໂຕດຽວ (ປຽບເໝືອນທຸກຄົນພາກັນຂັບລົດໄປທາງປະຕູໄຊໃນເວລາເລີກວຽກ), ເຄືອຂ່າຍຈະຊ້າລົງທັນທີ. ສະນັ້ນ, ໃນຊ່ວງ Training ເຂົາເຈົ້າຈຶ່ງຕ້ອງເພີ່ມ Auxiliary Loss ເພື່ອບັງຄັບໃຫ້ Router ກະຈາຍວຽກໃຫ້ Experts ໂຕອື່ນໆຢ່າງສົມດຸນ.

ການຣັນໂມເດວໃນເຄື່ອງ Local: ຈັດການກັບຂໍ້ຈຳກັດຂອງ VRAM

ເຖິງແມ່ນວ່າ Compute ຈະໃຊ້ພຽງແຕ່ 13B, ແຕ່ໃນການຈະຣັນ Mixtral 8x7B ທ່ານຍັງຈຳເປັນຕ້ອງໂຫຼດ Parameter ທັງໝົດ 47B ເຂົ້າໄປໃນໜ່ວຍຄວາມຈຳນອກ (VRAM/RAM). ຖ້າຈະໂຫຼດແບບ Full Precision (16-bit), ຕ້ອງໃຊ້ VRAM ເຖິງ 90GB+, ເຊິ່ງເປັນໄປບໍ່ໄດ້ເລີຍສຳລັບນັກສຶກສາຢູ່ສະຖາບັນການສຶກສາ (ເຊັ່ນ ມຊ) ຫຼື ບໍລິສັດ SME ຂະໜາດນ້ອຍ.

ວິທີການແກ້ໄຂຄື: Quantization (ການລົດຄວາມລະອຽດຂອງຕົວເລກ). ການໃຊ້ເຕັກນິກຢ່າງ 4-bit Quantization (ຜ່ານ AWQ, GPTQ ຫຼື GGUF) ຈະລົດການກິນ VRAM ລົງມາເຫຼືອພຽງປະມານ 24GB ສຳລັບການ Inferenza ໄດ້ຢ່າງສະບາຍ, ໝາຍຄວາມວ່າ Single GPU ຄື RTX 3090, 4090, ຫຼື ເຄື່ອງ Mac ທີ່ໃຊ້ຊິບ M-series (M2/M3 Max ທີ່ມີ RAM 64GB ຂຶ້ນໄປ) ກໍສາມາດແບກໂມເດວນີ້ໄດ້ນັ້ນເອງ.

ຕົວຢ່າງ Code ດ້ວຍ Python (Hugging Face Transformers)

ນີ້ຄືຕົວຢ່າງ Code ສຳລັບນັກພັດທະນາໃນການໂຫຼດ MoE model ມາໃຊ້ໃນ VRAM ທີ່ຈຳກັດ ໂດຍການໃຊ້ bitsandbytes ເພື່ອເຮັດ 4-bit Quantization:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

# ກຳນົດຄ່າ 4-bit Quantization ເພື່ອໃຫ້ສາມາດຣັນໃນ RTX 3090/4090 ທີ່ມີ 24GB VRAM ໄດ້
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",     # ໃຊ້ NormalFloat 4 (ເໝາະກັບການຄວບຄຸມ Loss)
    bnb_4bit_compute_dtype=torch.float16
)

model_id = "mistralai/Mixtral-8x7B-Instruct-v0.1"

print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(model_id)

print("Loading quantized SMoE model (This might take a while)...")
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    device_map="auto" # ໃຫ້ລະບົບຈັດການໂຍນ weights ໄປໃສ່ GPU ທີ່ວ່າງເອງ
)

# ຕັ້ງຄຳຖາມທີ່ກ່ຽວຂ້ອງກັບບໍລິບົດທ້ອງຖິ່ນລາວ
prompt = "[INST] ວິທີການທີ່ດີທີ່ສຸດໃນການຈັດການການຈາລະຈອນຂົນສົ່ງສິນຄ້າ ໃນຊ່ວງບຸນພະທາດຫຼວງວຽງຈັນ ແມ່ນຫຍັງ? ອະທິບາຍເປັນຂັ້ນຕອນ. [/INST]"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")

# ກະຕຸ້ນການທຳງານຂອງ Experts ແລະ Generate ຄຳຕອບ
print("Generating response...")
outputs = model.generate(
    **inputs, 
    max_new_tokens=400,
    temperature=0.7,
    do_sample=True
)

answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("\n--- ຜົນລັບ ---\n")
print(answer)

(ໝາຍເຫດ: ປະຈຸບັນຄວາມສາມາດໃນການຕອບໂຕ້ເປັນພາສາລາວຂອງ Base Model ອາດຈະຍັງຕ້ອງອາໄສການ Fine-tuning ເພີ່ມເຕີມ ເພື່ອຜົນລັບທີ່ພາຍຸງໄວຍາກອນໄດ້ສົມບູນ ແຕ່ໂຄງສ້າງການຫາເຫດຜົນໃນຮູບແບບ Zero-shot ນັ້ນຖືວ່າຢູ່ໃນລະດັບສູງຫຼາຍ).

ທາງເລືອກສຳລັບລະບົບ Server ຂະໜາດນ້ອຍ (vLLM)

ຫາກອົງກອນຂອງທ່ານມີ Server ພາຍໃນ ແລະ ຕ້ອງການເຮັດໃຫ້ເປັນ Local API ໄວ້ໃຫ້ແອັບພລິເຄຊັນພາຍໃນ (Internal Tools) ເອີ້ນໃຊ້ວຽກ, ແນະນຳໃຫ້ໃຊ້ PagedAttention Framework ເຊັ່ນ vLLM ແທນການໃຊ້ transformers ທຳມະດາ. vLLM ຈະຊ່ວຍໃນການຈັດການ Memory ຂອງ Tokens ແລະ ສົມທົບກັບ SMoE ຂອງ Mixtral ໃນການເພີ່ມ Throughput (ຈຳນວນ Request ຕໍ່ວິນາທີ) ໄດ້ສູງຂຶ້ນຢ່າງໜ້າຕົກໃຈ, ຕອບໂຈດການໃຊ້ງານພ້ອມກັນຫຼາຍໆ User ໂດຍບໍ່ກະຕຸກ.

Key Takeaways

ສະຫຼຸບແລ້ວ, ການມາເຖິງຂອງ Mixtral 8x7B ແລະ ສະຖາປັດຕະຍະກຳແບບ SMoE ບໍ່ພຽງແຕ່ເປັນການສະແດງໃຫ້ເຫັນເຖິງພະລັງຂອງການແຂ່ງຂັນທາງທຸລະກິດ AI ຈາກຝັ່ງເອີຣົບເທົ່ານັ້ນ, ແຕ່ມັນຍັງສະທ້ອນໃຫ້ເຫັນວ່າ ເຕັກໂນໂລຊີ AI ລະດັບສູງກຳລັງຖືກປັບໃຫ້ເປັນປະຊາທິປະໄຕ (Democratized) ຫຼາຍຂຶ້ນ. ສຳລັບນັກພັດທະນາ ແລະ ວິສະວະກອນຊອບແວໃນ ສປປ ລາວ, ນີ້ຄືໂອກາດທອງໃນການດຶງເອົາພະລັງຊີພີຍູທີ່ຊັບຊ້ອນມາຣັນເທິງ Server ຊັ້ນລຸ່ມຂອງຕົນເອງ, ສາມາດເປັນເຈົ້າຂອງຂໍ້ມູນ, ຮັກສາ ຄວາມລັບຂອງທຸລະກິດ ແລະ ນຳສະເໜີບໍລິການອັດສະລິຍະທີ່ຕອບໂຈດສະພາບການຕົວຈິງໃນບ້ານເຮົາໄດ້ຢ່າງມີປະສິດທິຜົນສູງສຸດ. ດ້ວຍການເຂົ້າໃຈຫຼັກການຂອງ Experts ແລະ Quantization ຂໍ້ຈຳກັດທາງ Hardware ຈະບໍ່ແມ່ນອຸປະສັກທີ່ຜ່ານໄປບໍ່ໄດ້ອີກຕໍ່ໄປ.