What it costs to run gpt-oss 120B (MoE)
Trying to decide what to buy? The best GPU for gpt-oss 120B (MoE) →
Cheapest way to rent it right now
$0.10/hr
NVIDIA L40S · Q2_K · spot · ≈ $25/mo at 8h/day
Live price captured Sun, 01 Nov 2026 00:20:10 GMT.Referral link — we may earn a commission at no cost to you; it never changes which card is cheapest.
Just want to use it? Per-token API
$0.05in·$0.25out
per 1M tokens · OpenAI GPT OSS 120B on Novita AI · read Oct 29, 2026
No GPU to manage: you pay per token, which suits occasional use. Your prompts run on Novita's servers, not your own machine.
Price as listed on Novita's pricing page on Oct 29, 2026; it may have changed. We may earn a commission at no cost to you.
Rent a GPU or pay per token?
A per-token API charges for every token, so it is cheapest when you use gpt-oss 120B (MoE) a little. A rented GPU charges by the hour whether it is busy or idle, so it only pays off once you push enough tokens through it. Set your daily volume and see where the line falls for this model, using the cheapest live rental that fits and that we have a memory-bandwidth figure for (L40S, Q2_K, $0.104/hr spot) and Novita AI's published rate.
- Pay per token · Novita AI$3.00/mo
$0.10/day · $0.10 per 1M tokens blended at 3:1
- Rent L40S · Vast.ai$3.13/mo
$0.10/day · 0.3 GPU-hours needed, 1 h minimum billed
At 1M tokens/day the API is cheaper. Below ~1M tokens/day the API is cheaper; above it, renting the L40S wins.
At a glance · 3:1 input:output
| Tokens/day | API /mo | Rent /mo |
|---|---|---|
| 100K | $0.30 | $3.13 |
| 1M | $3.00 | $3.13 |
| 10M | $30.00 | $9.32 |
| 100M | $300 | $93.19 |
Cheaper option in green. 30-day month. Break-even: ~1M tokens/day.
How we work it out. API cost = input tokens × $0.05 + output tokens × $0.25 per 1M. Rent cost = the hourly price × the GPU time needed, with at least 1 hour billed per day (spin-up, model load and idle time cost money too). GPU time assumes the L40S writes ~303 output tokens/sec for gpt-oss 120B (MoE) at Q2_K (our estimate: its 864 GB/s memory bandwidth from the spec sheet, not yet confirmed by a second source ÷ the bytes of weights read per token, × 75% efficiency, one request at a time) and reads prompt tokens 10× faster than it writes. Above 24 GPU-hours a day you would need more than one card.
These are estimates: the tokens/sec figure is our model, not a benchmark, and batching many requests (vLLM, SGLang) can raise a rented card's throughput a lot, which moves the break-even lower. Rental price captured Sun, 01 Nov 2026 00:20:10 GMT; it is a spot price, and spot machines can be interrupted. API price as listed by Novita AI on Oct 29, 2026; API prices change. Referral links: we may earn a commission at no cost to you, and it never changes which option the numbers favour.
Memory needed, by quantisation
At 16k context. Weights + KV cache + ~0.8 GB overhead.
| Quant | Weights | KV cache | Total | Quality |
|---|---|---|---|---|
| F16 | 217.6 GB | 1.1 GB | 219.5 GB | Full precision. Reference quality, twice the size of Q8 for no practical gain in most chat use. |
| Q8_0 | 115.6 GB | 1.1 GB | 117.5 GB | Effectively lossless. Use when VRAM is not the constraint. |
| Q6_K | 89.2 GB | 1.1 GB | 91.1 GB | Very close to Q8 at meaningfully less memory. A safe high-quality pick. |
| Q5_K_M | 77.3 GB | 1.1 GB | 79.2 GB | Small, hard-to-notice quality loss. Good balance. |
| Q5_0 | 75.3 GB | 1.1 GB | 77.3 GB | Older-style 5-bit. Q5_K_M is usually the better pick at the same size. |
| Q4_K_M | 66.0 GB | 1.1 GB | 67.9 GB | The community default. Best quality-per-gigabyte for most people. |
| Q4_0 | 61.9 GB | 1.1 GB | 63.8 GB | Older-style 4-bit, measurably worse than Q4_K_M at a similar size. Avoid unless required. |
| IQ4_XS | 57.8 GB | 1.1 GB | 59.7 GB | Newer 4-bit, smaller than Q4_K_M with comparable quality. Needs a recent llama.cpp. |
| Q3_K_M | 53.2 GB | 1.1 GB | 55.1 GB | Noticeable degradation. Use to fit a larger model that would otherwise not run. |
| Q2_K | 45.6 GB | 1.1 GB | 47.5 GB | Heavy degradation. Almost always better to run a smaller model at Q4_K_M instead. |
| IQ3_XS | 44.9 GB | 1.1 GB | 46.8 GB | Aggressive. Usually better than a smaller model at Q4, but test before trusting it. |
Cards that can run it
Best quantisation each card fits at 16k context, with live rental price where we track one.
| GPU | VRAM | Best fit | Uses | ~tok/s | Rent from |
|---|---|---|---|---|---|
| Apple M3 Ultra | 512 GB | F16 | 220 GB | — | — |
| Apple M2 Ultra | 192 GB | Q8_0 | 118 GB | — | — |
| Apple M4 Max (16-core CPU / 40-core GPU) | 128 GB | Q8_0tight | 118 GB | — | — |
| AMD Ryzen AI Max+ 395 (Strix Halo, 128 GB) | 128 GB | Q8_0tight | 118 GB | — | — |
| NVIDIA DGX Spark (GB10 Grace Blackwell) | 128 GB | Q8_0tight | 118 GB | — | — |
| NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition | 96 GB | Q6_Ktight | 91 GB | — | $1.590/hrLium |
| NVIDIA RTX PRO 6000 Blackwell Workstation Edition | 96 GB | Q6_Ktight | 91 GB | — | $2.000/hrLium |
| Apple M2 Max | 96 GB | Q6_Ktight | 91 GB | — | — |
| Apple M4 Pro | 64 GB | Q4_0tight | 64 GB | — | — |
| NVIDIA RTX 6000 Ada Generation | 48 GB | Q2_Ktight | 47 GB | — | $0.494/hrVast.ai |
| AMD Radeon PRO W7900 | 48 GB | Q2_Ktight | 47 GB | — | — |
| NVIDIA RTX A6000 | 48 GB | Q2_Ktight | 47 GB | — | $0.361/hrVast.ai |
How these numbers are produced
- Model shape comes from the model's own config.json — 36 layers, 64 attention heads, 8 KV heads.
- Weight size is parameters × effective bits-per-weight. Those constants are checked against real published quantised file sizes — median error 0.7% across 40 measurements.
- KV cache is 2 × layers × KV-heads × head-dim × context × 2 bytes. Using KV-heads rather than attention heads is what makes this correct for grouped-query attention; treating a GQA model as multi-head overstates the cache by up to 8×.
- Tokens/sec is an estimate, not a benchmark. Generation is memory-bandwidth-bound, so this is bandwidth ÷ weight-bytes derated to 75%. Real throughput depends on your runtime, batch size and kernels. We don't run our own hardware tests — see our editorial policy.
- This is a mixture-of-experts model. Generation reads only the experts active for each token (4 of 128), so throughput is scored on ~5.1B active parameters, not the full 117B. Memory is the opposite: every expert must still be resident in VRAM, so the figures above use the full weight set.Active = 5.1B, vendor figure: OpenAI model card (huggingface.co/openai/gpt-oss-120b, read 29 Oct 2026): "117B parameters with 5.1B active parameters". params = HF safetensors total. Also set in workers/prices/src/models.ts seeds so the daily ingest keeps it.
- Some memory-bandwidth figures are not yet independently verified.Where that's the case we show no tokens/sec at all rather than a number we can't stand behind.
- Rental prices are pulled hourly from provider APIs (last updated Sun, 01 Nov 2026 00:20:10 GMT). Spot/interruptible pricing can change or vanish without notice.
Try it interactively
Drag the context slider and watch the KV cache fill the card
Worth reading before you buy
Cheapest A100 80GB rental
Live A100 80GB prices cheapest-first, when the A100 beats an H100 on price-per-job, and the 70B-class workloads it's the sweet spot for.
Cheapest H100 rental
Live H100 prices across Vast and Runpod with the capture date, SXM vs PCIe, and the per-job maths for 70B–120B models.
H200 rental cost
141 GB is capacity, not speed — when the H200 premium over an H100 is worth paying, with live and published rates side by side.
What --n-cpu-moe actually does
The trick that makes MoE models 5× faster — except it usually makes them slower, and the famous speedup only happens when the model didn't fit in the first place.