Fine-tuning & Model Customization
Trang chủ / Module 10
📦 Module 10 / 14 · 1 tuần

Quantization & Nén Model cho triển khai

Lượng tử hoá sau huấn luyện (PTQ) cho triển khai: GPTQ, AWQ, GGUF, và distillation để tạo model nhỏ hơn từ model đã fine-tune.

GPTQAWQGGUFDistillation
📌 Vì sao module này quan trọng

Model đã fine-tune xong cần được nén lại để triển khai hiệu quả — khác với QLoRA (lượng tử hoá để TIẾT KIỆM BỘ NHỚ LÚC TRAIN), module này nói về lượng tử hoá SAU KHI TRAIN XONG để tối ưu chi phí/tốc độ lúc SERVING, nối tiếp trực tiếp bảng công cụ chạy LLM cục bộ đã giới thiệu ở Module 17 khoá AI Engineer.

🎯 Mục tiêu học tập

  • Phân biệt rõ lượng tử hoá lúc train (QLoRA) và lượng tử hoá sau train để triển khai (PTQ)
  • So sánh 3 định dạng lượng tử hoá phổ biến: GPTQ, AWQ, GGUF — khi nào dùng loại nào
  • Hiểu khái niệm Knowledge Distillation để tạo model nhỏ hơn học theo model lớn
  • Đánh giá đánh đổi chất lượng/tốc độ/kích thước khi chọn mức lượng tử hoá

Post-Training Quantization (PTQ) — khác gì QLoRA

QLoRA (Module 4) lượng tử hoá model trong lúc huấn luyện để tiết kiệm VRAM khi train. PTQ lượng tử hoá model sau khi đã huấn luyện xong (và thường đã merge LoRA vào weight gốc — Module 4) với mục tiêu khác hẳn: giảm kích thước file và tăng tốc độ inference lúc serving thực tế, để chạy được trên phần cứng yếu hơn hoặc phục vụ nhiều request hơn với cùng GPU.

GPTQ, AWQ, GGUF — so sánh 3 định dạng phổ biến

Định dạngCách hoạt độngPhù hợp nhất cho
GPTQLượng tử hoá theo từng layer dựa trên một tập dữ liệu hiệu chỉnh (calibration dataset) nhỏ, tối ưu độ chính xác cho từng weight riêng lẻServing trên GPU, cần cân bằng tốt giữa chất lượng và tốc độ
AWQ (Activation-aware Weight Quantization)Nhận diện và bảo toàn độ chính xác cao hơn cho một số ít weight "quan trọng" (ảnh hưởng nhiều đến activation), lượng tử hoá mạnh phần còn lạiServing trên GPU, thường giữ chất lượng tốt hơn GPTQ ở cùng mức bit, tốc độ inference nhanh
GGUFĐịnh dạng của llama.cpp, tối ưu cho chạy trên CPU và phần cứng tiêu dùng, hỗ trợ nhiều mức lượng tử hoá (từ 2-bit đến 8-bit)Chạy local qua Ollama/LM Studio/llama.cpp (đã giới thiệu ở Module 17 khoá AI Engineer) — không cần GPU mạnh
# Ví dụ chuyển model đã fine-tune (đã merge LoRA) sang GGUF để chạy qua Ollama
python llama.cpp/convert_hf_to_gguf.py ./my-finetuned-model --outfile model-f16.gguf
./llama.cpp/llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M

Knowledge Distillation — tạo model nhỏ học theo model lớn

Khác với quantization (giữ nguyên kiến trúc, giảm độ chính xác số học), distillation huấn luyện một model nhỏ hơn hẳn về kiến trúc (student) để bắt chước hành vi của một model lớn hơn (teacher) — thường bằng cách cho student học dự đoán không chỉ đáp án đúng mà cả phân phối xác suất đầu ra của teacher (soft label chứa nhiều thông tin hơn hard label). Đây chính là kỹ thuật đứng sau nhiều model nhỏ chất lượng cao hiện nay — một model 7B được "chưng cất" tốt từ model flagship có thể vượt xa một model 7B chỉ huấn luyện thông thường trên cùng lượng dữ liệu.

Cách tiếp cận thực dụng nhất cho ứng dụng: kết hợp distillation với synthetic data (Module 5) — dùng model lớn sinh dữ liệu huấn luyện chất lượng cao, rồi SFT (Module 6) một model nhỏ trên dữ liệu đó — đây đã là một dạng "distillation ngầm" phổ biến trong thực tế, đơn giản hơn distillation "chính thống" (cần truy cập logits của teacher) nhưng vẫn hiệu quả cao.

Đánh đổi khi chọn mức lượng tử hoá

Nguyên tắc chung: mức bit càng thấp, kích thước/tốc độ càng tốt nhưng chất lượng càng giảm — tuy nhiên mức giảm chất lượng không tuyến tính. Kinh nghiệm thực tế phổ biến: 8-bit gần như không mất chất lượng đáng kể so với FP16; 4-bit (GPTQ/AWQ/GGUF Q4) mất chất lượng rất ít với hầu hết tác vụ thông thường; dưới 4-bit (Q2, Q3) bắt đầu mất chất lượng rõ rệt, chỉ nên dùng khi ràng buộc phần cứng thực sự khắt khe. Luôn đo bằng eval thật (Module 12) trên tác vụ cụ thể của bạn trước khi chốt mức lượng tử hoá cho production — đừng chỉ tin vào số liệu benchmark chung chung.

🏋️ Bài tập thực hành

Lượng tử hoá & đo đánh đổi

Lấy model đã fine-tune ở Module 6-7 (đã merge LoRA — Module 4), chuyển sang GGUF ở 2 mức lượng tử hoá khác nhau (ví dụ Q8_0 và Q4_K_M). Chạy cả 2 phiên bản qua Ollama, đo tốc độ sinh token (token/giây) và so sánh chất lượng output trên bộ câu hỏi test đã dùng ở Module 6. Ghi lại bảng đánh đổi kích thước file/tốc độ/chất lượng.

📚 Tài nguyên học tập

✅ Tự đánh giá hoàn thành

  • Phân biệt rõ lượng tử hoá lúc train (QLoRA) và lượng tử hoá sau train (PTQ)
  • Chọn đúng định dạng (GPTQ/AWQ/GGUF) theo môi trường triển khai dự định
  • Giải thích được ý tưởng cốt lõi của Knowledge Distillation
  • Đã tự đo được đánh đổi chất lượng/tốc độ thật ở ít nhất 2 mức lượng tử hoá