Whisper.cpp + llama.cpp trên VPS CPU: AI không cần GPU

Chia sẻ bài viết

Mục lục
TL;DR
  • Whisper.cpp và llama.cpp đều chạy CPU tinh khôi, không cần GPU. VPS 4-16GB RAM là đủ cho nhiều use case thực tế.
  • Whisper Small/Medium chạy ~realtime trên 4 vCPU. Llama 3.1 8B Q4 chạy 6-12 token/s trên 8 vCPU.
  • Use case nóng: transcribe podcast tiếng Việt, chatbot nội bộ FAQ, summarize daily standup, RAG nhỏ trong intranet.
  • Setup 30 phút: build C++ từ source, tải model GGUF, chạy server HTTP, gắn vào n8n/Postman.
  • Chi phí: chỉ tiền VPS (250-800k/tháng), không trả API token, không gửi data ra ngoài.

Cuối 2026, hệ sinh thái AI local "không cần GPU" đã trưởng thành. Whisper.cpp (Georgi Gerganov) cho phép speech-to-text chính xác trên CPU; llama.cpp cùng tác giả mở khoá LLM 7B-70B chạy trên CPU thường. Với dev VN ngân sách hẹp, chưa muốn đầu tư máy chủ GPU H100 cả tỷ đồng, đây là con đường thực dụng nhất để có AI cục bộ 24/7.

Bài này hướng dẫn full setup hai project trên VPS Ubuntu/AlmaLinux không GPU. Mình đã chạy production cho client trong 6 tháng: transcribe podcast tiếng Việt hằng tuần, chatbot FAQ nội bộ, summarize meeting Zoom. Tổng cost 350k/tháng cho VPS 8GB, ngon hơn dùng OpenAI Whisper API hay GPT-4 cho cùng tác vụ.

Mục tiêu cuối bài: bạn có một VPS chạy Whisper + llama server, tự gọi qua HTTP API, gắn vào n8n hoặc app web nội bộ. Tổng thời gian setup 30-45 phút, không cần CUDA, không driver GPU.

1. Vì sao chọn CPU thay vì GPU?

GPU H100/A100 chạy LLM nhanh hơn CPU 20-50 lần nhưng VPS GPU cloud rất đắt (200-2000$/tháng). Với khối lượng nhỏ vừa (vài trăm request/ngày), VPS CPU là sweet spot:

Tiêu chíVPS CPU 8GBVPS GPU L4 24GBOpenAI Whisper API
Chi phí tháng~350k VND200-400$ (~5-10 triệu)~0.006$/phút audio
Whisper Small realtime1.5x realtime50x realtimeAPI call
Llama 8B Q46-12 token/s120-200 token/sKhác model
Data offlineCó (local)Không (gửi cloud)
Phù hợp khối lượng< 5000 req/ngàyHeavy productionSpike traffic

Nếu workload <5000 request/ngày, VPS CPU 8GB tiết kiệm 80-90% chi phí. Mình dùng VPS Pro của TND, AMD EPYC 4 vCPU 8GB SSD CEPH, chạy ổn định 24/7 cả năm chưa lần nào down.

2. Yêu cầu VPS

  • CPU: tối thiểu 4 vCPU, khuyến nghị 8 vCPU. Hỗ trợ AVX2/AVX512 quan trọng (kiểm tra cat /proc/cpuinfo | grep -o 'avx2').
  • RAM: 8GB cho Llama 7B Q4, 16GB cho 13B Q4, 32GB cho 70B Q4_K_M.
  • SSD: tối thiểu 50GB free (model GGUF nặng: 4GB cho 7B, 18GB cho 70B).
  • OS: Ubuntu 24.04 LTS hoặc AlmaLinux 9. Cần GCC 12+, cmake 3.20+.
  • Network: 200Mbps là đủ vì sau khi tải model thì gần như không phát sinh traffic.

3. Cài dependency build

# Ubuntu 24.04
sudo apt update
sudo apt install -y build-essential cmake git ffmpeg curl
sudo apt install -y libopenblas-dev pkg-config

# AlmaLinux 9
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y cmake git ffmpeg openblas-devel

OpenBLAS giúp tăng tốc matrix multiply 2-3 lần so với không có. Bắt buộc cài. ffmpeg để convert audio sang định dạng 16kHz mono mà Whisper cần.

4. Build whisper.cpp từ source

# Tạo workspace
mkdir -p /opt/ai-cpu && cd /opt/ai-cpu

# Clone whisper.cpp
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp

# Build với OpenBLAS
cmake -B build -DGGML_OPENBLAS=ON
cmake --build build -j$(nproc) --config Release

# Tải model
bash ./models/download-ggml-model.sh medium
# có các size: tiny, base, small, medium, large-v3

Khuyến nghị model cho tiếng Việt: medium (1.5GB, chính xác cao, realtime 1.5x trên 8 vCPU) hoặc large-v3 (3GB, tốt nhất cho accent miền Bắc/Trung/Nam, chạy 0.8x realtime trên 8 vCPU). Model small (500MB) chạy 3x realtime nhưng độ chính xác tiếng Việt kém.

5. Test transcribe file audio

# Convert audio sang format Whisper cần (16kHz mono WAV)
ffmpeg -i podcast.mp3 -ar 16000 -ac 1 -c:a pcm_s16le podcast.wav

# Transcribe
./build/bin/whisper-cli -m models/ggml-medium.bin -f podcast.wav -l vi -otxt -osrt

# Kết quả: podcast.wav.txt và podcast.wav.srt
cat podcast.wav.txt

Với podcast 30 phút tiếng Việt, model medium chạy hết ~20 phút trên 4 vCPU. Output SRT có timestamp, paste thẳng vào YouTube/CapCut. Độ chính xác từ vựng phổ biến ~95%, từ kỹ thuật ~85% (cần custom prompt initial nếu nhiều thuật ngữ).

6. Chạy whisper server HTTP

# Whisper.cpp có server HTTP built-in
./build/bin/whisper-server 
  -m models/ggml-medium.bin 
  --host 0.0.0.0 
  --port 8080 
  -l vi 
  -t 4

# Gọi từ client
curl -X POST http://1.2.3.4:8080/inference 
  -F file="@podcast.wav" 
  -F language="vi" 
  -F response_format="json"

Server HTTP cho phép gọi từ n8n, app web, hoặc script Python qua REST. Production nên bọc thêm Caddy reverse proxy + SSL + Basic Auth.

7. Build llama.cpp

cd /opt/ai-cpu
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

# Build với OpenBLAS
cmake -B build -DGGML_OPENBLAS=ON
cmake --build build -j$(nproc) --config Release

# Tải model GGUF từ Hugging Face
mkdir -p models
cd models
curl -L -o llama-3.1-8b-instruct-q4.gguf 
  https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/resolve/main/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf

Mức lượng tử hoá Q4_K_M là sweet spot: chỉ 4.5GB cho model 8B, chất lượng giữ ~96% so với FP16. Q5/Q6 chính xác hơn nhưng RAM/speed kém. Q3 nhẹ hơn nhưng chất lượng tụt rõ.

8. Test llama chat CLI

./build/bin/llama-cli 
  -m models/llama-3.1-8b-instruct-q4.gguf 
  -p "Bạn là trợ lý AI tiếng Việt. Câu hỏi: Cloud VPS là gì?" 
  -n 256 
  -t 8 
  --temp 0.7

# Output streaming token, tốc độ ~8-10 token/s trên 8 vCPU

Llama 3.1 8B viết tiếng Việt khá tốt với prompt rõ ràng. Với câu hỏi factual, độ chính xác tương đương GPT-3.5. Yếu hơn ở reasoning đa bước phức tạp.

9. Chạy llama server OpenAI-compatible

./build/bin/llama-server 
  -m models/llama-3.1-8b-instruct-q4.gguf 
  --host 0.0.0.0 
  --port 8081 
  -c 4096 
  -t 8 
  -ngl 0  # 0 layer offload to GPU vì không có GPU

# Test với curl theo format OpenAI
curl http://1.2.3.4:8081/v1/chat/completions 
  -H "Content-Type: application/json" 
  -d '{
    "model": "llama",
    "messages": [{"role":"user","content":"Việt Nam có bao nhiêu tỉnh?"}],
    "temperature": 0.7
  }'

Llama-server expose endpoint /v1/chat/completions tương thích OpenAI. Bạn dùng được OpenAI SDK, LangChain, n8n OpenAI node, chỉ cần đổi base_url sang VPS của bạn. Cực tiện cho migrate từ OpenAI sang self-host.

10. Benchmark thực tế trên VPS TND Pro 8GB

ModelSize diskRAM peakSpeedUse case phù hợp
Whisper tiny (39MB)76MB200MB10x realtimeVoice command, kém VN
Whisper small500MB800MB3x realtimeTranscribe nội bộ
Whisper medium1.5GB2.5GB1.5x realtimePodcast VN production
Whisper large-v33GB5GB0.8x realtimeQuality cao nhất VN
Llama 3.1 8B Q44.5GB5.5GB8-12 tok/sChatbot, summarize
Qwen 2.5 7B Q44.4GB5.4GB9-12 tok/sTốt nhất cho VN
Mistral 7B Q44.1GB5GB10-14 tok/sNhanh nhất, code OK
Llama 3.1 70B Q4 (VPS 64GB)40GB48GB1-2 tok/sReasoning sâu, chậm

Mình thường khuyên: Whisper medium + Qwen 2.5 7B Q4 là combo tốt nhất cho VN, vừa 8GB RAM, chất lượng tiếng Việt vượt Llama, tốc độ chấp nhận được.

11. Use case 1: transcribe podcast tự động qua n8n

  • Trigger n8n: file upload vào folder /podcasts trên VPS (FTP/SFTP).
  • Node Execute Command: ffmpeg convert sang 16kHz.
  • Node HTTP Request: POST tới whisper-server :8080.
  • Node HTTP Request: POST text vào llama-server :8081 với prompt "summarize transcript này thành 5 bullet point tiếng Việt".
  • Node Notion: tạo trang mới với title + transcript + summary.

Workflow này tự động hoá toàn bộ pipeline podcast: upload audio -> 25 phút sau có transcript + summary trong Notion. Tiết kiệm 2-3 giờ/tuần cho podcast 1 tập/tuần.

12. Use case 2: chatbot FAQ nội bộ qua LangChain

# Python + LangChain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="http://1.2.3.4:8081/v1",
    api_key="not-used",
    model="llama-3.1-8b",
    temperature=0.3
)

response = llm.invoke("Quy trình refund của shop là gì?")
print(response.content)

Vì llama-server là OpenAI-compatible, mọi tool LangChain/LlamaIndex/Vercel AI SDK đều dùng được. Bạn xây chatbot nội bộ FAQ với RAG (kết hợp Postgres pgvector) chỉ vài chục dòng code.

13. Tối ưu performance trên CPU

  • Số thread (-t): để = số physical core, không hyper-thread (lscpu | grep 'Core(s) per socket').
  • Bật NUMA aware nếu VPS có nhiều socket: --numa numactl trên llama-server.
  • Context size (-c): giữ nhỏ (2048-4096) nếu task ngắn. Context lớn nặng RAM và chậm.
  • Batch size: --batch-size 512 thường tốt. Batch quá lớn khiến CPU swap RAM.
  • Tránh chạy song song nhiều model trên VPS yếu: serialize qua queue.

14. Systemd service để auto-restart

# /etc/systemd/system/whisper-server.service
[Unit]
Description=Whisper.cpp HTTP Server
After=network.target

[Service]
Type=simple
User=ai
WorkingDirectory=/opt/ai-cpu/whisper.cpp
ExecStart=/opt/ai-cpu/whisper.cpp/build/bin/whisper-server -m models/ggml-medium.bin --host 0.0.0.0 --port 8080 -l vi -t 4
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now whisper-server
sudo systemctl status whisper-server

Tạo tương tự cho llama-server. Sau reboot VPS, hai service tự khởi động. Logs xem qua journalctl -fu whisper-server.

Cloud VPS cho vibe coder

VPS CPU chạy AI local 24/7 không cần GPU

Cloud VPS TND AMD EPYC AVX-512, SSD CEPH NVMe, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Gói Pro 8GB đủ chạy Whisper Medium + Llama 8B Q4 song song, full local, không gửi data ra ngoài.

Xem 8 cấu hình Cloud VPS →

FAQ

Whisper.cpp có chạy được trên VPS ARM (Ampere/Graviton) không?

Có, whisper.cpp support ARM NEON tốt. Trên Ampere Altra hoặc AWS Graviton 3, speed tương đương x86 AVX2 cùng số core, lại tiết kiệm điện hơn. Build flag mặc định tự detect ARM, không cần thêm gì. Lưu ý: chưa có binary precompiled, phải build từ source.

Model nào tốt nhất cho tiếng Việt 2026?

Cho speech-to-text: Whisper large-v3 (3GB, chất lượng cao nhất, accent 3 miền OK). Cho text generation: Qwen 2.5 7B Q4 hoặc Vinallama 7B (do Vingroup fine-tune cho VN). Llama 3.1 8B tiếng Việt cũng ổn nhưng đôi khi pha nhầm tiếng Anh trong reply.

Có dùng GPU rẻ (T4, RTX 3060) để tăng tốc không?

Có. llama.cpp và whisper.cpp đều build được với CUDA hoặc Vulkan. Một GPU T4 8GB tăng tốc Llama 8B từ 10 token/s lên 80-120 token/s. Tuy nhiên VPS GPU thường đắt 5-10x VPS CPU cùng RAM. Cân nhắc: nếu khối lượng >5000 request/ngày thì đáng đầu tư GPU, không thì stick với CPU.

Có thể chạy đồng thời Whisper và llama trên cùng VPS?

Có, miễn đủ RAM. VPS 8GB chạy được Whisper Medium (2.5GB peak) + Llama 8B Q4 (5.5GB peak) nếu không gọi song song quá heavy. VPS 16GB thoải mái hơn, chạy được Whisper Large-v3 + Llama 13B Q4. Khuyến nghị: serialize request qua queue Redis hoặc n8n để tránh CPU thrashing.

RAG với llama.cpp + Postgres pgvector có khả thi?

Hoàn toàn khả thi. Embedding dùng model nhỏ (BGE-small-en, nomic-embed-text) chạy CPU 50ms/chunk. Store vector vào Postgres pgvector. Query embed -> kNN search top 5 -> stuff vào prompt llama.cpp. Pipeline full local cho intranet 5000 doc, query <3 giây.

Whisper.cpp có realtime streaming không?

Có. Binary whisper-stream dùng microphone input, transcribe near-realtime với chunk 5-10s overlap. Tốt cho voice command, live captioning meeting. Tuy nhiên trên CPU độ trễ ~3-5 giây so với GPU realtime <1 giây. Đủ dùng cho non-critical use case.

2009
15+ năm vận hành liên tục
10+
tập đoàn lớn tin dùng
100+
doanh nghiệp SMB Việt
30 ngày
đổi key lỗi miễn phí
Phần mềm bản quyền chính hãng chúng tôi cung cấp
Bản quyền chính hãng Hóa đơn VAT đầy đủ Đổi key lỗi 30 ngày Vận hành từ 2009 MST 0200994870 Hotline 0225.999.6666