GPU VPS hay API token: bao nhiêu token thì hòa vốn?
GPU VPS $0.50/giờ tương đương $365/tháng. Xem công thức và sản lượng output token hàng tháng để biết khi nào thuê GPU rẻ hơn tính phí API.
Điểm hòa vốn thực sự nằm ở đâu
GPU VPS vượt qua hình thức tính phí API theo token tại một điểm cụ thể: khi chi phí thuê cố định hằng tháng, chia cho số output token bạn thực sự tạo ra trong tháng đó, thấp hơn mức API tính cho cùng số token. Tiền thuê không thay đổi. Hóa đơn API thay đổi theo từng request. Vì vậy, câu trả lời luôn là một sản lượng hằng tháng cụ thể, không phải chỉ là có hoặc không.
Hãy tính với GPU VPS tầm trung có giá $0.50 mỗi giờ, tương đương $365 cho một tháng 730 giờ. So với API của một frontier model, bạn hòa vốn ở mức 24.3 triệu output token mỗi tháng. So với một commercial model nhỏ, mức này là 73 triệu. So với một hosted open-weight model cùng kích thước, bạn không bao giờ hòa vốn, vì một card không thể tạo đủ token trong một tháng để đạt điểm giao nhau.
Các nghiên cứu đã công bố về điểm hòa vốn không trả lời câu hỏi này. Một phân tích của vendor vào tháng 7 năm 2026 đặt điểm giao nhau ở gần mức sử dụng 50% đối với một H100 dedicated có giá $2.00 mỗi giờ, khi so với serverless inference. Những nghiên cứu như vậy so sánh một card tại data center được dành riêng với một sản phẩm serverless, đồng thời định giá accelerator cao hơn vài lần so với mức giá mỗi giờ được dùng ở đây. Phép tính vẫn giống nhau. Phần dưới đây tính lại cho một card, một open model trong khoảng 7B đến 30B và hình thức tính phí API theo mức sử dụng thông thường.
Mọi con số bên dưới đều là input, không phải kết quả. Hãy thay toàn bộ bằng số liệu của bạn.
Công thức để bạn thay số của mình
cost_per_million = (hourly_rate * 1000000) / (tokens_per_second * 3600 * duty_cycle)
breakeven_millions_per_month = (hourly_rate * hours_per_month) / api_price_per_million
capacity_millions_per_month = (tokens_per_second * 3600 * hours_per_month) / 1000000
required_duty_cycle = breakeven_millions_per_month / capacity_millions_per_monthCó 4 đầu vào và bạn có thể đo hoặc tra cứu cả 4.
hourly_ratelà chi phí mỗi giờ của GPU VPS, bao gồm cả những giờ máy không hoạt động. Nếu trả theo tháng, lấy giá tháng chia cho 730.tokens_per_secondlà tốc độ đầu ra tổng mà server duy trì ở mức concurrency thực tế của bạn. Đây không phải con số khi chạy một luồng duy nhất trong biểu đồ của nhà cung cấp.duty_cyclelà tỷ lệ thời gian trong tháng GPU thực sự dùng để tạo token. Một máy được thuê cả tháng nhưng chỉ dùng 2 giờ mỗi ngày có tỷ lệ này là 8.3%.api_price_per_millionlà giá đã đo mà bạn dùng để so sánh, tính cho output token.
Ví dụ này tính giá output token ở cả hai phía, vì output thường chiếm phần lớn chi phí khi chạy chat và agent. Nếu prompt của bạn dài, hãy cộng input vào cả hai phía. Ở phía API, khoản này xuất hiện thành một dòng riêng trên hóa đơn. Trên máy của bạn, prefill tiêu tốn thời gian GPU, nên đã được phản ánh trong tokens_per_second đo được thấp hơn.
Cách đo tokens mỗi giây trước khi tin vào phép tính
Mọi nội dung ở trên đều dựa trên một số liệu đã đo. Nếu đo sai 3 lần, kết quả cũng sai 3 lần. Hãy đo trên card bạn thuê, với model và quantisation mà bạn thực sự sẽ chạy.
Ollama cung cấp số liệu cho một stream trong một command:
ollama run qwen3:8b --verbose "Write 400 words about disk latency."--verbose in một khối timing sau khi trả lời. Dòng cần xem là eval rate, tính bằng tokens mỗi giây và chỉ tính giai đoạn generation. prompt eval rate là tốc độ prefill, thường cao hơn nhiều. Số liệu thực tế của bạn sẽ khác các số sau:
eval count: 412 token(s)
eval duration: 9.612s
eval rate: 42.86 tokens/sSingle stream không phải số liệu phù hợp để lập cost model, vì nó chỉ đo từng request một trên card có thể xử lý nhiều request cùng lúc. Để lấy số liệu aggregate, hãy serve model bằng vLLM và đọc throughput mà server báo cáo:
pip install vllm
vllm serve Qwen/Qwen3-8B --max-model-len 8192Trong khi các request đang được xử lý, server ghi một status line ở mỗi reporting interval. Các field cụ thể thay đổi giữa các bản release của vLLM, nên hãy đọc output của phiên bản bạn dùng thay vì dùng output của tôi:
Avg prompt throughput: 812.4 tokens/s, Avg generation throughput: 396.1 tokens/s, Running: 16 reqs, Waiting: 0 reqs, GPU KV cache usage: 21.7%Avg generation throughput là số mà công thức cần. Số này tăng khi bạn thêm các request chạy đồng thời, cho đến khi KV cache (key-value cache, trạng thái attention theo từng request mà vLLM giữ trong VRAM) đầy thì dừng tăng. Nếu vượt quá mức đó, request sẽ phải xếp hàng thay vì chạy nhanh hơn. Bạn sẽ thấy điều này qua số lượng Waiting tăng lên. vLLM cũng kèm một load generator là vllm bench serve. Các flag của tool này thay đổi giữa các phiên bản, nên hãy chạy vllm bench serve --help trên phiên bản bạn đã cài thay vì sao chép command từ một bài blog.
Hãy theo dõi card trong lúc chạy test:
nvidia-smi --query-gpu=utilization.gpu,memory.used,power.draw --format=csv -l 5Nếu utilization.gpu gần 100% trong giai đoạn generation, bạn đang bị giới hạn bởi throughput và số liệu đã đo là mức trần thực tế. Nếu chỉ số này duy trì ở mức thấp, giới hạn nằm ở nơi khác: có quá ít request chạy đồng thời, client chậm, hoặc model không vừa trong VRAM và đang được offload một phần sang system RAM. Ollama và vLLM có các đánh đổi rất khác nhau ở điểm này, và khoảng cách giữa chúng trên cùng một card đủ lớn để làm thay đổi điểm hòa vốn vài lần.
Chi phí trong một tháng
Ví dụ này dùng 1 GPU VPS 24 GB với giá $0.50 mỗi giờ, chạy một open model 8B bằng vLLM, đạt tổng cộng 400 output token mỗi giây với 16 request đồng thời. Chi phí thuê không đổi, dù bạn có dùng GPU hay không. Với tốc độ đó, công suất là 1,051 triệu output token mỗi tháng. Đây là lượng token GPU tạo ra nếu chạy liên tục.
Dữ liệu đằng sau biểu đồ này
[
{
"output_tokens_millions": 5,
"gpu_vps_usd": 365,
"open_api_usd": 1,
"small_api_usd": 25,
"frontier_api_usd": 75
},
{
"output_tokens_millions": 10,
"gpu_vps_usd": 365,
"open_api_usd": 2,
"small_api_usd": 50,
"frontier_api_usd": 150
},
{
"output_tokens_millions": 25,
"gpu_vps_usd": 365,
"open_api_usd": 5,
"small_api_usd": 125,
"frontier_api_usd": 375
},
{
"output_tokens_millions": 50,
"gpu_vps_usd": 365,
"open_api_usd": 10,
"small_api_usd": 250,
"frontier_api_usd": 750
},
{
"output_tokens_millions": 100,
"gpu_vps_usd": 365,
"open_api_usd": 20,
"small_api_usd": 500,
"frontier_api_usd": 1500
},
{
"output_tokens_millions": 250,
"gpu_vps_usd": 365,
"open_api_usd": 50,
"small_api_usd": 1250,
"frontier_api_usd": 3750
},
{
"output_tokens_millions": 500,
"gpu_vps_usd": 365,
"open_api_usd": 100,
"small_api_usd": 2500,
"frontier_api_usd": 7500
},
{
"output_tokens_millions": 1000,
"gpu_vps_usd": 365,
"open_api_usd": 200,
"small_api_usd": 5000,
"frontier_api_usd": 15000
}
]Chi phí GPU cố định ở mức 365 dollar vì giá thuê không phụ thuộc vào việc bạn sử dụng GPU như thế nào. Mỗi đường chi phí API là một đường thẳng đi qua điểm 0. Mỗi cặp chỉ giao nhau đúng một lần.
Ở mức 25 triệu output token mỗi tháng, frontier API có chi phí 375 dollar, nên hai phương án chênh nhau chưa đến mười dollar. Ở mức 50 triệu, small commercial model có chi phí 250 dollar và vẫn là lựa chọn rẻ hơn. Ở mức 1000 triệu output token, cần GPU hoạt động 95% thời gian trong tháng, hosted open-weight API có chi phí 200 dollar, so với cùng khoản thuê GPU. GPU VPS đắt gần gấp đôi ngay tại mức sản lượng mà nó được sử dụng nhiều nhất.
Kết quả cuối khiến nhiều người bất ngờ, nhưng đây không phải là điều ngẫu nhiên. Hosted open-weight endpoint là một GPU fleet được vận hành với utilisation cao, nên giá của nó gần với chi phí vận hành một GPU ở mức tải bão hòa. Bạn không thể rẻ hơn một fleet đã bão hòa bằng cách thuê một GPU riêng rồi chạy nó dưới tải tối đa. Điều bạn có thể rẻ hơn là frontier pricing, vì mức giá này phụ thuộc vào capability thay vì thời gian sử dụng silicon.
Chi phí cho mỗi triệu output token ở từng mức độ sử dụng
Sản lượng và mức độ sử dụng là cùng một thực tế nhìn từ hai phía. Tiền thuê mua số giờ. Những giờ nhàn rỗi không tạo ra gì nhưng vẫn tốn tiền.
Dữ liệu đằng sau biểu đồ này
[
{
"label": "100% duty",
"self_host_usd_per_million": "0.35",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
},
{
"label": "50% duty",
"self_host_usd_per_million": "0.69",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
},
{
"label": "25% duty",
"self_host_usd_per_million": "1.39",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
},
{
"label": "10% duty",
"self_host_usd_per_million": "3.47",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
},
{
"label": "5% duty",
"self_host_usd_per_million": "6.94",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
},
{
"label": "2% duty",
"self_host_usd_per_million": "17.36",
"open_api_usd_per_million": "0.20",
"small_api_usd_per_million": "5.00",
"frontier_api_usd_per_million": "15.00"
}
]Ba cột API là mức giá niêm yết điển hình được công bố tính đến tháng 8 năm 2026: 0.20 đô la cho mỗi triệu output token của một model open-weight 8B được host, 5.00 đô la cho một model thương mại nhỏ và 15.00 đô la cho một model frontier. Đây chỉ là các giá trị minh họa. Hãy kiểm tra trang giá hiện tại trước khi quyết định. Nếu bạn so sánh với gói thuê bao cố định theo tháng thay vì token tính theo mức sử dụng, cách tính thuê bao sẽ khác và điểm giao nhau cũng thay đổi.
Chạy card ở mức tối đa thì một triệu output token có giá 0.35 đô la, thực sự rất rẻ. Ở mức sử dụng 10%, cùng một triệu token có giá 3.47 đô la. Ở mức sử dụng 2%, chi phí là 17.36 đô la, không cùng mức với 0.20 đô la mà một model open được host tính cho cùng output.
So với một model open-weight được host, thuê GPU là lựa chọn đắt hơn ở mọi mức độ sử dụng trong biểu đồ. Ở mức 10%, bạn trả 3.47 đô la cho mỗi triệu token output, trong khi giá bán output đó là 0.20 đô la. Phần chênh lệch bạn mua được là quyền riêng tư và hóa đơn không thay đổi. Những lợi ích này có thể đáng giá. Nhưng đây không phải là lợi thế về giá, vì vậy đừng ghi nhận chúng như một lợi thế về giá. So với các gói thương mại, kết quả ngược lại: ở mức sử dụng 10%, card có giá thấp hơn cả model thương mại nhỏ và model frontier, đồng thời vẫn rẻ hơn gói frontier cho đến khi mức sử dụng giảm xuống khoảng 2.3%.
Sản lượng hòa vốn cho từng tier API
Dữ liệu đằng sau biểu đồ này
[
{
"label": "Hosted open 8B API",
"breakeven_tokens_millions": 1825,
"required_duty_pct": 174
},
{
"label": "Small commercial model",
"breakeven_tokens_millions": 73,
"required_duty_pct": 6.9
},
{
"label": "Frontier model",
"breakeven_tokens_millions": 24.3,
"required_duty_pct": 2.3
}
]So với tier frontier, bạn cần 24.3 triệu token output mỗi tháng, chỉ bằng 2.3% khả năng của card. Đây là ngưỡng thấp. Một team nhỏ chạy coding agent trong giờ làm việc là đạt được.
So với tier thương mại nhỏ, bạn cần 73 triệu token mỗi tháng, tương đương 6.9% duty cycle. So với tier open-weight được host, duty cycle cần thiết là 174%. Mọi giá trị trên 100% đều không thể đạt theo định nghĩa: card sẽ phải chạy nhiều giờ hơn số giờ có trong một tháng. Một card tầm trung với mức giá theo giờ này không thể thắng trong phép so sánh đó. Vì vậy, chỉ có thể thay đổi kết quả bằng card rẻ hơn, card nhanh hơn hoặc một lý do không liên quan đến giá.
Những gì công thức không thể hiện
Công thức tính chi phí giờ GPU và token. Một số chi phí thực tế nằm ngoài công thức này.
Khởi động lạnh. Một model 8B với trọng số 16-bit chiếm khoảng 16 GB, và việc tải model từ disk cục bộ vào VRAM mất hàng chục giây. Nếu dừng máy giữa các lần sử dụng để tiết kiệm chi phí thuê, bạn sẽ phải chờ khoảng thời gian đó trước request đầu tiên mỗi lần. Nếu để máy chạy để tránh thời gian chờ, duty cycle sẽ giảm mạnh, làm tăng chi phí trên mỗi token. Đây chính là lý do serverless inference tồn tại.
Storage và download. Trọng số có dung lượng lớn. Model 8B ở 16-bit chiếm khoảng 16 GB, model 30B được quantise xuống 4-bit chiếm khoảng 18 GB, còn model 30B ở 16-bit hoàn toàn không vừa trên card 24 GB. Giới hạn này nhanh chóng trở nên rõ rệt ở phân khúc lớn nhất. Khi đó, chạy một open model có một nghìn tỷ tham số như Kimi K3 khiến riêng phần trọng số đã lớn hơn dung lượng của mọi card đơn lẻ mà bạn có thể thuê theo giờ. Bạn phải trả tiền cho disk đó mỗi tháng, đồng thời mất thời gian cho mỗi lần dựng lại môi trường. Chạy du -sh ~/.cache/huggingface/hub sau một tuần thử nghiệm. Dung lượng tăng nhanh hơn bạn nghĩ vì mọi bản quantisation bạn từng thử vẫn còn nằm đó.
Thời gian của bạn. Phiên bản driver và CUDA, lỗi out-of-memory ở context length mà hôm qua vẫn chạy được, hoặc một bản cập nhật model làm thay đổi chat template. Không khoản nào xuất hiện trong chỉ số chi phí trên mỗi token, nhưng tất cả đều lấy đi thời gian buổi tối của bạn. Nếu trước đây bạn chưa sizing một máy như vậy, GPU VPS thực sự cung cấp những gì là nội dung đáng đọc trước khi cam kết thuê một tháng.
Khoảng cách chất lượng. Đây là chi phí ẩn lớn nhất và khó định giá nhất. Một open model 8B không phải là frontier model. Nếu nó cần 3 lần thử trong khi frontier model chỉ cần 1 lần, giá thực tế trên mỗi câu trả lời hữu ích cao gấp 3 lần giá trị trên biểu đồ, và model vẫn có thể không hoàn thành được task. Hãy so sánh trên chính các prompt của bạn trước khi so sánh giá. Với workload của agent, cách làm thông thường là định tuyến theo độ khó và giữ token local giá rẻ cho các tác vụ số lượng lớn. Phần lớn việc kiểm soát chi phí agent trên VPS là như vậy.
Khoản billing bạn quên. Một GPU instance tính theo giờ dù đã dừng thường vẫn tiếp tục tính phí cho storage gắn kèm và IP address đã reserve. Hãy đọc invoice, không chỉ xem trang giá.
Khi self-hosting có lợi thế ngoài yếu tố chi phí
Bốn trường hợp mà phép tính chi phí không phải yếu tố quyết định.
- Dữ liệu không được phép rời khỏi quyền kiểm soát của bạn. Nếu quy định compliance cấm gửi văn bản cho bên thứ ba, giá trên mỗi token không phải vấn đề cần xem xét.
- Khối lượng cao và ổn định theo lịch. Một batch classification job chạy sáu giờ mỗi đêm mặc định đã có duty cycle 25%, và chi phí không bao giờ gây bất ngờ.
- Rate limit. Card của bạn chỉ có một queue và queue đó thuộc về bạn.
- Một model không có API nào cung cấp. Nếu bạn cần một fine-tune cụ thể, không có lựa chọn nào để so sánh.
Nếu muốn thử phiên bản rẻ trước, chạy một model nhỏ trên VPS bằng Ollama chỉ mất một buổi chiều, còn đối chiếu kích thước model open với card bạn định thuê sẽ cho biết GPU thực sự cần dùng. Hãy đo trước khi đăng ký thuê GPU trong một tháng.
FAQ
Với lưu lượng token hàng tháng ở mức nào thì GPU VPS có chi phí thấp hơn API?
Lấy chi phí thuê GPU mỗi tháng chia cho giá API trên mỗi triệu output token. Một card có giá thuê 365 USD mỗi tháng, so với frontier API ở mức 15.00 USD trên mỗi triệu token, sẽ hòa vốn tại 24.3 triệu output token mỗi tháng. So với một model thương mại nhỏ có giá 5.00 USD, mức hòa vốn là 73 triệu token. So với hosted open-weight model có giá 0.20 USD, một card tầm trung không thể tạo đủ token trong một tháng để hòa vốn.
Vì sao hosted open-weight API có chi phí thấp hơn GPU của tôi?
Vì giá của dịch vụ này được đặt gần với chi phí vận hành GPU ở mức tải đầy đủ, còn card của bạn không chạy ở mức tải đó. Nhà cung cấp phục vụ hàng nghìn request đồng thời có thể giữ fleet gần mức bão hòa, nên bán token gần với chi phí biên để tạo ra chúng. Card của bạn không hoạt động trong phần lớn thời gian trong ngày, nhưng bạn vẫn trả tiền cho những giờ nhàn rỗi đó. Ở duty cycle 10%, chi phí của bạn là 3.47 USD trên mỗi triệu output token, so với 0.20 USD của họ.
Tôi có nên tính cả input token và output token không?
Hãy tính nếu prompt của bạn dài. Phép so sánh ở đây chỉ dùng output token, vì đây là yếu tố chi phí chính trong chat và tác vụ agent. Thêm input token sẽ thay đổi cả hai phía. Ở phía API, input token là một dòng riêng trên hóa đơn và có giá thấp hơn. Trên card của bạn, prefill tiêu tốn thời gian GPU, nên chi phí này đã nằm trong tổng số token mỗi giây mà bạn đo được. Hãy đo bằng độ dài prompt thực tế của bạn để hai phía vẫn có thể so sánh.
Tôi đo số token mỗi giây mà công thức cần như thế nào?
Hãy serve model theo đúng cách bạn sẽ sử dụng, rồi đọc tốc độ sinh tổng hợp khi có concurrency thực tế. Với Ollama, ollama run <model> --verbose in ra eval rate tính bằng token mỗi giây, nhưng đây chỉ là một stream nên đánh giá thấp server xử lý theo batch. Với vLLM, log của server đang chạy ghi Avg generation throughput khi request đang được xử lý; đó là giá trị cần dùng. Đồng thời theo dõi nvidia-smi. Nếu GPU utilisation chưa gần 100% trong lúc generation, bạn vẫn chưa tìm được giới hạn hiệu năng.
Có đáng thuê GPU VPS khi utilisation dưới 10% không?
Điều này phụ thuộc vào API mà nếu không thuê GPU, bạn sẽ phải trả tiền. Ở duty cycle 10%, bạn trả 3.47 USD trên mỗi triệu output token. Mức này thấp hơn cả tier thương mại nhỏ và frontier tier, nhưng cao hơn nhiều so với hosted open-weight tier. Ở mức 2%, bạn trả 17.36 USD. Mức này cao hơn mọi API tính phí theo lưu lượng trong phép so sánh này, kể cả frontier tier. Chỉ xét về giá, card bắt đầu có lợi thế ở khoảng 6.9% duty cycle so với tier thương mại nhỏ và khoảng 2.3% so với frontier tier. Card không bao giờ có lợi thế so với hosted open weights. Chỉ nên thuê dưới các ngưỡng đó khi bạn đang trả tiền cho quyền riêng tư hoặc một model mà không API nào cung cấp.