Blockdit Logo
Blockdit Logo (Mobile)
สำรวจ
ลงทุน
คำถาม
เข้าสู่ระบบ
มีบัญชีอยู่แล้ว?
เข้าสู่ระบบ
หรือ
ลงทะเบียน
Shoper Gamer
•
ติดตาม
เมื่อวาน เวลา 05:55 • การศึกษา
Ai By Shoper Gamer
LLM Quantization คืออะไร?
โดย
ในยุคที่โมเดลภาษาขนาดใหญ่ (LLM) กำลังครองวงการ AI ปัญหาสำคัญที่นักพัฒนาต้องเจอคือ โมเดลอย่าง Llama 3 หรือ DeepSeek มีพารามิเตอร์หลายพันล้านตัว เมื่อเก็บในรูปแบบ FP16 หรือ FP32 ต้องใช้หน่วยความจำมหาศาล ทำให้เครื่องทั่วไปแทบจะรันไม่ได้
ลองจินตนาการว่าโมเดลขนาด 7 พันล้านพารามิเตอร์ (7B) ในรูปแบบ FP16 ต้องใช้หน่วยความจำประมาณ 14 GB ซึ่งหมายความว่าคุณต้องมี GPU ที่มี VRAM อย่างน้อย 16 GB ขึ้นไป นั่นคือกำแพงที่ทำให้หลายคนไม่สามารถเข้าถึง LLM ได้ครับ
LLM Quantization คือเทคโนโลยีที่เข้ามาทลายกำแพงนี้ ด้วยการลดความละเอียดของตัวเลขที่ใช้เก็บน้ำหนัก (Weights) และค่าการทำงาน (Activations) ของโมเดล จาก 32-bit หรือ 16-bit ให้เหลือ 8-bit, 4-bit หรือแม้แต่ 2-bit ทำให้โมเดลมีขนาดเล็กลง 2-8 เท่า และสามารถรันบนเครื่องทั่วไปได้โดยที่คุณภาพของคำตอบยังใกล้เคียงเดิม
★
LLM Quantization คืออะไร?
LLM Quantization (การควอนไทซ์) คือกระบวนการลดความแม่นยำของตัวเลขที่ใช้แทนค่าน้ำหนักและค่าการทำงานภายในโมเดล จากรูปแบบที่มีความละเอียดสูง (เช่น FP32) ให้กลายเป็นรูปแบบที่มีความละเอียดต่ำกว่า (เช่น FP16, INT8, INT4)
หัวใจของแนวคิดนี้คือ โมเดล LLM มีความซ้ำซ้อนและทนทานต่อสัญญาณรบกวนได้ดี การปัดเศษค่าเล็กน้อยในแต่ละพารามิเตอร์ไม่ได้ทำให้โมเดลพัง เพราะเมื่อรวมกันหลายพันล้านตัวแล้ว ความผิดพลาดจะหักล้างกันไปเอง
💡 สรุปสั้นๆ: LLM Quantization คือเทคนิคการลดขนาดโมเดลด้วยการลดความละเอียดของตัวเลขที่ใช้เก็บค่าน้ำหนักและค่าการทำงาน ช่วยให้โมเดลขนาดใหญ่สามารถรันบนเครื่องทั่วไปได้ โดยแลกกับคุณภาพที่ลดลงเล็กน้อย
★
LLM Quantization ทำงานอย่างไร?
กระบวนการ Quantization มีหลักการพื้นฐานดังนี้ครับ
⚪ การ Map ค่าจาก High Precision ไปยัง Low Precision: สมมติว่าเรามีค่าน้ำหนัก 0.7193... ในรูปแบบ FP16 เมื่อทำการ Quantize ระบบจะหาค่าในถัง (Bucket) ของ INT4 ที่ใกล้เคียงที่สุด (เช่น 0.72) แล้วเก็บค่านั้นแทน เมื่อโมเดลต้องการใช้งาน ค่าจะถูก Dequantize กลับมาเป็น FP16 อีกครั้ง
⚪ ปัญหา Outliers: ปัญหาสำคัญที่สุดของ Quantization คือ Outliers หรือค่าที่สูงผิดปกติใน Activation ของ LLM ซึ่งอาจสูงกว่าค่าปกติหลายร้อยเท่า หาก Quantize ค่าเหล่านี้ด้วยวิธีธรรมดา จะทำให้ความแม่นยำของโมเดลตกลงอย่างรุนแรง
⚪ วิธีแก้ปัญหา Outliers:
- LLM.int8(): แยก Outliers ออกมาเก็บใน FP16 และ Quantize ส่วนที่เหลือเป็น INT8
- SmoothQuant: ย้ายความยากในการ Quantize จาก Activation ไปยัง Weight ด้วยการ Scale ค่า
- AWQ: ระบุว่า Weight เพียง 1% เท่านั้นที่มีความสำคัญสูง และใช้เทคนิค Activation-Aware Scaling เพื่อรักษาความแม่นยำ
⚪ ระดับความละเอียดของ Quantization:
- FP32: ขนาดต่อ Weight อยู่ที่ 4 Bytes (ขนาดโมเดล 7B รวมประมาณ 28 GB) ให้คุณภาพระดับสมบูรณ์แบบ
- FP16: ขนาดต่อ Weight อยู่ที่ 2 Bytes (ขนาดโมเดล 7B รวมประมาณ 14 GB) ให้คุณภาพเกือบสมบูรณ์แบบ
- INT8: ขนาดต่อ Weight อยู่ที่ 1 Byte (ขนาดโมเดล 7B รวมประมาณ 7 GB) ให้คุณภาพใกล้เคียงเดิม
- INT4: ขนาดต่อ Weight อยู่ที่ 0.5 Byte (ขนาดโมเดล 7B รวมประมาณ 3.5 GB) คุณภาพลดลงเล็กน้อย
- น้อยกว่า 4-bit (< 4-bit): ขนาดต่อ Weight น้อยกว่า 0.5 Byte (ขนาดโมเดล 7B น้อยกว่า 3.5 GB) แต่คุณภาพของคำตอบจะลดลงอย่างชัดเจน
★
ประเภทของ LLM Quantization
Quantization สามารถแบ่งประเภทได้หลายมุมมองดังนี้ครับ
⏳ จำแนกตามช่วงเวลาที่ทำ (Timing):
⚪ Post-Training Quantization (PTQ): ทำ Quantize หลังจากโมเดลเทรนเสร็จแล้ว เป็นวิธีที่นิยมที่สุดเพราะไม่ต้องเทรนใหม่
⚪ Quantization-Aware Training (QAT): ทำ Quantize ระหว่างการเทรนหรือ Fine-tune ทำให้โมเดลเรียนรู้ที่จะชดเชยความผิดพลาดจากการ Quantize ได้ แต่ใช้ทรัพยากรมากกว่า
🤖 จำแนกตามสิ่งที่ถูก Quantize:
⚪ Weight-Only Quantization: Quantize เฉพาะค่าน้ำหนัก แต่ Activation ยังคงเป็น FP16 วิธีนี้ช่วยลดขนาดโมเดลได้มาก แต่ไม่ได้เร่งความเร็วการประมวลผลมากนัก
⚪ Weight + Activation Quantization: Quantize ทั้งค่าน้ำหนักและค่าการทำงาน ช่วยเร่งความเร็วได้จริง แต่ทำได้ยากกว่าเพราะ Activation มี Outliers สูง
🧠 จำแนกตามอัลกอริทึม:
⚪ GPTQ (Generative Pre-trained Transformer Quantization): อัลกอริทึมยอดนิยมสำหรับการ Quantize ลง 4-bit บน GPU ใช้ Hessian Matrix ในการหาค่า Quantize ที่เหมาะสมที่สุด มี Community ขนาดใหญ่ แต่ใช้เวลา Quantize นานและต้องใช้ Calibration Dataset
⚪ AWQ (Activation-aware Weight Quantization): วิเคราะห์ Activation เพื่อรักษา Weight สำคัญ (1%) ไว้ในความละเอียดสูง ให้คุณภาพดีกว่า GPTQ เล็กน้อยและใช้เวลาประมวลผลเร็วกว่า เหมาะสำหรับ GPU Inference
⚪ SmoothQuant: แก้ปัญหา Outliers โดยย้ายความยากในการ Quantize จาก Activation ไปยัง Weight ทำให้ทำ Weight + Activation INT8 ได้พร้อมกัน ช่วยเร่งความเร็วในการประมวลผลระดับ Production ได้จริง
⚪ LLM.int8(): ใช้เทคนิค Mixed-Precision แยก Outliers ไปเก็บใน FP16 และ Quantize ส่วนที่เหลือเป็น INT8 ผ่านไลบรารี bitsandbytes ใช้งานง่ายกับโมเดลทั่วไป
⚪ NF4 (Normal Float 4): รูปแบบ 4-bit แบบ Non-Uniform ที่ออกแบบมาสำหรับ QLoRA โดยเฉพาะ ช่วยให้สามารถ Fine-tune โมเดลขนาดใหญ่ (เช่น 70B) บน GPU เดี่ยวได้
⚪ GGUF (GPT-Generated Unified Format): รูปแบบไฟล์จาก llama.cpp รองรับตั้งแต่ 2-bit ถึง 8-bit มีความยืดหยุ่นสูง รันได้ดีทั้งบน CPU, GPU, มือถือ หรืออุปกรณ์ Edge เหมาะอย่างยิ่งสำหรับ Local LLM
⚪ EXL2 (ExLlamaV2): อัลกอริทึมที่รองรับการ Quantize แบบ Mixed-Bit (เช่น ผสม 4-bit และ 6-bit) ออกแบบมาสำหรับ GPU โดยเฉพาะ ให้ความเร็วในการ Inference สูงมาก แต่ไม่รองรับการทำงานบน CPU
★
ประโยชน์ของ LLM Quantization
✅ ลดขนาดโมเดลอย่างมหาศาล: โมเดล 7B จากเดิม 14 GB (FP16) ลดเหลือเพียง 3.5-4 GB (INT4) ทำให้รันบน GPU ขนาด 8 GB หรือแม้แต่ CPU ได้
✅ ประหยัดหน่วยความจำ GPU: ลดความต้องการ VRAM ทำให้สามารถรันโมเดลขนาดใหญ่ขึ้นบนฮาร์ดแวร์เดิมได้
✅ ลดต้นทุนการ Inference: ใช้ทรัพยากรน้อยลง ทำให้ค่าใช้จ่ายในการให้บริการ LLM ลดลงตามไปด้วย
✅ เปิดทางให้ Local LLM: Quantization คือเทคโนโลยีเบื้องหลัง Ollama และการรัน LLM บนเครื่องส่วนตัว
✅ คุณภาพยังใกล้เคียงเดิม: ด้วยเทคนิคสมัยใหม่ โมเดล 4-bit สามารถรักษาคุณภาพไว้ได้ดีมาก โดยเฉพาะกับงานทั่วไป
★
ควรมีความรู้พื้นฐานอะไรบ้าง?
ก่อนจะเริ่มต้นใช้งานหรือทำความเข้าใจ LLM Quantization ควรมีความรู้พื้นฐานดังนี้ครับ
⚪ พื้นฐาน Machine Learning: เข้าใจว่า Neural Network คืออะไร และกระบวนการเทรนทำงานอย่างไร
⚪ พื้นฐาน LLM: เข้าใจว่า LLM มีโครงสร้างแบบ Transformer และประกอบด้วยพารามิเตอร์จำนวนมาก
⚪ พื้นฐานเลขทศนิยมและจำนวนเต็ม: เข้าใจความแตกต่างระหว่าง FP32, FP16, INT8 และ INT4
⚪ พื้นฐาน Python: สำหรับการใช้งานเครื่องมืออย่าง bitsandbytes หรือ AutoGPTQ
⚪ พื้นฐาน Hardware: เข้าใจเรื่อง VRAM, GPU Architecture และข้อจำกัดด้านฮาร์ดแวร์
★
LLM Quantization 32 FP VS LLM Quantization 16 FP
ความแตกต่างระหว่าง FP32 และ FP16 ในมิติต่างๆ สามารถอธิบายได้ดังนี้ครับ
📦 ขนาดต่อ Weight และขนาดโมเดล 7B: FP32 ใช้พื้นที่ 4 Bytes ต่อ Weight (รวมประมาณ 28 GB) ส่วน FP16 ใช้เพียง 2 Bytes ต่อ Weight (รวมประมาณ 14 GB)
🗣️ คุณภาพของคำตอบ: FP32 ให้ความแม่นยำสมบูรณ์แบบ 100% ส่วน FP16 ให้คุณภาพเกือบสมบูรณ์แบบ โดยลดลงน้อยมากจนแทบสังเกตไม่ได้
⚡ ความเร็วและหน่วยความจำ: FP32 ประมวลผลได้ช้ากว่าและกินทรัพยากรสูง ส่วน FP16 ทำงานได้เร็วกว่าเนื่องจากใช้หน่วยความจำน้อยกว่า
🧑💻 กรณีการใช้งาน: FP32 เหมาะกับการเทรนโมเดล (Training) และงานที่ต้องการความแม่นยำระดับสูงสุด ส่วน FP16 เหมาะสำหรับการ Inference และเป็นมาตรฐานในการเทรนทั่วไป
🖥️ ความต้องการด้าน Hardware: FP32 ต้องการฮาร์ดแวร์ระดับสูงมาก ส่วน FP16 ต้องการทรัพยากรระดับปานกลางและถือเป็นมาตรฐานทั่วไปสำหรับ LLM
★
ตัวอย่างการใช้งาน LLM Quantization
⚪ รัน LLM บน MacBook: ใช้ Ollama ที่ใช้ Quantization ในรูปแบบ GGUF ทำให้สามารถรัน Llama 3 หรือโมเดลอื่นๆ บน MacBook Air ได้
⚪ Fine-tune ด้วย QLoRA: ใช้ Quantization 4-bit ร่วมกับ LoRA เพื่อ Fine-tune โมเดลขนาดใหญ่ 70B บน GPU เพียงตัวเดียว
⚪ ให้บริการ API แบบประหยัด: ใช้ vLLM ที่รองรับ GPTQ และ AWQ เพื่อให้บริการ LLM ด้วยต้นทุนที่ต่ำลง
⚪ Edge Deployment: ใช้เทคนิคบีบอัดโมเดลเพื่อนำ LLM ไปรันบนสมาร์ตโฟนหรืออุปกรณ์ IoT ได้
★ ตัวอย่างการเริ่มต้นใช้งาน LLM Quantization ง่ายๆ
1
Python
# 1. ติดตั้ง bitsandbytes และ transformers
# pip install bitsandbytes transformers accelerate
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
# 2. ตั้งค่า 4-bit Quantization
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # ใช้ NF4
bnb_4bit_compute_dtype=torch.float16,
)
# 3. โหลดโมเดลแบบ 4-bit
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
quantization_config=bnb_config,
device_map="auto"
)
# 4. ใช้งานได้เลย โมเดลจะใช้หน่วยความจำน้อยลงมาก
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
inputs = tokenizer("สวัสดี", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
✏️ Shoper Gamer
>>
https://shopergamer.vercel.app
✓
[Shoper Gamer] Local AI คืออะไร 👇
>>
https://www.blockdit.com/posts/69b9665107a66dffc48973b6
✓
[Shoper Gamer] LLM คืออะไร 👇
>>
https://www.blockdit.com/posts/66b4483948468750cd9f32ee
✓
[Shoper Gamer] Python คืออะไร 👇
>>
https://www.blockdit.com/posts/693e536dcd98b1dc26cd7cd4
Credit :
👇
●
https://localllm.in/blog/quantization-explained
●
https://huggingface.co/docs/optimum/concept_guides/quantization
●
https://apxml.com/courses/getting-started-local-llms/chapter-3-finding-selecting-local-llms/model-quantization
ข่าวรอบโลก
ai
เทคโนโลยี
บันทึก
1
ดูเพิ่มเติมในซีรีส์
Ai
1
โฆษณา
ดาวน์โหลดแอปพลิเคชัน
© 2026 Blockdit
เกี่ยวกับ
ช่วยเหลือ
คำถามที่พบบ่อย
นโยบายการโฆษณาและบูสต์โพสต์
นโยบายความเป็นส่วนตัว
แนวทางการใช้แบรนด์ Blockdit
Blockdit เพื่อธุรกิจ
ไทย