Chạy Ollama trên VPS Ubuntu không GPU

VPS Ubuntu không GPU vẫn chạy được Ollama nếu bạn chọn đúng model và đủ RAM. Thực tế mình vẫn dựng một instance llama 3.2 3B Q4 trên VPS 4GB để làm backend phân loại nội dung. Nhanh không bằng GPU, nhưng ổn định, đủ cho hàng loạt tác vụ văn bản mà lại không phải trả tiền cho card đồ hoạ. Bài này đi từ cài đặt, chọn model, đến tối ưu RAM và bảo mật API để bạn có một endpoint LLM cục bộ chạy thật.
- VPS 4GB RAM chạy tốt llama 3.2 3B Q4_K_M, khoảng 10 đến 20 tokens/giây trên CPU 2 vCPU.
- Model 7B Q4 cần tối thiểu 6 đến 8GB RAM khả dụng, nếu thiếu sẽ swap nặng và chậm gấp nhiều lần.
- Đặt
OLLAMA_MAX_LOADED_MODELS=1vàOLLAMA_NUM_PARALLEL=1để tránh nạp nhiều model cùng lúc gây OOM.
Yêu cầu trước khi bắt đầu
Bạn cần một VPS Ubuntu 24.04 LTS có full quyền root hoặc user sudo, RAM tối thiểu 4GB để chạy model 3B cho mượt. Máy 2GB vẫn cài được nhưng chỉ nên chạy model 1B đến 3B, và phải bật swap. Nếu định cho service ra internet, bạn cần một domain trỏ về VPS và mở đúng port qua firewall.
- VPS Ubuntu 24.04 LTS (hoặc 22.04 LTS), kiến trúc x86_64.
- RAM: 4GB cho model 3B, 8GB cho model 7B; NVMe SSD để load model nhanh.
- User có quyền sudo, hoặc đăng nhập root.
- Domain (nếu muốn expose API ra ngoài) và kiến thức cơ bản về systemd, ufw.
Vì sao chạy Ollama trên VPS không GPU lại hợp lý
GPU đắt và khan hiếm. Với các tác vụ như phân loại văn bản, tóm tắt email, sinh nội dung ngắn hay làm backend cho agent, một model 3B quantize Q4 trên CPU là quá đủ. Ollama dùng llama.cpp bên dưới, hỗ trợ tăng tốc bằng AVX2/AVX-512 trên CPU hiện đại, và tự động chọn quantization khi bạn pull model.
Đánh đổi rõ ràng: tokens/giây thấp hơn GPU nhiều lần, và tốc độ tỉ lệ nghịch với kích thước model. Nhưng nếu workload của bạn chạy theo lô (batch) hoặc không cần real-time, CPU lại là lựa chọn kinh tế. Trên hạ tầng như VPS Linux NVMe có IPv4 Việt Nam, bạn có thể dựng endpoint LLM cục bộ để xử lý dữ liệu nội bộ mà không gửi ra API nước ngoài.
Bước 1 - Cài đặt Ollama trên VPS Ubuntu
Script cài chính thức của Ollama chạy tốt trên Ubuntu 24.04. Nó tạo service systemd tên ollama và lắng nghe ở 127.0.0.1:11434 theo mặc định.
curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama --no-pager
Output mong đợi: dòng Active: active (running). Nếu service không lên, xem log bằng journalctl -u ollama -e để biết lý do.
ollama --version
ollama list
Lệnh ollama --version in ra phiên bản, ollama list ban đầu trống vì chưa pull model nào.
Bước 2 - Chọn model phù hợp với RAM
Đây là bước quyết định thành bại. Chọn model quá lớn so với RAM thì máy sẽ swap liên tục, mỗi câu trả lời mất hàng phút thay vì vài giây. Quy tắc thực dụng: file model sau khi quantize không nên vượt quá 60 đến 70% RAM khả dụng.
| Model | RAM cần (Q4) | Phù hợp VPS |
|---|---|---|
| llama3.2:1b | ~1.5 GB | 2GB RAM |
| llama3.2:3b | ~2.5 GB | 4GB RAM |
| mistral:7b / qwen2.5:7b | ~5 GB | 8GB RAM |
| llama3.1:8b | ~6 GB | 8GB trở lên |
Pull model bằng lệnh sau, đổi tên model tuỳ nhu cầu:
ollama pull llama3.2:3b
ollama run llama3.2:3b "Tóm tắt câu sau: Ollama chạy được trên CPU."
Lần chạy đầu tiên sẽ load model vào RAM, mất vài giây đến vài chục giây tuỳ model. Những lần sau nhanh hơn do model còn nằm trong bộ nhớ. Gõ /bye để thoát.
Bước 3 - Đo tokens/giây trên CPU
Ollama in ra thông số eval rate sau mỗi lần sinh xong. Đây là con số thực tế để bạn biết VPS có kham nổi workload không. Trên CPU 2 vCPU với llama3.2:3b Q4, mình đo được khoảng 12 đến 18 tokens/giây tuỳ độ dài prompt.
ollama run llama3.2:3b --verbose
Ngay sau câu trả lời, chú ý các dòng:
total duration: 5.432s
eval count: 128 token(s)
eval rate: 23.56 tokens/s
eval rate càng cao càng tốt. Nếu thấy con số dưới 5 tokens/giây, khả năng cao bạn đang dùng model quá lớn hoặc máy phải swap. Kiểm tra bằng free -h và vmstat 1, nếu cột si/so khác 0 thì RAM đã là nút cổ chai.
Bước 4 - Bật swap và giới hạn RAM cho Ollama
Đừng chạy LLM trên VPS không GPU mà không có swap. Swap không giúp nhanh, nhưng giúp máy không bị OOM kill giữa chừng. Mình thường tạo swap bằng RAM (2 đến 4GB).
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h
Nếu bạn muốn hạn chế swap quá nhiều gây thrashing, chỉnh vm.swappiness xuống thấp:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Tiếp theo, giới hạn Ollama để tránh nó nạp nhiều model song song. Sửa override của service:
sudo systemctl edit ollama
Thêm nội dung:
[Service]
Environment="OLLAMA_MAX_LOADED_MODELS=1"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_KEEP_ALIVE=5m"
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama -p Environment
OLLAMA_KEEP_ALIVE=5m nghĩa là model bị đẩy khỏi RAM sau 5 phút không dùng, hợp với VPS ít RAM. Đặt -1 để giữ model trong RAM lâu, chỉ làm khi bạn thừa RAM.
Bước 5 - Gọi API Ollama từ ứng dụng
Ollama expose REST API tại port 11434. Bạn có thể gọi trực tiếp bằng curl hoặc dùng qua OpenAI-compatible endpoint /v1/chat/completions nếu ứng dụng chỉ hỗ trợ chuẩn OpenAI.
curl http://127.0.0.1:11434/api/generate -d '{
"model": "llama3.2:3b",
"prompt": "Giải thích ngắn gọn về HTTP/3",
"stream": false
}'
Output là JSON chứa trường response với câu trả lời và eval_count, eval_duration để tự tính tokens/giây. Nếu muốn dùng như OpenAI, đổi đường dẫn sang /v1/chat/completions và chỉ định model giống cũ.
Trong trường hợp bạn tự động hoá quy trình, ví dụ nối một workflow VPS n8n gọi endpoint này để phân loại ticket hoặc sinh nội dung nháp, dùng node HTTP Request trỏ về http://127.0.0.1:11434 sẽ tiết kiệm chi phí so với gọi API LLM trả tiền theo token.
Bước 6 - Bảo mật API Ollama trên VPS
Ollama mặc định chỉ lắng nghe trên localhost, đây là cấu hình an toàn nhất. Chỉ đổi sang 0.0.0.0 khi bạn thật sự cần thiết bị khác truy cập, và rất cao phải chặn port 11434 khỏi internet công khai.
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
Cách an toàn hơn là để Ollama ở localhost rồi dùng Nginx làm reverse proxy có xác thực. Điều này tương tự cách bạn cấu hình Nginx reverse proxy và SSL Let's Encrypt cho n8n: chỉ mở 80/443, phần còn lại chặn kín.
sudo ufw deny 11434
sudo ss -tlnp | grep 11434
Output ss phải cho thấy Ollama chỉ bind 127.0.0.1:11434, không phải 0.0.0.0:11434. Nếu thấy 0.0.0.0, sửa biến OLLAMA_HOST qua systemctl edit ollama về lại 127.0.0.1:11434 và restart service.
Xử lý lỗi thường gặp
Model load xong nhưng trả lời rất chậm
Kiểm tra free -h. Nếu dòng Swap dùng nhiều và vmstat 1 thấy si/so cao, RAM đã hết. Giải pháp: pull model nhỏ hơn (3B thay vì 7B) hoặc nâng gói VPS lên nhiều RAM hơn.
Service ollama chết ngay sau khi khởi động
Xem log bằng journalctl -u ollama -e. Lỗi phổ biến là do phiên bản glibc quá cũ, hoặc thiếu quyền với thư mục /usr/share/ollama. Cài trên Ubuntu 24.04 hầu như không gặp lỗi này.
Không gọi được API từ máy khác
Kiểm tra ba thứ theo thứ tự: OLLAMA_HOST có phải 0.0.0.0:11434 không, ufw đã mở port chưa, và có phải bạn đang gọi qua IP public. Nhưng cân nhắc kỹ trước khi expose, vì endpoint không có xác thực sẽ bị lợi dụng nếu lộ ra internet.
Câu hỏi thường gặp
VPS 2GB RAM có chạy được Ollama không?
Được, nhưng chỉ nên dùng model 1B đến 3B với quantize Q4, và phải bật swap. Model 7B sẽ khiến máy swap liên tục và gần như không dùng được.
Không GPU thì tốc độ có dùng được cho chatbot real-time không?
Model 3B Q4 trên CPU 2 vCPU cho khoảng 10 đến 20 tokens/giây. Đủ cho chatbot trả lời ngắn, nhưng không phù hợp cho sinh văn bản dài hoặc nhiều người dùng đồng thời.
Có nên mở port 11434 ra internet không?
Không. Ollama không có cơ chế xác thực mặc định. Nếu cần truy cập từ ngoài, đặt sau Nginx reverse proxy có Basic Auth hoặc xác thực token, và chỉ mở 443.
Làm sao biết VPS đang dùng bao nhiêu RAM cho Ollama?
Chạy systemctl status ollama để xem Memory, hoặc ps -o pid,rss,cmd -C ollama. Trường rss là bộ nhớ thực tế model đang chiếm, thường khớp với kích thước file model cộng overhead.
Chạy nhiều model cùng lúc trên một VPS được không?
Được về mặt cấu hình nhưng không nên nếu RAM hạn chế. Mỗi model chiếm một vùng RAM riêng, nạp hai model 3B cùng lúc sẽ cần gần 5GB. Dùng OLLAMA_MAX_LOADED_MODELS=1 để tự động đẩy cái cũ ra khi cần.
Bài viết liên quan
- Hướng dẫn cài đặt Ollama trên VPS Ubuntu chạy LLM cục bộ
- Self host API LLM với Ollama trên VPS
- Tự dựng AI chatbot riêng với Ollama và Open WebUI trên VPS
- Cấu hình swap hợp lý cho VPS RAM thấp năm 2026


