Self-host Tabby AI coding assistant trên VPS có GPU

Mục lục
TL;DR
  • Tabby là AI coding assistant open-source self-host, thay GitHub Copilot. Plugin sẵn cho VS Code, JetBrains, Vim, Neovim.
  • Cần VPS có GPU NVIDIA tối thiểu 8GB VRAM cho model 3B, 12GB cho model 7B, 24GB cho code-completion + chat đầy đủ.
  • Setup bằng Docker compose mất 30 phút từ con số 0, kể cả cài driver NVIDIA và Container Toolkit trên Ubuntu 24.04.
  • Sau khi chạy, mỗi dev trong team có code completion 100ms latency (LAN nội bộ), chat AI dùng model 7B nhanh tương đương Copilot.
  • Phù hợp team 3-10 dev muốn code không rời server công ty, không phụ thuộc OpenAI/Anthropic API token.

GitHub Copilot và Cursor đã trở thành chuẩn cho developer trong 2 năm qua, nhưng nhiều team Việt Nam vẫn dè dặt: data code gửi ra OpenAI, license 10-20 USD mỗi dev mỗi tháng, và lo lắng về việc model học hỏi từ private code. Tabby ra đời như một câu trả lời mã nguồn mở: cài trên VPS GPU của bạn, code-completion và chat AI chạy nội bộ, plugin tích hợp sẵn cho mọi editor phổ biến.

Bài này hướng dẫn từng bước: chọn cấu hình VPS GPU phù hợp, cài NVIDIA driver và Container Toolkit trên Ubuntu 24.04, dựng Tabby bằng Docker, chọn model phù hợp (StarCoder, DeepSeek Coder, Qwen Coder), cấu hình plugin VS Code, gắn RAG vào codebase nội bộ, và mẹo vận hành. Tất cả test trên VPS GPU dedicated với RTX 4090 24GB, cũng đủ tham khảo cho VPS GPU rẻ hơn dùng RTX 3060 12GB.

Tabby là gì và khác Copilot, Cursor như thế nào?

Tabby là một AI coding assistant viết bằng Rust, do TabbyML phát hành dưới giấy phép Apache 2.0 từ 2023. Nó wrap inference engine llama.cpp và vLLM, cung cấp 3 dịch vụ qua HTTP API: code completion (FIM - Fill-In-the-Middle), chat AI, và RAG trên repository.

So sánh nhanh với 2 đối thủ chính:

Tiêu chíTabby self-hostGitHub CopilotCursor
Mã nguồnOpen Apache 2.0ClosedClosed
Chi phí mỗi dev/tháng0 (chia chi phí VPS)10-19 USD20-40 USD
Data privacy100% nội bộGửi snippet ra OpenAIGửi snippet ra OpenAI/Anthropic
Latency completion50-200ms (LAN)300-800ms (Internet)400-1000ms
Model size1B-32B (chọn)Codex (closed)Claude/GPT-4 (closed)
RAG codebase nội bộCó, tự indexBản Enterprise mới có
Plugin editorVS Code, JetBrains, Vim, Neovim, EmacsHầu hết IDEVS Code fork

Tabby thắng ở privacy và chi phí dài hạn. Đổi lại, bạn phải tự lo GPU, driver, model update. Chất lượng completion của model 7B+ hiện đại (Qwen2.5-Coder, DeepSeek-Coder-V2) ngang Copilot trên các task phổ biến (Python, TypeScript, Go, Rust), thua một chút ở task khó cần reasoning sâu.

Yêu cầu phần cứng GPU

SetupGPUVRAMModelThroughput
Cá nhân, 1-2 devRTX 306012 GBStarCoder2-3B~50 tok/s
Team 3-5 devRTX 407012 GBDeepSeek-Coder-6.7B Q4~80 tok/s
Team 5-10 devRTX 409024 GBQwen2.5-Coder-7B FP16~140 tok/s
Team 10+ dev có chatRTX 4090 + RTX 407024+12 GBCode 7B + Chat 7B~200 tok/s combined
EnterpriseA100 40GB40 GBQwen2.5-Coder-32B Q4~80 tok/s

Throughput tính cho 1 user. Với team 5 dev gõ liên tục, mỗi người chiếm khoảng 5-15 phần trăm throughput, GPU 12GB+ là đủ. Cảm giác smooth tương đương Copilot khi latency hop SSH dưới 30ms.

Bước 1: Cài NVIDIA driver trên Ubuntu 24.04

sudo apt update
sudo apt upgrade -y
sudo apt install -y ubuntu-drivers-common
ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
sudo reboot

Sau reboot, kiểm tra:

nvidia-smi

Thấy bảng tên GPU, version driver, CUDA version là OK. Nếu lỗi "No devices were found", driver chưa load, kiểm tra Secure Boot trong BIOS phải tắt.

Bước 2: Cài Docker và NVIDIA Container Toolkit

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey 
  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list 
  | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' 
  | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi

Lệnh cuối phải in ra bảng GPU như nvidia-smi chạy native. Khi đó Docker container đã có thể truy cập GPU.

Bước 3: Dựng Tabby bằng Docker compose

Tạo thư mục và file compose:

mkdir -p ~/tabby && cd ~/tabby
mkdir -p data

Tạo file docker-compose.yaml:

services:
  tabby:
    image: tabbyml/tabby:latest
    container_name: tabby
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/data
    command:
      - "serve"
      - "--model"
      - "Qwen2.5-Coder-7B"
      - "--chat-model"
      - "Qwen2.5-Coder-7B-Instruct"
      - "--device"
      - "cuda"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

Khởi động:

docker compose up -d
docker compose logs -f tabby

Lần đầu tốn 10-15 phút để Tabby tải model từ Hugging Face. Khi thấy log "Listening on 0.0.0.0:8080", server đã sẵn sàng. Truy cập http://server-ip:8080 thấy UI Tabby Onboarding.

Bước 4: Đăng ký admin và tạo invitation

Trong UI, click "Create admin account". Email và password mạnh. Sau khi login, vào Settings > Members > Invite > nhập email các dev trong team. Mỗi người nhận link đăng ký, sau khi tạo account sẽ lấy được API token cá nhân ở phần Profile.

API token này dùng để cài plugin trong editor. Không share token giữa các dev, mỗi người một token riêng để Tabby track usage và audit.

Bước 5: Cài plugin VS Code

  1. Mở VS Code > Extensions > tìm "Tabby" > Install (publisher: TabbyML).
  2. Mở Command Palette (Cmd/Ctrl+Shift+P) > "Tabby: Connect to server".
  3. Nhập endpoint http://server-ip:8080 (hoặc https://tabby.your-domain.com nếu có reverse proxy).
  4. Paste API token. Click Connect.
  5. Mở file Python/JS bất kỳ, gõ vài ký tự. Sau 100-300ms thấy gợi ý hiện grey, nhấn Tab để accept.

Tương tự cho JetBrains: cài plugin Tabby từ Marketplace, vào Settings > Tabby > nhập endpoint + token. Vim/Neovim cài plugin TabbyML/tabby-vim qua lazy.nvim hoặc packer.

Bước 6: Đặt Tabby sau reverse proxy HTTPS

Không nên expose port 8080 trần ra internet. Dùng Caddy:

tabby.your-domain.com {
    reverse_proxy localhost:8080
    encode gzip
}

Reload Caddy, lấy cert tự động. Sau đó các dev kết nối qua HTTPS, có thể hoạt động từ ngoài văn phòng. Để tăng bảo mật, gắn Cloudflare Access (Zero Trust free) bọc subdomain, yêu cầu login Google Workspace trước khi vào.

Lựa chọn model: bảng so sánh thực tế

ModelVRAMChất lượngNgôn ngữ tốt
StarCoder2-3B4 GBTrung bìnhPython, JS, Go
DeepSeek-Coder-6.7B-Base8 GBTốtPython, JS, Java, Rust
Qwen2.5-Coder-7B10 GBRất tốtPython, JS, TS, Go, Rust, Java
Qwen2.5-Coder-14B18 GBRất tốt+Tất cả + reasoning sâu
Qwen2.5-Coder-32B Q422 GBXuất sắcTất cả, ngang GPT-4o-mini
DeepSeek-Coder-V2-Lite-16B20 GBXuất sắcMoE, fast inference

Lời khuyên: bắt đầu với Qwen2.5-Coder-7B vì cân bằng tốt giữa chất lượng và VRAM. Khi GPU 24GB+, nâng lên 14B hoặc 32B Q4 cho chất lượng gần Copilot.

RAG codebase nội bộ: gắn repo vào Tabby

Tabby có thể index toàn bộ codebase công ty để chat AI hiểu context của riêng team. Vào Settings > Repositories > Add > nhập git URL (nếu private thêm SSH key của Tabby vào deploy key của repo).

Tabby clone repo về /data/repositories, chạy job index mỗi giờ (cấu hình được). Sau khi index xong, khi dev chat với Tabby qua plugin, Tabby tự retrieve các đoạn code liên quan từ repo và đưa vào context của model.

Tính năng này đặc biệt hữu ích cho monorepo lớn (>50k file), nơi không thể đưa hết vào context window của LLM. Dev hỏi "function authenticateUser được dùng ở đâu" Tabby trả lời chính xác có file path và snippet.

Quản lý usage và quota

Vào Admin > Analytics xem stat: số request/dev/ngày, model latency, success rate. Tabby không có quota built-in (open source) nên nếu cần giới hạn, đặt rate limit ở reverse proxy Caddy:

tabby.your-domain.com {
    reverse_proxy localhost:8080
    rate_limit {
        zone tabby {
            key {http.request.header.Authorization}
            events 600
            window 1m
        }
    }
}

600 request/phút mỗi token là dư cho code completion (vì mỗi keystroke không trigger request, Tabby có debounce 200ms).

Backup và update Tabby

Backup quan trọng nhất là /data/db.sqlite (user, token, repo metadata) và /data/repositories (codebase đã clone). Cron backup tuần:

0 2 * * 0 tar czf /backup/tabby-$(date +%F).tar.gz -C ~/tabby/data db.sqlite repositories

Update version mới của Tabby:

cd ~/tabby
docker compose pull
docker compose down
docker compose up -d
docker compose logs -f tabby

Tabby maintain backward-compatible với data cũ tốt, chưa từng gặp breaking change cần migrate trong các bản 0.20+.

Lỗi thường gặp và fix

  • "CUDA out of memory": chọn model nhỏ hơn hoặc dùng quantized version (Q4_K_M).
  • "Connection refused" từ VS Code: port 8080 chưa mở trên firewall, hoặc Tabby chưa start xong. Xem docker logs.
  • Latency completion > 500ms: GPU bị shared workload khác. Dedicated Tabby riêng, hoặc tăng GPU.
  • Index repo fail: tab Settings > Jobs xem log error. Thường do SSH key không có quyền clone private repo.
  • Plugin VS Code "Disconnected": token expired hoặc Tabby restart làm token cache cũ. Reconnect lại.

Khi nào nên dùng Tabby, khi nào quay lại Copilot?

Dùng Tabby khi:

  • Privacy là yêu cầu pháp lý hoặc hợp đồng khách hàng.
  • Team 5+ dev, tổng chi phí Copilot vượt 50 USD/tháng.
  • Có sẵn server có GPU hoặc thuê VPS GPU 1-2 triệu/tháng vẫn rẻ hơn license.
  • Muốn customize: thêm RAG codebase, fine-tune trên code style công ty.

Quay lại Copilot/Cursor khi:

  • Dev solo, không có budget mua VPS GPU.
  • Cần latest model (Claude 3.5 Opus, GPT-4o) cho task khó.
  • Không ai trong team biết quản lý server GPU.

FAQ

VPS GPU rẻ nhất Việt Nam để chạy Tabby là gì?

Nhiều nhà cung cấp VN có VPS GPU cấu hình RTX 3060 12GB từ 1-1.5 triệu/tháng. Đủ cho team 1-3 dev chạy Qwen2.5-Coder-7B. Khi team lớn lên, nâng cấp GPU RTX 4070/4090. TND đang mở rộng dòng VPS GPU 2026, theo dõi cập nhật ở trang VPS.

Tabby có thể chạy CPU-only không?

Có nhưng cực chậm. Model 3B trên CPU 8 core hiện đại đạt 3-5 tok/s, mỗi câu completion đợi 5-10 giây, không khả thi cho workflow thực tế. CPU-only chỉ dùng để demo hoặc test.

Tabby hỗ trợ tiếng Việt trong chat không?

Có, khi dùng model Qwen2.5-Coder vì Qwen được train multilingual. Bạn hỏi tiếng Việt như "viết hàm Python tính tuổi từ ngày sinh", Tabby trả lời và sinh code chuẩn. DeepSeek-Coder hỗ trợ tiếng Việt yếu hơn, ưu tiên tiếng Anh.

Tabby có hỗ trợ Apple M-series chip không?

Có. Tabby có binary cho Apple Silicon, dùng Metal làm backend. M2 Pro với 32GB RAM chạy được Qwen2.5-Coder-7B ở tốc độ chấp nhận được. Tuy nhiên với team, vẫn nên có server GPU NVIDIA dedicated thay vì chia sẻ máy dev cá nhân.

Tabby có thể fine-tune trên code internal không?

Phiên bản open source chưa hỗ trợ fine-tune trực tiếp. Cách thay thế: dùng RAG (đã built-in) để retrieve context từ codebase nội bộ, model sẽ đáp theo style code của bạn. Nếu cần fine-tune thực sự, dùng axolotl train một LoRA adapter rồi gắn vào Tabby qua custom model path.

Cloud VPS cho vibe coder

Cloud VPS cho dev solo và team, kết hợp với VPS GPU cho AI workload

Cloud VPS TND sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13. SSD CEPH, snapshot 1-click, backup hằng ngày, network 200Mbps trong nước. Combo Cloud VPS chạy reverse proxy + VPS GPU dedicated chạy Tabby giúp team dev có AI coding assistant nội bộ.

Xem 8 cấu hình Cloud VPS →

Chia sẻ bài viết