Chạy LLM Local với Ollama: So sánh approach và hướng dẫn triển khai thực tế

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

2 giờ sáng. Terminal báo 429 Too Many Requests. API key OpenAI vừa hit rate limit, demo sáng mai 8 giờ. Mình ngồi nhìn màn hình và lần đầu nghiêm túc tìm hiểu về chạy LLM ngay trên máy mình.

Sau vài tháng dùng thực tế trên cả laptop lẫn VPS, đây là những gì mình đúc kết — đặc biệt là tại sao approach nào phù hợp với hoàn cảnh nào, và cách setup Ollama từ đầu đến khi có API hoạt động.

So sánh 3 cách chạy LLM local phổ biến nhất

Trước khi quyết định dùng Ollama, mình đã thử qua 3 hướng. Mỗi cái có trade-off riêng — không có cái nào là tốt nhất tuyệt đối.

llama.cpp — Engine thuần C++, hiệu năng tối ưu

llama.cpp chạy model GGUF format trực tiếp, không có layer abstraction nào. Cực nhẹ, dễ compile với CUDA hoặc Metal để tận dụng GPU tối đa. Đổi lại: bạn phải tự làm mọi thứ — compile binary, download model từ HuggingFace, tự viết wrapper nếu muốn REST API.

# Chạy llama.cpp server — khá verbose, dễ nhầm flag
./llama-server -m models/mistral-7b-q4_K_M.gguf \
  --ctx-size 4096 \
  --n-gpu-layers 35 \
  --host 0.0.0.0 \
  --port 8080

Thích hợp cho ML research hoặc khi bạn cần squeeze từng token/second. Không phải lựa chọn khi cần deploy nhanh.

LM Studio — GUI đẹp, nhưng bị kẹt trên desktop

LM Studio có giao diện đẹp, tích hợp sẵn HuggingFace browser, thậm chí có local API server tương thích OpenAI. Mình dùng nó để khám phá model mới — click vài cái là chạy, rất tiện. Nhưng nó là desktop app. Không SSH vào được, không chạy trên VPS headless, không containerize. Cần tích hợp vào CI pipeline hay shared server cho cả team? LM Studio là ngõ cụt.

Ollama — CLI + API, chạy được mọi nơi

Ollama wrap llama.cpp bên dưới nhưng expose interface giống Docker: pull model, run model, built-in REST API. Chạy được trên macOS, Linux (kể cả headless server), Windows. Điểm mấu chốt là cùng một workflow từ laptop dev đến production server — không có gì cần thay đổi khi chuyển môi trường.

Phân tích ưu nhược: Chọn cái nào?

  • llama.cpp: Chọn khi cần hiệu năng tối đa, đang làm ML research, hoặc build custom inference pipeline. Không phù hợp cho người mới hoặc khi cần ship nhanh.
  • LM Studio: Chọn khi chỉ cần thử model trên máy cá nhân, không cần tích hợp vào code. Dừng lại ở đây — đừng build app production trên nó.
  • Ollama: Chọn cho phần còn lại — local dev, prototype, shared team server, offline environment. Cân bằng tốt giữa dễ dùng và linh hoạt.

Mình đã dùng cả 3 trong các dự án thực tế. Kết luận thực dụng: 90% developer bình thường dùng Ollama là đủ. llama.cpp chỉ đáng công khi bạn thực sự cần squeeze từng ms inference time. LM Studio thì dừng ở mức thử nghiệm cá nhân.

Cài đặt Ollama

Linux (VPS hoặc server)

curl -fsSL https://ollama.com/install.sh | sh

Script tự detect GPU, cài CUDA driver nếu cần, setup systemd service tự động — toàn bộ mất khoảng 2–3 phút. Kiểm tra sau khi cài xong:

# Kiểm tra service đang chạy
systemctl status ollama

# Ollama lắng nghe ở port 11434
curl http://localhost:11434
# Output: Ollama is running

macOS

# Dùng Homebrew
brew install ollama

# Chạy server (nếu không dùng app tray)
ollama serve

Chạy model đầu tiên

Cú pháp quen thuộc nếu bạn đã dùng Docker:

# Llama 3.2 3B — nhẹ, phù hợp máy không có GPU mạnh (~2GB)
ollama run llama3.2

# Mistral 7B — cân bằng tốt giữa chất lượng và tốc độ (~4GB)
ollama run mistral

# Qwen 2.5 7B — hỗ trợ tiếng Việt và tiếng Nhật tốt hơn
ollama run qwen2.5:7b

# Xem model đã download
ollama list

# Xóa model không dùng (giải phóng disk space)
ollama rm mistral

Lần đầu chạy Ollama download model về local. Mistral 7B khoảng 4GB, Llama 3.2 3B khoảng 2GB. Lần sau load từ cache — không mất thêm thời gian tải.

Không có GPU? Không sao. Model 3B–7B vẫn chạy trên CPU, tốc độ khoảng 5–15 tokens/giây tùy chip. Đủ thoải mái cho dev và testing — chỉ không đủ nếu bạn đang chạy production với nhiều user đồng thời.

Chọn model theo RAM

  • 4GB RAM: llama3.2:3b, phi3:mini
  • 8GB RAM: mistral:7b, llama3.1:8b, qwen2.5:7b
  • 16GB RAM: llama3.1:13b, codestral:22b
  • 32GB+ RAM: llama3.3:70b (chậm nhưng chạy được)

Tích hợp Ollama vào code qua REST API

Phần này mình dùng nhiều nhất. Ollama expose API tương thích OpenAI — code cũ gần như không cần sửa, chỉ đổi base_url:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # Bất kỳ string nào, Ollama không validate
)

response = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {"role": "user", "content": "Giải thích Docker networking trong 3 câu"}
    ]
)
print(response.choices[0].message.content)

Không muốn cài thêm package? Gọi thẳng native API bằng curl:

curl http://localhost:11434/api/chat -d '{
  "model": "mistral",
  "messages": [
    {"role": "user", "content": "Viết script bash kiểm tra disk usage"}
  ],
  "stream": false
}'

Tips thực tế khi dùng Ollama

Expose cho cả network nội bộ

Mặc định Ollama chỉ bind 127.0.0.1 — chỉ truy cập được từ máy đó. Muốn cả team dùng chung 1 server, thêm environment variable qua systemd override:

# Tạo override cho systemd service
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
EOF

sudo systemctl daemon-reload && sudo systemctl restart ollama

Tạo model tùy chỉnh với Modelfile

Cần chatbot hỗ trợ kỹ thuật nội bộ với system prompt cố định? Dùng Modelfile — thay vì paste cùng đoạn prompt vào mỗi request, bake thẳng vào model:

# Tạo Modelfile
cat > Modelfile << 'EOF'
FROM mistral

SYSTEM """
Bạn là chuyên gia Linux với 10 năm kinh nghiệm.
Chỉ trả lời về Linux, shell scripting, và system administration.
Dùng tiếng Việt, trả lời ngắn gọn và có ví dụ thực tế.
"""
EOF

# Build model tùy chỉnh
ollama create linux-expert -f Modelfile

# Test
ollama run linux-expert "Process nào đang dùng port 8080?"

Một Modelfile có thể tiết kiệm hàng chục dòng code boilerplate — đặc biệt khi nhiều người trong team cần dùng cùng một prompt base.

Khi nào dùng Ollama, khi nào vẫn cần cloud API

Ollama phù hợp khi:

  • Local development — không tốn API cost, không lo rate limit lúc 2 giờ sáng
  • Xử lý data nhạy cảm — data không rời khỏi máy
  • Team nhỏ cần shared AI server — 1 VPS chạy Ollama, cả team dùng chung
  • Môi trường offline, air-gapped network

Vẫn nên dùng cloud API khi cần model mạnh nhất (GPT-4o level), multimodal phức tạp, hoặc production traffic cao mà phần cứng không đáp ứng được.

Quay lại cái đêm đó — setup xong Ollama với Mistral 7B lúc 3 giờ sáng, demo 8 giờ sáng chạy ngon không một lỗi. Từ đó mình giữ Ollama làm fallback thường trực trên máy dev, và không còn lo rate limit cloud API làm hỏng việc nữa.

Share: