Bỏ qua

Serving Local LLMs

Tổng quan

Chạy LLM trên máy local hoặc server riêng mang lại kiểm soát hoàn toàn về privacy, chi phí và latency. Bài này bao gồm landscape open-source hiện nay, kỹ thuật quantization để giảm kích thước model, và cách serve model với Ollama.


1. Open-source LLM Landscape

Các dòng model chính

Dòng model Tổ chức Điểm mạnh
Llama 3.x Meta Hiệu năng tốt, cộng đồng lớn, permissive license
Qwen 2.5 / 3 Alibaba Đa ngôn ngữ, code, math xuất sắc
Gemma 3 Google Nhẹ, chạy tốt trên GPU yếu
Mistral / Mixtral Mistral AI MoE architecture, hiệu quả compute
Phi-4 Microsoft Small model, reasoning mạnh
DeepSeek-R1 DeepSeek Reasoning, math, code cực mạnh

Vietnamese LLMs

Model Base Ghi chú
Vistral-7B-Chat Mistral 7B Fine-tuned tiếng Việt bởi Viet-Mistral team
PhoGPT GPT-J Model tiếng Việt từ VinAI Research
SeaLLM Llama 2 Đa ngôn ngữ Đông Nam Á, bao gồm tiếng Việt
Qwen2.5 (multilingual) Qwen 2.5 Hỗ trợ tiếng Việt tốt trong các model đa ngôn ngữ

Lựa chọn model cho tiếng Việt

Năm 2026, các model đa ngôn ngữ lớn như Qwen 2.5 và Llama 3.x thường cho chất lượng tiếng Việt tốt hơn các model tiếng Việt chuyên biệt có kích thước nhỏ hơn, nhờ training data phong phú hơn.


2. Quantization

Vấn đề

Model full precision (FP32) cực kỳ nặng:

  • Llama 3 8B FP32 ≈ 32 GB VRAM
  • Llama 3 8B FP16 ≈ 16 GB VRAM
  • Llama 3 8B INT4 ≈ 4–5 GB VRAM ✅ (chạy được trên RTX 3060 12GB)

Quantization giảm số bit để biểu diễn mỗi weight → giảm VRAM, tăng tốc inference.

Các loại Precision

FP32 (32-bit float)  →  FP16 (16-bit float)  →  INT8 (8-bit int)  →  INT4 (4-bit int)
    ~32 GB                  ~16 GB                  ~8 GB               ~4-5 GB
  Full precision          Training / serving       Good balance       RAM-constrained
Precision VRAM (8B model) Chất lượng Dùng khi
FP32 ~32 GB Baseline Training research
BF16/FP16 ~16 GB ≈ FP32 Training, serving GPU mạnh
INT8 ~8 GB -1 đến -2% Production server
INT4 ~4 GB -3 đến -5% Consumer GPU, local

Các Format Quantization

Ưu điểm:
- Chạy trên CPU (không cần GPU)
- Ollama sử dụng format này
- Hỗ trợ mixed precision (Q4_K_M, Q5_K_M, Q8_0)

Naming convention:
Q4_K_M → 4-bit, K-quant method, Medium size
Q5_K_S → 5-bit, K-quant method, Small size
Q8_0   → 8-bit, original method
Ưu điểm:
- Quantization sau khi train (Post-Training Quantization)
- Chạy tốt trên GPU NVIDIA
- Thường có sẵn trên HuggingFace

Thư viện: auto-gptq, optimum
Dùng khi: Có GPU, cần INT4 nhưng chất lượng tốt hơn GGUF
Ưu điểm:
- Bảo toàn weights quan trọng (activation-aware)
- Chất lượng tốt hơn GPTQ ở cùng bit-width
- Thư viện: autoawq

Đặc điểm:
- Phân tích activation để tìm weights quan trọng
- Không quantize những weights đó
- Kết quả: ít degradation hơn
# Quantize on-the-fly khi load model
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",      # NormalFloat4 - tốt hơn int4
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True, # Quantize quantization constants
)

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.2-3B-Instruct",
    quantization_config=bnb_config,
    device_map="auto",
)
Ưu điểm: Tích hợp tốt với HuggingFace, dùng được với PEFT/LoRA
Nhược điểm: Chỉ chạy trên GPU NVIDIA có CUDA

Knowledge Distillation

Distillation (train model nhỏ từ một teacher lớn) là kỹ thuật thu nhỏ model ở giai đoạn training, nên được trình bày cùng quy trình huấn luyện ở Kiến trúc LLM. Quantization bên trên là kỹ thuật áp dụng lúc deploy.


3. Model Serving với Ollama

Ollama là gì?

Ollama là tool đơn giản nhất để chạy LLM local - tương tự Docker nhưng cho AI models.

# Cài đặt (Linux/Mac)
curl -fsSL https://ollama.ai/install.sh | sh

# Pull và chạy model
ollama pull llama3.2:3b
ollama run llama3.2:3b "Xin chào! Bạn là ai?"

# Serve API (mặc định port 11434)
ollama serve

Ollama REST API

import requests

response = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "llama3.2:3b",
        "messages": [
            {"role": "user", "content": "Giải thích transformer trong 3 câu."}
        ],
        "stream": False,
    }
)

print(response.json()["message"]["content"])

Dùng với OpenAI-compatible SDK

from openai import OpenAI

# Ollama expose OpenAI-compatible endpoint
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # Không cần key thật
)

response = client.chat.completions.create(
    model="llama3.2:3b",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)

4. Custom Modelfile

Modelfile cho phép tạo model với system prompt, parameters và template tùy chỉnh - giống Dockerfile cho AI.

Cú pháp Modelfile

# Modelfile cho Vietnamese Assistant
FROM llama3.2:3b

# System prompt mặc định
SYSTEM """
Bạn  Minh, trợ  AI thông minh người Việt Nam. Bạn luôn:
- Trả lời bằng tiếng Việt, tự nhiên  thân thiện
- Dùng xưng  phù hợp (tôi/bạn cho người lớn)
- Giải thích  ràng,   dụ cụ thể
- Thừa nhận khi không biết thay  đoán """

# Điều chỉnh parameters
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096         # Context window size

# Template (dùng cho model không có chat template)
TEMPLATE """{{ if .System }}<|system|>
{{ .System }}<|end|>
{{ end }}{{ if .Prompt }}<|user|>
{{ .Prompt }}<|end|>
<|assistant|>
{{ end }}{{ .Response }}<|end|>"""
# Tạo và test model
ollama create vietnamese-assistant -f Modelfile
ollama run vietnamese-assistant "Hãy giới thiệu bản thân"
FROM llama3.2:3b

SYSTEM """
Bạn  chuyên gia pháp  Việt Nam với kiến thức về luật doanh nghiệp, 
luật lao động  luật dân sự. Khi trả lời:
1. Trích dẫn điều luật cụ thể khi  thể (Điều X, Luật Y năm Z)
2. Phân biệt  thông tin chắc chắn vs cần xác minh thêm
3. Khuyến nghị  vấn luật  cho các vụ việc phức tạp
4. Dùng ngôn ngữ dễ hiểu, tránh thuật ngữ pháp  quá chuyên sâu

Lưu ý: Đây  thông tin tham khảo, không phải  vấn pháp  chính thức.
"""

PARAMETER temperature 0.3     # Thấp hơn cho factual answers
PARAMETER num_ctx 8192         # Context lớn hơn cho tài liệu pháp 

Tóm tắt: Chọn Setup Local LLM

graph TD
    A{"Bạn có GPU không?"} -->|"Có, NVIDIA >= 8GB VRAM"| B["Chạy GPTQ/AWQ trực tiếp hoặc BitsAndBytes 4-bit"]
    A -->|"Có, GPU yếu / Apple Silicon"| C["Ollama + GGUF Q4_K_M"]
    A -->|"Không / CPU only"| D["Ollama + GGUF Q4_K_M (model <= 7B)"]

    B --> E{"Cần tích hợp với code?"}
    C --> E
    D --> E
    E -->|"Đơn giản, local"| F["Ollama API"]
    E -->|"Phức tạp, nhiều người dùng"| G["vLLM / TGI"]
Kịch bản Recommended setup
Laptop cá nhân, thử nghiệm Ollama + Llama 3.2 3B Q4
Desktop gaming GPU Ollama + Llama 3.2 8B Q5_K_M
Server RTX 4090 24GB Ollama + Qwen2.5 14B Q8 hoặc 32B Q4
Production multi-user vLLM + FP16/AWQ