Cả team dùng LLM thoải mái qua Internet. 0 đồng subscription mỗi tháng.

Kiến trúc hệ thống

Mình vừa tự build xong một API server chạy LLM local trên máy bàn RTX 3060. Bài này chia sẻ chi tiết quá trình setup và lý do đằng sau từng quyết định kỹ thuật.

Phần cứng

RTX 3060 12GB VRAM, 32GB RAM. Cấu hình tối thiểu để chạy AI local ổn định.

12GB VRAM là con số quan trọng nhất — VRAM quyết định model nào chạy được, model nào không.

So sánh các lựa chọn:

  • RTX 4060 (8GB): nhanh hơn khi chơi game nhưng 8GB không đủ chạy model 9B thoải mái với nhiều người cùng lúc
  • RTX 3090 (24GB): lý tưởng hơn nhưng ~22-25 triệu — gấp 3 lần giá, không hợp lý với team nhỏ
  • RTX 3060 (12GB, 7-8 triệu): tỉ lệ giá/VRAM tốt nhất cho mục đích này

RAM 32GB để hệ điều hành và FastAPI không tranh tài nguyên GPU.

Chọn Model — Quyết Định Quan Trọng Nhất

Gemma 4 26B (Google)

Thông minh, đa ngôn ngữ tốt, hỗ trợ vision. Nhưng nặng 17GB, chiếm gần hết 12GB VRAM. Hai người dùng cùng lúc là giật lag nặng. Context lớn là treo máy.

Phải disable.

Gemma 4 e4b (8B)

Nhẹ hơn, ổn định, hỗ trợ phân tích ảnh. 15-22 tokens/giây. Giữ lại cho tác vụ vision.

Qwen 3.5 9B (Alibaba)

Bất ngờ lớn nhất. Nhanh hơn Gemma e4b ~45% dù có nhiều tham số hơn. Đạt 30-50 tokens/giây. Tiếng Việt tự nhiên, logic tốt, viết sáng tạo ổn.

Tại sao nhanh hơn? Kiến trúc Hybrid Gated DeltaNet — 75% các layer dùng linear attention (tỉ lệ 3:1 so với standard attention), kết hợp GQA, SwiGLU và RoPE. Linear attention tối ưu đặc biệt cho GPU consumer.

ModelTokens/giâyThời gian 256 tokens
Qwen 3.5 9B30-50 tok/s5-9 giâyModel chính
Gemma 4 e4b15-22 tok/s12-17 giâyVision
Gemma 4 26B8-12 tok/s21-32 giâyĐÃ TẮT

Bài học số 1: Model vừa vặn với hardware luôn thắng model mạnh nhất trên giấy.

Tại Sao Chọn Ollama?

  • Cài đặt đơn giản: một lệnh pull, một lệnh chạy, không cần compile hay config CUDA thủ công
  • API chuẩn OpenAI: Cursor, Continue, mọi IDE extension hỗ trợ OpenAI đều trỏ thẳng vào được
  • Linh hoạt: switch model chỉ cần đổi tên trong request, không cần restart server

Ollama vs vLLM thực tế:

Chỉ tiêuOllamavLLM
Tốc độ 1 request~62 tok/s~71 tok/s
10 request đồng thời~41 TPS~485 TPS
P99 latency673ms80ms
Độ khó setup1 lệnhPhức tạp
Phù hợpTeam nhỏDatacenter

Cập nhật 2026: Ollama 0.19 tích hợp MLX backend, nhanh gấp 2x trên Apple Silicon. Trên CUDA vẫn dùng llama.cpp.

FastAPI Làm Gateway

Không gọi thẳng Ollama từ Internet. Ollama không có xác thực, rate limit, hay logging.

Không phải lo xa: tháng 1/2026 có hơn 175,000 Ollama server bị expose trên 130 quốc gia mà không có xác thực. Chiến dịch “Operation Bizarre Bazaar” khai thác bán compute, thiệt hại hàng chục ngàn USD. CVE-2024-37032 cho phép RCE trên Ollama không được bảo vệ.

FastAPI thay vì Flask/Express: async native, StreamingResponse built-in, validation payload tự động.

Cloudflare Tunnel

Vấn đềTruyền thốngCloudflare Tunnel
Port forwardingMở port routerKhông cần
SSLMua certTự động
IP độngDDNSTự động
DDoSTự xử lýCloudflare
Chi phíDomain + certMIỄN PHÍ

Chỉ thêm 15-45ms latency — không đáng kể khi LLM request mất 5-11 giây.

Bảo Mật 6 Lớp

  1. API Key + Secret Key — header Authorization: Bearer, mỗi client một cặp riêng
  2. Fail2Ban tự build — ban IP sau X lần sai auth, state lưu file để không mất khi restart, asyncio.Lock() chống race condition
  3. Rate Limit — 50 req/phút per user với slowapi
  4. Context Bomb Protection — chặn payload quá 50,000 từ / 4 ảnh / 20MB
  5. Model Blacklist — disable Gemma 26B ở tầng gateway
  6. Hot-reload Keys — thêm/thu hồi key không cần restart

Semaphore Và Streaming

RTX 3060 chỉ handle tốt 2 request LLM song song. Dùng asyncio.Semaphore(2).

Vấn đề thiết kế: giữ semaphore suốt khi stream về client thì kẻ tấn công chỉ cần mở 2 connection đọc chậm là khóa hết GPU 300 giây.

Giải pháp — tách 2 giai đoạn:

Giai đoạn 1 (semaphore đang giữ): đọc toàn bộ response từ Ollama với timeout 180 giây.

Giai đoạn 2 (semaphore đã giải phóng): stream về client — GPU tự do nhận request mới.

Thiết kế Semaphore 2 giai đoạn

Mac Mini M4 24GB — Chạy Được Model Nào?

ModelTốc độGhi chú
Qwen 3.5 9B40-60 tok/sLựa chọn chính
Gemma 4 e4b24-57 tok/sVision + text
Qwen 3 14B35-50 tok/sChất lượng cao nhất
Gemma 4 26B MoE20-30 tok/s3.8B active params/token
Gemma 2 27B dense~2 tok/sKhông khuyến dùng

M4 24GB thắng: model lớn hơn, tiết kiệm điện gấp 3-4x, im lặng. RTX 3060 thắng: nhanh hơn model nhỏ, giá rẻ.

Setup tối ưu cho M4: Ollama 0.19+, OLLAMA_FLASH_ATTENTION=1, OLLAMA_NUM_GPU=99, OLLAMA_MAX_LOADED_MODELS=1

Chi Phí Thật

Hạng mụcChi phí
RTX 3060~7-8 triệu
RAM 32GB~5 triệu
Chip, main, nguồn, ổ cứng~6 triệu
Tiền điện (tháng)~500-600k
Tổng~18-19 triệu

RTX 3060 khi inference chỉ 100-120W (không phải 170W TDP gaming) vì inference bị giới hạn bởi memory bandwidth.

Dịch vụInput / 1M tokensOutput / 1M tokens
GPT-4o-mini$0.15$0.60
Gemini Flash$0.10$0.40
Claude Haiku$0.80$4.00
Self-hosted$0~200-300k/tháng điện

Self-host có lợi khi volume trên 10 triệu tokens/ngày. Giá trị chính: data sovereignty.

Tóm Lại

Tự build khó. Mua private model nếu có điều kiện là tốt nhất.

Mình build server này chỉ để backup cho hệ thống lõi, không có ý định thay thế flow hiện tại. Còn nếu bạn muốn thử, tech stack trên là best option.


Quan điểm cá nhân từ kinh nghiệm thực tế.

Xuất nội dung

Bình luận