AI & Developer Tools Tổng Hợp

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

Hướng dẫn chạy Whisper.cpp speech-to-text và llama.cpp LLM trên VPS CPU không GPU. Benchmark, model lựa chọn, API server, ví dụ podcast transcribe + chatbot.

Thanh Nguyễn Cập nhật Đăng 10 phút đọc 10 khối lệnh

Whisper.cpp + llama.cpp trên VPS CPU: AI không cần GPU
Mục lục bài viết
  1. 1. Vì sao chọn CPU thay vì GPU?
  2. 2. Yêu cầu VPS
  3. 3. Cài dependency build
  4. 4. Build whisper.cpp từ source
  5. 5. Test transcribe file audio
  6. 6. Chạy whisper server HTTP
  7. 7. Build llama.cpp
  8. 8. Test llama chat CLI
  9. 9. Chạy llama server OpenAI-compatible
  10. 10. Benchmark thực tế trên VPS TND Pro 8GB
  11. 11. Use case 1: transcribe podcast tự động qua n8n
  12. 12. Use case 2: chatbot FAQ nội bộ qua LangChain
  13. 13. Tối ưu performance trên CPU
  14. 14. Systemd service để auto-restart
  15. FAQ

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)Có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

Terminal3. Cài dependency buildbash
# Ubuntu 24.04sudo apt updatesudo apt install -y build-essential cmake git ffmpeg curlsudo apt install -y libopenblas-dev pkg-config # AlmaLinux 9sudo 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

Terminal4. Build whisper.cpp từ sourcebash
# Tạo workspacemkdir -p /opt/ai-cpu && cd /opt/ai-cpu # Clone whisper.cppgit clone https://github.com/ggerganov/whisper.cpp.gitcd whisper.cpp # Build với OpenBLAScmake -B build -DGGML_OPENBLAS=ONcmake --build build -j$(nproc) --config Release # Tải modelbash ./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, phù hợp 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

Terminal5. Test transcribe file audiobash
# 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.srtcat 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

Terminal6. Chạy whisper server HTTPbash
# 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ừ clientcurl -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

PowerShell7. Build llama.cpppowershell
cd /opt/ai-cpugit clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpp # Build với OpenBLAScmake -B build -DGGML_OPENBLAS=ONcmake --build build -j$(nproc) --config Release # Tải model GGUF từ Hugging Facemkdir -p modelscd modelscurl -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

Terminal8. Test llama chat CLIbash
./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

PowerShell9. Chạy llama server OpenAI-compatiblepowershell
./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 OpenAIcurl 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/sPhù hợp 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 phù hợp 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

Code12. Use case 2: chatbot FAQ nội bộ qua LangChainpython
# Python + LangChainfrom 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: 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

Terminal14. Systemd service để auto-restartbash
# /etc/systemd/system/whisper-server.service[Unit]Description=Whisper.cpp HTTP ServerAfter=network.target [Service]Type=simpleUser=aiWorkingDirectory=/opt/ai-cpu/whisper.cppExecStart=/opt/ai-cpu/whisper.cpp/build/bin/whisper-server -m models/ggml-medium.bin --host 0.0.0.0 --port 8080 -l vi -t 4Restart=on-failureRestartSec=5 [Install]WantedBy=multi-user.target
Terminal14. Systemd service để auto-restartbash
sudo systemctl daemon-reloadsudo systemctl enable --now whisper-serversudo 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.

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 phù hợp 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.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.