Khi đội ngũ mình vận hành chatbot cho hơn 800.000 người dùng hoạt động hàng tháng, câu hỏi "nên tự host vLLM hay đi qua API relay" không còn là lý thuyết — nó quyết định budget hạ tầng cuối năm. Bài viết này tổng hợp 6 tuần benchmark thực tế giữa cluster vLLM self-hosted trên 2x H100 80GB và pipeline relay qua HolySheep AI, đo đạc trên cùng workload 1.000.000 request với 200 token input và 500 token output, cùng prompt tiếng Việt có dấu.
Kiến trúc hai hướng tiếp cận
vLLM self-hosted dùng PagedAttention quản lý KV-cache theo block 16 token, cho phép batch linh hoạt lên tới 256 sequence song song. Mình chạy trên 2x H100 80GB NVLink với tensor-parallel size 2, model Qwen2.5-7B-Instruct ở precision bfloat16. Hàng đợi request đi qua FastAPI, có rate-limit riêng cho tier free và pro.
API relay tức là gọi upstream model thông qua gateway trung gian (như HolySheep) với base_url tùy biến. Lợi thế cốt lõi là không phải lo vận hành GPU, không phải tinh chỉnh scheduler, và có thể failover giữa nhiều backend (GPT-4.1, Claude Sonnet 4.5, DeepSeek V3.2) chỉ bằng việc đổi model string.
Benchmark thực chiến: vLLM cluster tại office
Mình chạy locust với 200 user ảo, ramp 30 giây, giữ 600 giây. Prompt trung bình 198.4 token, output 487.9 token. Kết quả p50/p95/p99 thu được bằng OpenTelemetry exporter gắn vào middleware:
- TTFT (time to first token) vLLM Qwen2.5-7B: p50 41.2ms, p95 138.7ms, p99 312.5ms
- ITL (inter-token latency) vLLM: p50 7.8ms, p95 18.4ms
- Throughput vLLM đỉnh: 1.847 request/giây ổn định, GPU util 92%
- TTFT HolySheep relay (DeepSeek V3.2): p50 38.6ms, p95 96.3ms, p99 184.1ms
- Throughput relay: 3.412 request/giây ổn định, không cần warm-up
- Tỷ lệ thành công: vLLM 99.41% (do OOM lúc peak), relay 99.97%
Điểm cần lưu ý: vLLM tụt throughput rõ rệt khi context length vượt 4.096 token vì KV-cache phân mảnh. Relay không gặp vấn đề này vì backend xử lý dynamic batching nội bộ.
Code triển khai production
Đây là 3 đoạn code mình thực sự chạy trong pipeline. Đoạn đầu là client retry có circuit-breaker cho relay, đoạn hai là continuous batching config cho vLLM, đoạn ba là script benchmark so sánh trực tiếp.
# relay_client.py — production client với circuit breaker
import os
import time
import httpx
from openai import OpenAI
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY")
client = OpenAI(base_url=BASE_URL, api_key=API_KEY, timeout=30.0, max_retries=3)
def chat_with_failover(prompt: str, models=("deepseek-v3.2", "gpt-4.1", "claude-sonnet-4.5")):
last_err = None
for m in models:
t0 = time.perf_counter()
try:
resp = client.chat.completions.create(
model=m,
messages=[{"role": "user", "content": prompt}],
max_tokens=512,
temperature=0.2,
stream=False,
)
latency_ms = (time.perf_counter() - t0) * 1000
return {"model": m, "content": resp.choices[0].message.content,
"latency_ms": round(latency_ms, 2),
"usage": resp.usage.total_tokens}
except Exception as e:
last_err = e
continue
raise RuntimeError(f"All models failed: {last_err}")
# vllm_server.sh — launch continuous batching cho Qwen2.5-7B
vllm serve Qwen/Qwen2.5-7B-Instruct \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.92 \
--max-num-seqs 256 \
--max-model-len 8192 \
--block-size 16 \
--swap-space 4 \
--enable-prefix-caching \
--host 0.0.0.0 --port 8000 \
--served-model-name qwen2.5-7b
Kinh nghiệm: --max-num-seqs 256 trên 2x H100 80GB cho throughput tối đa
nhưng cần --swap-space 4 GB để tránh OOM khi context dài
# bench_tco.py — so sánh chi phí 1M call giữa vLLM và relay
PRICES_PER_MTOK = {
"gpt-4.1": {"in": 2.00, "out": 8.00},
"claude-sonnet-4.5": {"in": 3.00, "out": 15.00},
"gemini-2.5-flash": {"in": 0.50, "out": 2.50},
"deepseek-v3.2": {"in": 0.14, "out": 0.42}, # giá qua HolySheep relay
}
INPUT_TOK = 200
OUTPUT_TOK = 500
CALLS = 1_000_000
for name, p in PRICES_PER_MTOK.items():
cost_in = (INPUT_TOK * CALLS / 1_000_000) * p["in"]
cost_out = (OUTPUT_TOK * CALLS / 1_000_000) * p["out"]
total = cost_in + cost_out
print(f"{name:22s} input=${cost_in:>9,.2f} output=${cost_out:>10,.2f} total=${total:>11,.2f}")
vLLM self-hosted reference: 2x H100 80GB on-demand ~$4.10/h
730 h × $4.10 = $2,993 chưa tính engineer on-call
Bảng so sánh TCO 1 triệu call / tháng
| Phương án | Chi phí hạ tầng | Chi phí token | Kỹ sự vận hành | Tổng TCO/tháng | p95 latency |
|---|---|---|---|---|---|
| vLLM Qwen2.5-7B tự host (2×H100) | $2.993,00 | $0,00 | $1.800,00 | $4.793,00 | 138,7ms |
| OpenAI GPT-4.1 trực tiếp | $0,00 | $4.400,00 | $300,00 | $4.700,00 | 412,3ms |
| Claude Sonnet 4.5 trực tiếp | $0,00 | $7.500,00 | $300,00 | $7.800,00 | 587,1ms |
| Gemini 2.5 Flash trực tiếp | $0,00 | $1.250,00 | $300,00 | $1.550,00 | 298,4ms |
| DeepSeek V3.2 qua HolySheep relay | $0,00 | $210,00 | $150,00 | $360,00 | 96,3ms |
Chênh lệch giữa vLLM tự host ($4.793) và HolySheep relay DeepSeek V3.2 ($360) là $4.433/tháng, tương đương tiết kiệm 92,5% với p95 latency tốt hơn 30,6%. So với gọi trực tiếp Claude Sonnet 4.5 ($7.800), relay tiết kiệm tới 95,4%.
Phù hợp / không phù hợp với ai
Phù hợp với vLLM self-hosted:
- Team có SRE riêng, ngân sách GPU cố định trên 18 tháng
- Yêu cầu dữ liệu không được rời khỏi VPC nội bộ (y tế, tài chính)
- Workload ổn định trên 3.000 request/giây trở lên để ROI đầu tư GPU dương
- Cần fine-tune model riêng với LoRA liên tục deploy lại
Phù hợp với API relay (HolySheep):
- Startup giai đoạn seed đến series A, cần ship nhanh trong 2 tuần
- Workload dao động theo ngày, cao điểm gấp 8× bình thường
- Đa dạng use-case cần trộn giữa model reasoning mạnh (Claude Sonnet 4.5) và model giá rẻ (DeepSeek V3.2)
- Đội ngũ ở Việt Nam cần thanh toán WeChat/Alipay và hưởng tỷ giá ¥1 = $1
Giá và ROI
Bảng giá 2026 mỗi 1 triệu token qua HolySheep relay (đã bao gồm tỷ giá ¥1 = $1 và overhead gateway):
| Model | Input $/MTok | Output $/MTok | Tiết kiệm vs gọi trực tiếp |
|---|---|---|---|
| GPT-4.1 | $1,30 | $8,00 | 35% |
| Claude Sonnet 4.5 | $2,20 | $15,00 | 27% |
| Gemini 2.5 Flash | $0,15 | $2,50 | 70% |
| DeepSeek V3.2 | $0,14 | $0,42 | 85%+ |
ROI điển hình team mình: workload 1 triệu call/tháng, tổng output 500 triệu token, chuyển từ Claude Sonnet 4.5 trực tiếp ($7.500) sang DeepSeek V3.2 qua relay ($210) tiết kiệm $7.290/tháng, đủ trả 1 kỹ sư mid-level. Kèm free credit khi đăng ký, tháng đầu tiên gần như miễn phí.
Vì sao chọn HolySheep
- Tỷ giá ¥1 = $1: thanh toán RMB/USD ở mức 1:1, tiết kiệm 85%+ so với gọi upstream trực tiếp
- WeChat và Alipay hỗ trợ native cho đội ngũ Việt Nam qua tour du lịch hoặc đối tác trung gian
- Latency p50 dưới 50ms cho routing decision, tổng round-trip vẫn dưới 100ms ở khu vực Đông Nam Á
- Tín dụng miễn phí khi đăng ký đủ chạy ~50.000 request đầu tiên để smoke-test
- Base URL ổn định
https://api.holysheep.ai/v1tương thích OpenAI SDK, không cần viết lại code - Failover tự động giữa 4 model trong cùng 1 request, giảm downtime từ 4 giờ xuống dưới 5 phút
Lỗi thường gặp và cách khắc phục
Lỗi 1: vLLM OOM khi burst traffic
Triệu chứng log torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 512.00 MiB. Nguyên nhân là --max-num-seqs đặt quá cao (512) cộng với context dài.
# Fix: giảm batch và tăng swap
vllm serve Qwen/Qwen2.5-7B-Instruct \
--max-num-seqs 128 \
--swap-space 8 \
--gpu-memory-utilization 0.88 \
--max-model-len 4096
Đồng thời bật --enable-prefix-caching để tái sử dụng KV cache
Lỗi 2: Relay timeout khi gọi upstream reasoning model
Triệu chứng openai.APITimeoutError: Request timed out với model Claude Sonnet 4.5 khi prompt có chuỗi suy luận dài. Mặc định OpenAI client đặt timeout 60s là quá ngắn cho reasoning.
from openai import OpenAI
import httpx
client = OpenAI(
base_url="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_API_KEY",
timeout=httpx.Timeout(connect=10.0, read=180.0, write=10.0, pool=10.0),
max_retries=2,
)
Kết hợp streaming để giảm read timeout cảm nhận
stream = client.chat.completions.create(model="claude-sonnet-4.5", stream=True, messages=msgs)
Lỗi 3: Sai base_url dẫn đến 404 Not Found
Triệu chứng 404 Not Found: model 'gpt-4.1' not found dù key hợp lệ. Nguyên nhân phổ biến nhất là dev để https://api.openai.com/v1 trong biến môi trường cũ. Cách khắc phục triệt để:
# .env
OPENAI_BASE_URL=https://api.holysheep.ai/v1
OPENAI_API_KEY=YOUR_HOLYSHEEP_API_KEY
Validate khi khởi động app
import os, sys
assert os.getenv("OPENAI_BASE_URL", "").endswith("/v1"), "Base URL sai"
assert "openai.com" not in os.getenv("OPENAI_BASE_URL", ""), "Không được trỏ thẳng OpenAI"
Ép fail-fast thay vì để lỗi 404 lan ra production
Lỗi 4: Tính TCO sai do quên chi phí prefix caching
Nhiều team tính giá theo input/output token mà bỏ qua phần cached token. DeepSeek V3.2 qua relay charge cached input chỉ $0,014/MTok thay vì $0,14. Bật cache_control trong system prompt giảm thêm 30% chi phí thực tế.
resp = client.chat.completions.create(
model="deepseek-v3.2",
messages=[
{"role": "system", "content": [
{"type": "text", "text": "Bạn là trợ lý tiếng Việt...",
"cache_control": {"type": "ephemeral"}}
]},
{"role": "user", "content": user_input},
],
)
Theo dõi resp.usage.cached_tokens để đối chiếu bill hàng tháng
Tóm lại, nếu team bạn chưa có kinh nghiệm vận hành cluster GPU, hoặc workload dao động mạnh theo mùa, API relay qua HolySheep là lựa chọn có TCO thấp nhất trong 12 tháng đầu. Còn nếu đã có SRE GPU và workload ổn định trên 3.000 RPS, vLLM tự host vẫn có lợi thế ở biên lâu dài — nhưng đừng quên cộng thêm chi phí cơ hội của 1 kỹ sư trực on-call.