ข้ามไปยังเนื้อหาหลัก

Quantization Aware Training: คู่มือปรับปรุงการอนุมานแบบโลคัลของ Gemma 4

รัน Gemma 4 12B QAT แบบโลคัลด้วย llama.cpp และดูว่า Quantization-Aware Training ช่วยปรับปรุงการอนุมาน GGUF แบบ 4 บิต ลดการใช้ VRAM เพิ่มความเร็ว และทำให้ AI แบบโลคัลเสถียรยิ่งขึ้นบน GPU สำหรับผู้ใช้ทั่วไป
อัปเดตแล้ว 3 ส.ค. 2569  · 8 นาที อ่าน

สำรวจด้วย AI

เปิดใน ChatGPTเปิดใน Claudeเปิดใน Perplexity

การควอนไทซ์เป็นหนึ่งในวิธีที่ใช้งานได้จริงที่สุดในการรันโมเดลภาษาขนาดใหญ่บน GPU สำหรับผู้ใช้ทั่วไป แทนที่จะใช้เวทที่มีความแม่นยำสูงซึ่งกิน VRAM มาก เราสามารถใช้โมเดลแบบบีบอัด 4 บิตที่พอดีกับ GPU อย่าง NVIDIA RTX 4090 โมเดล Gemma ของ Google ก็เป็นส่วนหนึ่งของกระแสที่กำลังเติบโตนี้ เพื่อทำให้ AI แบบเปิดทรงพลังรันแบบโลคัลได้ง่ายขึ้น

ในบทช่วยสอนนี้ เราจะรัน Gemma 4 12B loคัลด้วย llama.cpp และเปรียบเทียบเวอร์ชันฐานของโมเดลกับอีกเวอร์ชันที่ปรับจูนด้วย Quantization-Aware Training (QAT)

อย่าลืมอ่านบทช่วยสอนอื่น ๆ เกี่ยวกับโมเดลของ Google ด้วย ได้แก่ สร้างเอเจนต์ AI ด้วย Gemma 4 และ Ollama และ วิธี Fine-Tune Gemma 4

Quantization คืออะไร?

Quantization คือเทคนิคการบีบอัดโมเดลที่ลดความแม่นยำของเวทของโมเดล 

ปกติแล้วโมเดลภาษาขนาดใหญ่จะถูกจัดเก็บในฟอร์แมตความแม่นยำสูงอย่าง BF16 หรือ FP16 ซึ่งรักษาคุณภาพไว้ได้ดีแต่ใช้หน่วยความจำมาก การควอนไทซ์จะแปลงเวทเหล่านั้นให้เป็นฟอร์แมตที่มีจำนวนบิตต่ำลง เช่น 8 บิตหรือ 4 บิต ทำให้โมเดลใช้ VRAM น้อยลงและรันแบบโลคัลได้ง่ายขึ้น Hugging Face ระบุว่าการควอนไทซ์ 8 บิตสามารถลดการใช้หน่วยความจำได้ราวครึ่งหนึ่ง ขณะที่ 4 บิตจะลดได้มากยิ่งขึ้น

ข้อแลกเปลี่ยนคือความแม่นยำที่ต่ำลงอาจทำให้คุณภาพผลลัพธ์ลดลงได้ โดยเฉพาะหากโมเดลไม่ได้ถูกปรับให้เหมาะกับการควอนไทซ์ พูดง่าย ๆ คือ BF16 และ FP16 โดยมากให้คุณภาพดีที่สุดแต่ใช้หน่วยความจำมาก โมเดล 8 บิตมีขนาดเล็กลงพร้อมรักษาคุณภาพได้ดี ส่วนโมเดล 4 บิตมีขนาดเล็กกว่ามากแต่อาจสูญเสียความแม่นยำหรือความเสถียรบางส่วน 

สำหรับการอนุมานแบบโลคัล ข้อแลกเปลี่ยนนี้มักคุ้มค่าเพราะช่วยให้รันโมเดลที่ใหญ่ขึ้นบน GPU สำหรับผู้ใช้ทั่วไปได้ แทนที่จะต้องใช้ฮาร์ดแวร์ดาต้าเซ็นเตอร์ที่มีราคาแพง

Quantization Aware Training คืออะไร?

Quantization-Aware Training (QAT) คือเทคนิคการฝึกที่ทำให้โมเดลถูกฝึกหรือปรับจูนโดยจำลองพฤติกรรมความแม่นยำต่ำระหว่างการฝึก ช่วยให้โมเดลคงความเสถียรหลังการควอนไทซ์ และสามารถปรับปรุงประสิทธิภาพการอนุมานแบบโลคัลที่ระดับบิตต่ำได้

QAT แตกต่างอย่างไร?

แนวทางทั่วไปอย่างการควอนไทซ์หลังการฝึก (post-training quantization) จะบีบอัดโมเดลหลังจากฝึกเสร็จแล้ว วิธีนี้เรียบง่ายและใช้งานจริงได้ แต่โมเดลอาจสูญเสียคุณภาพบางส่วนเพราะไม่ได้ถูกฝึกให้รับมือกับเวทความแม่นยำต่ำ 

ตามเอกสารของ Google AI Edge การควอนไทซ์หลังการฝึกเป็นขั้นตอนการแปลงที่ช่วยลดขนาดโมเดลและปรับปรุงเวลาแฝง โดยปกติสูญเสียความแม่นยำเพียงเล็กน้อย อย่างไรก็ตาม คุณภาพสุดท้ายยังขึ้นอยู่กับตัวโมเดลและระดับการควอนไทซ์ 

Quantization-Aware Training หรือ QAT ใช้แนวทางที่ต่างออกไป แทนที่จะควอนไทซ์หลังการฝึกเพียงอย่างเดียว QAT จะจำลองพฤติกรรมความแม่นยำต่ำระหว่างการฝึกหรือการปรับจูน ช่วยให้โมเดลเรียนรู้การรักษาความเสถียรเมื่อถูกแปลงเป็นฟอร์แมตที่เล็กลงในภายหลัง และลดการสูญเสียคุณภาพเมื่อบีบอัดโมเดล

นี่จึงเป็นเหตุผลที่ Gemma 4 QAT มีประโยชน์สำหรับ AI แบบโลคัล มันถูกสร้างโดยคำนึงถึงการควอนไทซ์ จึงรักษาคุณภาพของโมเดลต้นฉบับได้มากขึ้นขณะใช้หน่วยความจำน้อยลง สำหรับผู้ใช้ที่รันโมเดลบน GPU สำหรับผู้ใช้ทั่วไป นั่นอาจหมายถึงความเสถียรที่ระดับบิตต่ำดีขึ้น ใช้ VRAM น้อยลง และการอนุมานแบบโลคัลที่ใช้งานได้จริงมากขึ้น

ขั้นตอนที่ 1: ติดตั้งไลบรารีที่ต้องใช้และบิลด์ llama.cpp

ก่อนจะดาวน์โหลดโมเดล เราต้องเตรียมสภาพแวดล้อมโลคัลก่อน บทช่วยสอนนี้ทดสอบบนเครื่องที่มี GPU NVIDIA RTX 4090 และ VRAM 24 GB เราจะใช้ llama.cpp เป็นรันไทม์สำหรับอนุมาน ใช้ GGUF เป็นฟอร์แมตของโมเดล และไฟล์โมเดลควอนไทซ์ UD-Q4_K_XL

สภาพแวดล้อมที่ทดสอบ:

  • GPU: NVIDIA RTX 4090
  • VRAM: 24 GB
  • รันไทม์: llama.cpp
  • ฟอร์แมตโมเดล: GGUF
  • การควอนไทซ์: UD-Q4_K_XL

เราจะเปรียบเทียบโมเดล Unsloth GGUF ต่อไปนี้สองตัว:

  • unsloth/gemma-4-12B-it-GGUF
  • unsloth/gemma-4-12B-it-qat-GGUF

ก่อนอื่น ตรวจสอบว่า GPU พร้อมใช้งาน

nvidia-smi

RTX 4090 GPU overview

ถัดไป ติดตั้งแพ็กเกจระบบที่จำเป็นสำหรับการบิลด์ llama.cpp

apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y

โคลนรีโพสิทอรี llama.cpp อย่างเป็นทางการ

git clone https://github.com/ggml-org/llama.cpp

ตอนนี้บิลด์ llama.cpp โดยเปิดใช้งานการรองรับ CUDA วิธีนี้ช่วยให้เลเยอร์ของโมเดลรันบน GPU แทนที่จะเป็นแค่ CPU

cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF \
    -DGGML_CUDA=ON

คอมไพล์ไบนารีที่ต้องใช้

cmake --build llama.cpp/build \
    --config Release \
    -j \
    --clean-first \
    --target llama-cli llama-mtmd-cli llama-server llama-gguf-split

Building Llama.cpp from source

หลังบิลด์เสร็จ ไบนารีหลักที่เราจะใช้คือ llama-server ซึ่งช่วยให้เรารันโมเดล GGUF แบบโลคัลและเปิดเผยปลายทาง API ที่เข้ากันได้กับ OpenAI ให้เรียกด้วย curl ได้ 

ขั้นตอนที่ 2: ดาวน์โหลดโมเดล Gemma 4 12B แบบ Non-QAT และ QAT 

เมื่อ llama.cpp พร้อมแล้ว เราสามารถดาวน์โหลดโมเดล Gemma 4 12B ทั้งสองเวอร์ชันจาก Hugging Face จะดาวน์โหลดทั้งโมเดลที่ปรับสำหรับงานคำสั่งทั่วไป (instruction-tuned) และเวอร์ชัน QAT ในฟอร์แมต GGUF

ก่อนอื่น ติดตั้ง Hugging Face Hub CLI พร้อมรองรับการดาวน์โหลดที่เร็วขึ้น

pip install -U "huggingface_hub[hf_xet]" hf-xet hf_transfer

เปิดใช้งานการดาวน์โหลด Xet ประสิทธิภาพสูง

export HF_XET_HIGH_PERFORMANCE=1

ดาวน์โหลดโมเดล Gemma 4 12B แบบ instruction ในฟอร์แมต GGUF

hf download unsloth/gemma-4-12B-it-GGUF \
  --local-dir models/gemma-4-12B-it-GGUF \
  --include "*mmproj-BF16*" \
  --include "*UD-Q4_K_XL*"

จากนั้นดาวน์โหลดเวอร์ชัน QAT โดยใช้ฟอร์แมตการควอนไทซ์เดียวกัน

hf download unsloth/gemma-4-12B-it-qat-GGUF \
  --local-dir models/gemma-4-12B-it-qat-GGUF \
  --include "*mmproj-BF16*" \
  --include "*UD-Q4_K_XL*"

แฟล็ก --include ทำให้เราดาวน์โหลดเฉพาะไฟล์ที่ต้องใช้ในบทช่วยสอนนี้ แทนที่จะดึงทั้งรีโพสิทอรี ที่นี่เราดาวน์โหลดไฟล์โมเดล GGUF แบบ UD-Q4_K_XL และไฟล์ mmproj-BF16 ที่แพ็กเกจโมเดลใช้ 

หลังดาวน์โหลดเสร็จ ยืนยันว่ามีทั้งสองโฟลเดอร์ของโมเดล

ls models

ผลลัพธ์ที่คาดหวัง:

gemma-4-12B-it-GGUF
gemma-4-12B-it-qat-GGUF

ถึงตอนนี้ โมเดลทั้งแบบ non-QAT และ QAT พร้อมใช้งานแบบโลคัลแล้ว และเราสามารถเริ่มให้บริการด้วย llama-server ได้

ขั้นตอนที่ 3: รันโมเดล Non-QAT ด้วย llama-server

เริ่มจากรันโมเดล Gemma 4 12B แบบ instruction ปกติก่อน เพื่อเป็นค่าพื้นฐานไว้เปรียบเทียบกับเวอร์ชัน QAT โดยใช้การตั้งค่าเดียวกันภายหลัง

สตาร์ทโมเดล non-QAT ด้วย llama-server

./llama.cpp/llama-server \
  -m models/gemma-4-12B-it-GGUF/*UD-Q4_K_XL*.gguf \
  --host 0.0.0.0 \
  --port 8001 \
  --ctx-size 8192 \
  --n-gpu-layers 99 \
  --temp 1.0 \
  --top-p 0.95 \
  --top-k 64

Serving the gemma-4-12B-it-GGUF model

คำสั่งนี้จะเริ่มเซิร์ฟเวอร์แบบโลคัลที่เข้ากันได้กับ OpenAI ที่ http://localhost:8001

เปิดเทอร์มินัลอีกหน้าต่างและส่งคำขอไปยังเซิร์ฟเวอร์โลคัล

time curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "gemma-4-12B-it",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful local AI assistant."
    },
    {
      "role": "user",
      "content": "Explain why quantization-aware training is useful for running LLMs on consumer GPUs."
    }
  ],
  "temperature": 1.0,
  "top_p": 0.95,
  "max_tokens": 512
}'

ในคำสั่งนี้ เราใช้ปลายทางโลคัล /v1/chat/completions ซึ่งเป็นรูปแบบ API ที่เข้ากันได้กับ OpenAI พรอมต์ขอให้โมเดลอธิบาย quantization-aware training และตั้งค่า max_tokens เป็น 512 เพื่อให้ทดสอบทั้งสองเวอร์ชันของโมเดลด้วยความยาวผลลัพธ์เท่ากัน 

ในการทดสอบด้วย RTX 4090 ของเรา โมเดล non-QAT ให้ผลเวลาต่อไปนี้:

  • โทเคนของพรอมต์: 40
  • โทเคนของคำตอบ: 512
  • ความเร็วในการป้อนพรอมต์: 510.22 โทเคน/วินาที
  • ความเร็วในการสร้างคำตอบ: 94.65 โทเคน/วินาที
  • เวลารวม: 5.516 วินาที

การใช้หน่วยความจำของ GPU:

9247 MiB / 24564 MiB

ค่านี้เป็นค่าพื้นฐานสำหรับประสิทธิภาพของโมเดล Gemma 4 12B ปกติ ขั้นตอนถัดไป เราจะรันเวอร์ชัน QAT ด้วยคอนฟิกเดียวกันและเปรียบเทียบผลลัพธ์

ขั้นตอนที่ 4: รันและทดสอบโมเดล QAT

ตอนนี้เราจะรัน Gemma 4 12B เวอร์ชัน QAT ด้วยการตั้งค่า llama-server เดียวกัน อย่าลืมหยุดเซิร์ฟเวอร์ non-QAT ก่อน เพราะทั้งสองคำสั่งใช้พอร์ตเดียวกัน

สตาร์ทโมเดล QAT

./llama.cpp/llama-server \
  -m models/gemma-4-12B-it-qat-GGUF/*UD-Q4_K_XL*.gguf \
  --host 0.0.0.0 \
  --port 8001 \
  --ctx-size 8192 \
  --n-gpu-layers 99 \
  --temp 1.0 \
  --top-p 0.95 \
  --top-k 64

คำสั่งนี้จะเริ่มโมเดล QAT บนปลายทางที่เข้ากันได้กับ OpenAI แบบโลคัลเดียวกันที่ http://localhost:8001

Serving the gemma-4-12B-it-qat-GGUF

ตอนนี้ส่งพรอมต์ทดสอบเดียวกันไปยังโมเดล QAT

time curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
  "model": "gemma-4-12B-it-qat",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful local AI assistant."
    },
    {
      "role": "user",
      "content": "Explain why quantization-aware training is useful for running LLMs on consumer GPUs."
    }
  ],
  "temperature": 1.0,
  "top_p": 0.95,
  "max_tokens": 512
}'

ในการทดสอบด้วย RTX 4090 ของเรา โมเดล QAT ให้ผลเวลาต่อไปนี้:

  1. โทเคนของพรอมต์: 40
  2. โทเคนของคำตอบ: 512
  3. ความเร็วในการป้อนพรอมต์: 593.93 โทเคน/วินาที
  4. ความเร็วในการสร้างคำตอบ: 101.65 โทเคน/วินาที
  5. เวลารวม: 5.114 วินาที

การใช้หน่วยความจำของ GPU:

8627 MiB / 24564 MiB

ยังสามารถคัดลอก URL เซิร์ฟเวอร์โลคัล (http://localhost:8001) ไปวางในเบราว์เซอร์ได้ด้วย

Testing the gemma-4-12B-it-qat using the llama.cpp WebUI

จะเปิดเว็บ UI ของ llama.cpp ที่ฝังมาให้ ให้ส่วนต่อประสานคล้าย ChatGPT สำหรับทดสอบโมเดลโลคัล สามารถใช้แชทกับโมเดล QAT ได้โดยตรงในเบราว์เซอร์ ทดลองพรอมต์ต่าง ๆ และใช้โมเดลเป็นผู้ช่วย AI แบบโลคัลในชีวิตประจำวันได้ 

เปรียบเทียบผล QAT กับ Non-QAT

หลังทดสอบทั้งสองโมเดลด้วยพรอมต์และการตั้งค่าเซิร์ฟเวอร์เดียวกัน เราสามารถเปรียบเทียบประสิทธิภาพบน RTX 4090 ได้โดยตรง

ตัวชี้วัด

Gemma 4 12B Non-QAT

Gemma 4 12B QAT

การควอนไทซ์

UD-Q4_K_XL

UD-Q4_K_XL

ขนาดบริบท

8192

8192

โทเคนของพรอมต์

40

40

โทเคนของคำตอบ

512

512

ความเร็วในการป้อนพรอมต์

510.22 โทเคน/วินาที

593.93 โทเคน/วินาที

ความเร็วในการสร้างคำตอบ

94.65 โทเคน/วินาที

101.65 โทเคน/วินาที

เวลารวม

5.516 วินาที

5.114 วินาที

การใช้ VRAM

9247 MiB

8627 MiB

ในการรันครั้งนี้ โมเดล QAT ทั้งเร็วกว่าและเบากว่าโมเดล non-QAT ปกติ โดยใช้ VRAM น้อยลง 620 MiB ลดการใช้หน่วยความจำลงประมาณ 6.7% ซึ่งเป็นประโยชน์ต่อการอนุมานแบบโลคัล เพราะการประหยัด VRAM ทุกส่วนช่วยได้มากเมื่อรันโมเดลขนาดใหญ่บน GPU สำหรับผู้ใช้ทั่วไป

โมเดล QAT ยังสร้างโทเคนได้เร็วขึ้น จาก 94.65 โทเคน/วินาที เป็น 101.65 โทเคน/วินาที เพิ่มขึ้นราว 7.4% ทำให้เวลาจริงลดจาก 5.516 วินาที เหลือ 5.114 วินาที

สำหรับการใช้งานทุกวัน โมเดล QAT ให้ความลื่นไหลและตอบสนองได้ดีกว่า คุณภาพคำตอบก็ดูเสถียรกว่าในการทดสอบนี้ ซึ่งเป็นเหตุผลหลักที่ QAT มีประโยชน์: มันช่วยให้โมเดลรับมือกับการควอนไทซ์ระดับบิตต่ำได้ โดยสูญเสียคุณภาพน้อยลง ขณะยังคงได้ประโยชน์ด้านหน่วยความจำและความเร็วของโมเดลที่ถูกบีบอัด

บทส่งท้าย

Google กำลังทำงานอันยอดเยี่ยมเพื่อชุมชน AI แบบโลคัล ด้วยโมเดลอย่าง Gemma 4 และเทคนิคอย่าง QAT ความฝันในการรันโมเดล AI ทรงพลังแบบโลคัล ออฟไลน์ทั้งหมด และแม้แต่บนฮาร์ดแวร์สำหรับผู้ใช้ทั่วไป กำลังกลายเป็นจริง 

ที่น่าตื่นเต้นที่สุดคือมันไม่ได้เป็นเพียงการลดขนาดโมเดล ด้วย QAT เราไม่ได้ยอมทิ้งคุณภาพแค่เพื่อให้โมเดลพอดี แต่เราได้โมเดลที่ออกแบบมาให้รันได้ดีกว่าในฟอร์แมตบิตต่ำ ช่วยยกระดับประสบการณ์ AI แบบโลคัล โดยในการทดสอบนี้ โมเดล QAT เร็วกว่า เบากว่า และใช้งานลื่นไหลกว่าเวอร์ชัน non-QAT

ตอนนี้ฉันตั้งตารอที่จะทดสอบเวอร์ชัน MTP ของโมเดล ซึ่งอาจเพิ่มความเร็วได้อีก อาจถึง 2 เท่า นั่นจะทำให้ง่ายขึ้นมากในการย้ายเวิร์กโฟลว์ส่วนใหญ่ไปยัง AI แบบโลคัล ฉันสามารถรันโมเดลแบบโลคัล เชื่อมต่อกับเครื่องมืออย่าง OpenCode และเริ่มแก้ไขไฟล์โปรเจกต์โดยตรงด้วยผู้ช่วยส่วนตัวแบบโลคัลส่วนตัว

คลื่นลูกใหม่ของ AI แบบโลคัลกำลังเปลี่ยนวิธีคิดเกี่ยวกับการใช้งานระบบ AI งานที่ครั้งหนึ่งเคยต้องพึ่งพาการตั้งค่าบนคลาวด์ขนาดใหญ่ โดยเฉพาะเวิร์กโฟลว์แบบมัลติโหมดที่รับทั้งข้อความ รูปภาพ และวิดีโอ กำลังค่อย ๆ เป็นไปได้บนเครื่องโลคัล สำหรับนักพัฒนา นักวิจัย และผู้สร้างที่ให้ความสำคัญกับความเป็นส่วนตัว ความเร็ว และการควบคุม นี่คือทิศทางที่น่าตื่นเต้นมาก

หัวข้อ

คอร์ส AI แนะนำ

Tracks

การพัฒนาแอปพลิเคชัน AI

21 ชม.
เรียนรู้การสร้างแอปพลิเคชันที่ขับเคลื่อนด้วย AI ด้วยเครื่องมือสำหรับนักพัฒนา AI ล่าสุด รวมถึง OpenAI API, Hugging Face และ LangChain
ดูรายละเอียดRight Arrow
เริ่มหลักสูตร

Tracks

วิศวกร AI ระดับ Associate สำหรับนักพัฒนา

26 ชม.
เรียนรู้วิธีผสาน AI เข้ากับแอปพลิเคชันซอฟต์แวร์โดยใช้ API และไลบรารีโอเพนซอร์ส เริ่มต้นเส้นทางสู่การเป็น AI Engineer ของคุณวันนี้!
ดูเพิ่มเติมRight Arrow