Bỏ qua để đến nội dung
Search & RAG

5.10 Toán chi phí: API hay tự host

Trên mạng có rất nhiều bảng “chi phí reranker: API vs self-host”. Chúng tôi đã tìm nguồn sơ cấp cho chúng và không tìm được: mọi bảng như vậy dẫn về các bài blog tổng hợp không có phương pháp, không có nguồn. Nên mục này không dẫn lại bảng nào. Nó làm việc khác: dựng phép toán từ giá chính thức đã kiểm và số throughput đã đo, để bạn thay số của mình vào.

Bước 1 — Quy mọi cách tính tiền về một đơn vị

Phần tiêu đề “Bước 1 — Quy mọi cách tính tiền về một đơn vị”

Bốn nhà cung cấp tính tiền theo bốn cách, và chúng không so trực tiếp được:

Cách tínhAi dùngĐiều dễ bỏ sót
Theo “search / query”Cohere, Google, AWS BedrockMột query = tối đa 100 tài liệu. Vượt 100 → tính thành nhiều query
Theo tokenVoyage, ZeroEntropyCông thức không phải “tổng token tài liệu” — xem dưới
Theo giờ instanceModel Vault, tự host trên cloudTrả tiền cả lúc không ai truy vấn
Theo QPS/instanceSageMakerCần biết throughput thật của model

Công thức token của Voyage đáng chép ra vì nó phản trực giác — truy vấn được nhân lên theo số tài liệu:

token=(soˆˊ token của truy vaˆˊn×soˆˊ taˋi liệu)+tổng token của taˆˊt cả taˋi liệu\text{token} = \bigl(\text{số token của truy vấn} \times \text{số tài liệu}\bigr) + \text{tổng token của tất cả tài liệu}

Nghĩa là một truy vấn dài (ví dụ đã được rewrite hoặc có system context) tự nhân lên k lần. Với k = 100, mỗi token thêm vào truy vấn tốn bằng 100 token tài liệu. Đây là một lý do cụ thể để giữ truy vấn ngắn ở tầng rerank.

Giả định (thay bằng số của bạn):

k = 100 tài liệu / truy vấn
độ dài tài liệu = 200 token
độ dài truy vấn = 20 token

Tổng token theo công thức Voyage: (20 × 100) + (100 × 200) = 22.000 token/truy vấn.

Chi phí cho 1.000 truy vấn, dùng giá chính thức đã kiểm tháng 8/2026:

Lựa chọnGiá công bốChi phí / 1.000 truy vấn
ZeroEntropy zerank-2$0,025 / 1M token$0,55
Voyage rerank-2.5-lite$0,02 / 1M token$0,44
Voyage rerank-2.5$0,05 / 1M token$1,10
Google semantic-ranker-default-004$1,00 / 1.000 count$1,00
Cohere Rerank 3.5 (AWS Bedrock)$2,00 / 1.000 query$2,00

(Nguồn từng con số ở 5.8. Với 200 token/tài liệu, không đụng tới ngưỡng chia chunk 500 token của Cohere — nếu tài liệu của bạn dài hơn thế, chi phí Cohere nhân lên theo số chunk.)

Nhận xét đầu tiên, và nó làm nhiều người bất ngờ: ở quy mô này, rerank rất rẻ. Một triệu truy vấn/tháng với Voyage lite là khoảng $440. Nếu hệ thống của bạn gọi một LLM sau đó, chi phí rerank thường là phần nhỏ trong hoá đơn.

Bước 3 — Tự host: công thức, và con số làm bạn dừng lại

Phần tiêu đề “Bước 3 — Tự host: công thức, và con số làm bạn dừng lại”
chi phıˊ / 1.000 truy vaˆˊn=1000×kthoˆng lượng doc moˆ˜i giaˆy×G3600\text{chi phí / 1.000 truy vấn} = 1000 \times \frac{k}{\text{thông lượng doc mỗi giây}} \times \frac{G}{3600}

với G là giá GPU mỗi giờ.

Số throughput cần thay vào, và đây là số đo thật, công bố bởi tác giả model, trên A100 fp16 — đáng quý vì đo trên reranker tiếng Việt:

Modeldoc/giây (A100, fp16)NDCG@10 trên mMARCO-vi
PhoRanker (0,1B, max_len 256)150,7422
bge-reranker-v2-m3 (0,6B)3,510,6872
bge-reranker-v2-gemma1,290,6785

Thay vào công thức với k = 100:

ModelThời gian / truy vấnGiờ GPU / 1.000 truy vấn
PhoRanker100 / 15 = 6,7 s1,85 giờ
bge-reranker-v2-m3100 / 3,51 = 28,5 s7,9 giờ

Dừng lại ở đây một chút. 6,7 giây cho một truy vấn là con số không dùng được cho bất kỳ sản phẩm tương tác nào — và 1,85 giờ GPU cho 1.000 truy vấn thì đắt hơn mọi API trong bảng trên, với bất kỳ giá GPU nào thực tế.

Điều đó không có nghĩa là tự host luôn sai. Nó có nghĩa là:

Các con số throughput công bố là số của một luồng đơn, chưa tối ưu batch. Toàn bộ khoảng cách giữa “không dùng được” và “dùng được” nằm ở kỹ thuật phục vụ, không ở model.

Đó chính là nội dung 5.9: batch, xếp theo độ dài, fp16 trên GPU. Một điểm so sánh cho thấy khoảng cách đó lớn thế nào: một cross-encoder được distill rerank 100 đoạn trong khoảng 300 ms — nhanh hơn con số bảng trên khoảng 20 lần, và nhanh hơn một LLM reranker (~25–33 giây cho cùng việc) khoảng một trăm lần.

Bước 4 — Điểm hoà vốn, và cái bẫy thật của tự host

Phần tiêu đề “Bước 4 — Điểm hoà vốn, và cái bẫy thật của tự host”

Cấu trúc chi phí của hai lựa chọn khác nhau về bản chất:

API: chi phí ∝ số truy vấn (0 truy vấn = $0)
Tự host: chi phí ≈ HẰNG SỐ theo giờ (0 truy vấn = vẫn trả tiền GPU)

Nên điểm hoà vốn không phụ thuộc “cái nào rẻ hơn mỗi truy vấn”, mà phụ thuộc tỷ lệ sử dụng GPU của bạn:

hoaˋ voˆˊn khi:G×730 giờ/thaˊng=giaˊ API moˆ˜i 1.000×soˆˊ truy vaˆˊn thaˊng1000\text{hoà vốn khi:}\quad G \times 730\ \text{giờ/tháng} = \text{giá API mỗi 1.000} \times \frac{\text{số truy vấn tháng}}{1000}

Với G = $2/giờ (thay bằng giá thật của bạn) → $1.460/tháng → hoà vốn ở khoảng 1,3 triệu truy vấn/tháng so với Voyage rerank-2.5, tức khoảng 0,5 QPS liên tục, 24/7.

Và đây là cái bẫy: để đạt tới ngưỡng đó, GPU của bạn phải thật sự xử lý được 0,5 QPS ở k = 100. Với throughput chưa tối ưu ở bảng trên, một GPU không đạt nổi — nghĩa là bạn sẽ trả tiền cho nhiều GPU trước khi hoà vốn được một GPU.

Tình huốngNên
Lưu lượng thấp hoặc thất thườngAPI. Không có gì cạnh tranh được với việc trả $0 lúc rảnh
Lưu lượng cao, đều, đã tối ưu batchTự host, và đo lại thật
Dữ liệu không được ra khỏi hạ tầngTự host — đây là lý do đúng nhất, và nó không phải lý do chi phí
Cần model tiếng Việt riêng, đã fine-tuneTự host (không API nào phục vụ model của bạn)
Chưa biết QPS thật của mìnhAPI trước. Đo, rồi tính lại

Ba cách giảm chi phí không cần đổi model

Phần tiêu đề “Ba cách giảm chi phí không cần đổi model”

Xếp theo tỷ lệ lợi ích / công sức:

ĐònCơ chếGhi chú
Giảm kChi phí tuyến tính theo k, cả API lẫn tự hostNúm mạnh nhất. Và 5.13 cho thấy k nhỏ hơn có thể tốt hơn
Rerank có điều kiệnBỏ qua rerank cho truy vấn không cần (mã định danh, top-1 đã bỏ xa top-2)Cắt được phần đáng kể lưu lượng mà không mất chất lượng (5.11)
Chunk ngắn hơn, truy vấn ngắn hơnVới cách tính theo token, cả hai vào trực tiếp hoá đơn — và truy vấn bị nhân k lầnĐồng thời giảm latency do attention bậc hai (5.9)
Cache điểmTruy vấn lặp không trả tiền lần haiHiệu quả phụ thuộc hoàn toàn phân phối truy vấn của bạn. Đo, đừng đoán

Nên áp dụng vào AI Agent: bắt đầu bằng API và đo trong một tháng ba con số: số truy vấn thật, k thật, và độ dài chunk thật. Ba con số đó biến mục này thành một quyết định số học thay vì một cuộc tranh luận. Và nhớ so phần rerank với tổng hoá đơn — nếu nó chiếm 3% chi phí LLM thì tối ưu nó là tối ưu sai chỗ.

Phần 5 — Reranker