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 mức tính phí API theo token tại một điểm: 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 trên một GPU VPS tầm trung với 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 hòa vốn đã công bố không trả lời câu hỏi này. Hai nghiên cứu từ đầu năm 2026 ước tính điểm giao nhau ở mức gần 72% mức sử dụng liên tục trên H200, và từ 22% đến 48% duty cycle trên MI300X. Cả hai đều so sánh với serverless product của chính vendor đó, đồng thời tính giá các accelerator có chi phí mỗi giờ cao hơn số tiền hầu hết người đọc ở đây chi cho một tháng. 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à cách tính phí API thông thường theo usage.
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.
The data behind this chart
[
{
"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 duty cycle
Volume và duty cycle là cùng một thực tế được nhìn từ hai phía. Bạn thuê GPU theo số giờ. Những giờ idle không tạo ra output nhưng vẫn tốn tiền.
The data behind this chart
[
{
"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ố vào 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 tháng cố định thay vì token tính theo usage, cách tính subscription sẽ khác và điểm giao nhau sẽ tiếp tục thay đổi.
Chạy card hết công suất thì một triệu output token có giá 0.35 đô la, thực sự rẻ. Ở duty cycle 10%, cùng một triệu token có giá 3.47 đô la. Ở duty cycle 2%, chi phí là 17.36 đô la. Mức này không cùng phân khúc với 0.20 đô la mà một hosted open model tính cho cùng lượng output.
Ở duty cycle dưới khoảng 10%, thuê GPU là lựa chọn đắt hơn. Bạn trả 3.47 đô la cho mỗi triệu token, trong khi output tương tự chỉ có giá 0.20 đô la trên hosted open model. Phần chênh lệch bạn mua được là privacy và một hóa đơn không thay đổi. Những yếu tố đó có thể đáng giá. Nhưng chúng không giúp giảm giá, vì vậy đừng xem chúng là một lợi thế về chi phí.
Sản lượng hòa vốn cho từng tier API
The data behind this chart
[
{
"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
GPU VPS cần đạt sản lượng token hàng tháng bao nhiêu thì rẻ hơn giá API?
Lấy chi phí GPU hàng 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 cho mỗi triệu token, sẽ hòa vốn ở mức 24.3 triệu output token mỗi tháng. So với một model thương mại nhỏ ở mức 5.00 USD, mức hòa vốn là 73 triệu token. So với hosted open-weight model ở mức 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 rẻ hơn GPU của tôi?
Vì giá của dịch vụ được đặt gần với chi phí của một GPU được khai thác đầy tải, còn card của bạn không được khai thác đầy tải. Provider 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 token đó. 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 cho mỗi triệu output token, so với 0.20 USD của họ.
Có nên tính cả input token và output token không?
Nếu prompt dài, hãy tính cả input token. Phần so sánh ở đây chỉ dùng output token, vì đây là thành phần chi phí chính của chat và agent. Khi thêm input token, cả hai phía đều thay đổi. Ở phía API, input token là một dòng riêng với đơn giá thấp hơn trên hóa đơ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ế; khi đó hai phía vẫn có thể so sánh trực tiếp.
Đo tokens per second 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, sau đó đọc generation rate 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 chạy theo batch. Với vLLM, server đang chạy ghi log Avg generation throughput trong khi các request đang được xử lý; đó là con số 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?
Không, nếu chỉ xét về giá. Ở duty cycle 10%, bạn trả 3.47 USD cho mỗi triệu output token; ở mức 2%, chi phí là 17.36 USD. Cả hai đều cao hơn mọi API tính phí theo mức sử dụng trong phần so sánh này, ngoại trừ frontier tier. Chỉ thuê dưới ngưỡng đó khi thứ bạn cần trả tiền cho là privacy hoặc một model không có API.