SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor

GPU VPS чи API: коли оренда стає вигіднішою

Дізнайтеся формулу точки беззбитковості та місячний обсяг токенів, за якого GPU VPS за $0.50 на годину дешевший за оплату API за токени.

Де насправді знаходиться точка беззбитковості

GPU VPS вигідніший за API з оплатою за токени в один момент: коли фіксована місячна орендна плата, поділена на кількість згенерованих за місяць вихідних токенів, стає меншою за вартість таких самих токенів через API. Орендна плата не змінюється. Рахунок API змінюється з кожним запитом. Тому відповідь завжди залежить від місячного обсягу, а не є простою відповіддю «так» чи «ні».

Виконаємо розрахунок для GPU VPS середнього рівня за ціною $0.50 на годину, що становить $365 за місяць із 730 годин. У порівнянні з API передових моделей ви досягаєте точки беззбитковості на рівні 24.3 мільйонів вихідних токенів на місяць. У порівнянні з невеликою комерційною моделлю це 73 мільйонів. У порівнянні з хостингом open-weight моделі такого ж розміру ви ніколи не досягнете беззбитковості, оскільки одна карта не може згенерувати достатньо токенів за місяць, щоб дійти до точки перетину.

Опубліковані дослідження беззбитковості не дають відповіді на це питання. Один аналіз від постачальника за липень 2026 року визначає точку перетину біля 50% завантаження для виділеного H100 за ціною $2.00 на годину порівняно з serverless-інференсом. Подібні дослідження порівнюють виділену карту дата-центру з serverless-продуктом, і вони оцінюють прискорювачі в кілька разів дорожче за погодинну ставку, використану тут. Арифметика ідентична. Нижче наведено перерахунок для однієї карти, однієї open model у діапазоні від 7B до 30B і звичайної оплати API за фактичне використання токенів.

Кожне число нижче є вхідним параметром, а не результатом. Замініть їх на власні значення.

Формула, у яку можна підставити власні значення

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_month

Є чотири вхідні параметри. Усі чотири можна виміряти або знайти в документації.

  • hourly_rate — вартість GPU VPS за годину з урахуванням годин простою. Якщо ви платите щомісяця, поділіть місячну ціну на 730.
  • tokens_per_second — сукупна швидкість генерації, яку сервер забезпечує за вашого фактичного рівня паралельності. Це не показник для одного потоку з графіка постачальника.
  • duty_cycle — частка місяця, протягом якої GPU генерує токени. Сервер, орендований на весь місяць і використовуваний дві години на день, має показник 8.3%.
  • api_price_per_million — тариф за токени виведення, з яким ви порівнюєте витрати.

У прикладі вартість токенів виведення порівнюється з обох сторін, оскільки для чатів і роботи агентів саме виведення формує більшу частину рахунку. Якщо ваші запити довгі, додайте вхідні токени з обох сторін. На стороні API це буде окремий рядок у рахунку. На власній картці попереднє заповнення контексту споживає час GPU, тому це вже відображається як нижче виміряне значення tokens_per_second.

Як виміряти кількість токенів за секунду, перш ніж довіряти розрахункам

Усе наведене вище ґрунтується на одному виміряному числі. Якщо помилитися в ньому втричі, відповідь також буде неправильною втричі. Вимірюйте його на карті, яку орендуєте, використовуючи модель і квантизацію, з якими справді працюватимете.

Ollama показує значення для одного потоку однією командою:

ollama run qwen3:8b --verbose "Write 400 words about disk latency."

--verbose виводить блок із показниками часу після відповіді. Важливим є рядок eval rate — кількість токенів за секунду, що враховує лише генерацію. prompt eval rate — швидкість prefill, яка зазвичай значно вища. Ваші значення відрізнятимуться від наведених:

eval count:       412 token(s)
eval duration:    9.612s
eval rate:        42.86 tokens/s

Один потік — неправильне значення для моделі витрат, оскільки він вимірює оброблення одного запиту за раз на карті, яка може обслуговувати багато запитів одночасно. Щоб отримати сукупне значення, запустіть модель через vLLM і прочитайте пропускну здатність, яку сервер повідомляє для себе:

pip install vllm
vllm serve Qwen/Qwen3-8B --max-model-len 8192

Поки запити обробляються, сервер через кожен інтервал звітування записує рядок стану в журнал. Точні поля змінюються між релізами vLLM, тому орієнтуйтеся на власний вивід, а не на мій:

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 — це значення, потрібне формулі. Воно зростає, коли ви додаєте одночасні запити, доки кеш KV (key-value cache, стан attention для кожного запиту, який vLLM зберігає у VRAM) не заповниться, після чого перестає зростати. Якщо перевищити цей рівень, запити стають у чергу, а не обробляються швидше. Це видно за зростанням лічильника Waiting. vLLM також постачається з генератором навантаження vllm bench serve. Його прапорці змінюються між версіями, тому виконайте vllm bench serve --help для встановленої версії, а не копіюйте команду з допису в блозі.

Спостерігайте за картою під час тестування:

nvidia-smi --query-gpu=utilization.gpu,memory.used,power.draw --format=csv -l 5

Якщо utilization.gpu під час генерації тримається близько 100%, ви обмежені пропускною здатністю, і виміряне значення є фактичною верхньою межею. Якщо цей показник залишається низьким, обмеженням є щось інше: недостатня кількість одночасних запитів, повільний клієнт або модель, яка не вміщується у VRAM і частково вивантажується в системну RAM. Ollama і vLLM мають тут дуже різні компроміси, а різниця між ними на одній карті достатньо велика, щоб змінити точку беззбитковості в кілька разів.

Який вигляд має рахунок за місяць

У прикладі розглядається один GPU VPS із 24 GB GPU за $0.50 на годину та відкрита модель 8B, яку обслуговує vLLM. Сукупна швидкість становить 400 вихідних токенів на секунду за 16 одночасних запитів. Орендна плата фіксована незалежно від того, використовуєте ви GPU чи ні. За такої швидкості за місяць можна обробити 1,051 мільйона вихідних токенів. Саме стільки виробляє GPU, якщо працює безперервно.

ГрафікMonthly cost by output volume: one GPU VPS at $0.50 per hour against metered APIs (USD)
Дані, на яких побудовано графік
[
  {
    "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
  }
]

Витрати на GPU становлять постійні 365 доларів, оскільки орендна плата не залежить від того, як ви використовуєте GPU. Кожна лінія API є прямою, що проходить через нуль. Кожна пара ліній перетинається рівно один раз.

За 25 мільйонів вихідних токенів на місяць рахунок за frontier API становить 375 доларів, тому різниця між двома варіантами не перевищує десяти доларів. За 50 мільйонів токенів рахунок за малу комерційну модель становить 250 доларів, і цей варіант усе ще дешевший. За 1000 мільйонів вихідних токенів, для чого GPU має бути зайнятий 95% місяця, рахунок за hosted API з відкритими вагами становить 200 доларів, тоді як орендна плата залишається такою самою. GPU програє майже вдвічі саме за обсягу, за якого працює найінтенсивніше.

Останній результат дивує багатьох, але він закономірний. Hosted endpoint із відкритими вагами працює на GPU-флоті з високою утилізацією, тому його ціна близька до вартості повністю завантаженого GPU. Неможливо перевершити за вартістю повністю завантажений флот, орендуючи один GPU і використовуючи його не на повну потужність. Натомість можна перевершити ціни frontier-моделей, які визначаються їхніми можливостями, а не часом роботи GPU.

Вартість мільйона вихідних токенів за кожного коефіцієнта завантаження

Обсяг і коефіцієнт завантаження — це один і той самий показник, розглянутий з двох боків. Оренда оплачує час роботи. Час простою не дає результату, але все одно коштує грошей.

ГрафікCost per million output tokens at each duty cycle (USD, list prices August 2026)
Дані, на яких побудовано графік
[
  {
    "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"
  }
]

Три стовпці API містять типові опубліковані роздрібні ціни станом на August 2026: 0.20 доларів за мільйон вихідних токенів для hosted 8B open-weight model, 5.00 доларів для small commercial model і 15.00 доларів для frontier model. Це лише приклади. Перед ухваленням рішення перевірте актуальну сторінку з цінами. Якщо ви порівнюєте з фіксованим місячним планом, а не з оплатою за кількість токенів, арифметика підписки працює інакше, тому точка перетину знову зміщується.

Якщо запустити відеокарту на повній потужності, мільйон вихідних токенів коштуватиме 0.35 доларів, що справді дешево. За коефіцієнта завантаження 10% той самий мільйон коштує 3.47 доларів. За коефіцієнта завантаження 2% вартість становить 17.36 доларів. Це вже не той самий діапазон, що й 0.20 доларів, які hosted open model стягує за ідентичний результат.

Порівняно з hosted open-weight model оренда GPU є дорожчим варіантом за будь-якого коефіцієнта завантаження, показаного на графіку. За 10% ви платите 3.47 доларів за мільйон токенів, тоді як hosted open model продає такий результат за 0.20 доларів. Різниця фактично купує вам приватність і передбачуваний рахунок. Вони можуть мати реальну цінність. Але це не виграш у ціні, тому не вважайте його таким. Порівняно з комерційними рівнями ситуація протилежна: за коефіцієнта завантаження 10% відеокарта дешевша і за small commercial, і за frontier price. Вона залишається дешевшою за frontier tier, доки коефіцієнт завантаження не знизиться приблизно до 2.3%.

Місячний обсяг API для беззбитковості на кожному рівні

ГрафікBreak-even output volume per month, and the duty cycle it requires
Дані, на яких побудовано графік
[
  {
    "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
  }
]

Порівняно з frontier-рівнем вам потрібно 24.3 мільйона вихідних токенів на місяць. Це лише 2.3% від продуктивності, яку може забезпечити карта. Це невисокий поріг. Невелика команда, яка протягом робочого дня використовує coding agents, його перевищить.

Порівняно з малим комерційним рівнем вам потрібно 73 мільйона токенів на місяць, або 6.9% завантаження. Для hosted open-weight рівня потрібне завантаження 174%. Значення понад 100% недосяжне за визначенням: карта мала б працювати більше годин, ніж містить місяць. Одна карта середнього класу за такої погодинної ставки не може виграти в цьому порівнянні. Тому змінити результат можна лише дешевшою картою, швидшою картою або причиною, не пов’язаною з ціною.

Що приховує формула

Формула враховує години роботи GPU і токени. Деякі реальні витрати до неї не входять.

Холодний запуск. Модель 8B із вагами у 16-бітному форматі займає приблизно 16 GB, а її завантаження з локального диска у VRAM триває десятки секунд. Якщо зупиняти інстанс між використаннями, щоб заощадити на оренді, цей час очікування виникатиме під час першого запиту щоразу. Якщо залишати інстанс увімкненим, щоб уникнути очікування, коефіцієнт використання різко зменшується, а вартість одного токена зростає. Саме цей компроміс є головною причиною існування serverless inference.

Сховище та завантаження. Ваги моделей займають багато місця. Модель 8B у 16-бітному форматі займає приблизно 16 GB, модель 30B, квантизована до 4 біт, — приблизно 18 GB, а модель 30B у 16-бітному форматі взагалі не вміщується на карті обсягом 24 GB. На верхньому рівні масштабування обмеження швидко стають очевидними: запуск open model із трильйоном параметрів, як-от Kimi K3, означає, що самі ваги перевищують обсяг будь-якої окремої карти, яку можна орендувати погодинно. За цей диск ви платите щомісяця, а під час кожного повторного розгортання витрачаєте час на завантаження. Запустіть du -sh ~/.cache/huggingface/hub після тижня експериментів. Він зростає швидше, ніж можна очікувати, тому що кожна квантизація, яку ви випробували хоча б один раз, усе ще зберігається на диску.

Ваш власний час. Версії драйверів і CUDA, помилки нестачі пам’яті під час використання довжини контексту, яка вчора працювала, оновлення моделі, що змінює chat template. Ніщо з цього не відображається у показнику вартості одного токена, але за все це ви платите своїми вечорами. Якщо ви раніше не підбирали конфігурацію такого інстансу, перед орендою на місяць варто прочитати, що насправді дає GPU VPS.

Різниця в якості. Це найбільша прихована витрата, яку найскладніше оцінити. Open model 8B — не frontier model. Якщо їй потрібно три спроби там, де frontier model достатньо однієї, її реальна ціна за корисну відповідь утричі вища за значення на графіку, а саме завдання все одно може завершитися невдало. Порівнюйте моделі на власних запитах, перш ніж порівнювати їх за ціною. Для agent workloads зазвичай використовують маршрутизацію за складністю та залишають дешеві локальні токени для масових операцій. Саме до цього переважно зводиться контроль витрат агентів на VPS.

Платежі, про які ви забули. Погодинний GPU instance, який ви зупинили, часто й далі списує кошти за підключене сховище та зарезервовану IP-адресу. Перевіряйте рахунок, а не сторінку з цінами.

Коли self-hosting виграє не через ціну

Чотири випадки, де арифметика не є вирішальним фактором.

  • Дані, які не можуть залишати ваш контроль. Якщо правила відповідності забороняють передачу тексту третій стороні, питання ціни за токен не є актуальним.
  • Стабільний високий обсяг за розкладом. Завдання з пакетної класифікації, що виконується шість годин щоночі, має 25% робочий цикл за своєю структурою і ніколи не створює несподіваних рахунків.
  • Ліміти запитів (rate limits). Ваша власна карта має одну чергу, і вона належить вам.
  • Модель, яку не пропонує жоден API. Якщо вам потрібен специфічний fine-tune, порівнювати немає з чим.

Якщо ви хочете спочатку протестувати дешевий варіант, запуск невеликої моделі на VPS за допомогою Ollama займе один пообідній час, а підбір розміру open model під карту, яку ви плануєте орендувати підкаже, який саме GPU вам потрібен. Проведіть вимірювання там, перш ніж оформлювати оренду GPU на місяць.

FAQ

За якого щомісячного обсягу токенів GPU VPS стає вигіднішим за API?

Розділіть щомісячну вартість GPU на ціну API за мільйон вихідних токенів. Відеокарта за $365 на місяць порівняно з frontier API за 15.00 доларів за мільйон вихідних токенів виходить на рівень беззбитковості за 24.3 мільйона вихідних токенів на місяць. Для невеликої комерційної моделі за 5.00 доларів це 73 мільйона. Для hosted open-weight моделі за 0.20 доларів одна відеокарта середнього класу взагалі не може згенерувати за місяць достатньо токенів для виходу на беззбитковість.

Чому hosted open-weight API коштує дешевше, ніж власний GPU?

Тому що його ціну встановлено близько до вартості повністю завантаженого GPU, а ваша відеокарта не працює з повним завантаженням. Провайдер, який обслуговує тисячі одночасних запитів, підтримує свій парк близько до насичення, тому може продавати токени майже за граничною собівартістю їх генерації. Ваша відеокарта більшу частину дня простоює, але ви платите і за години простою. За duty cycle 10% ваша вартість становить 3.47 доларів за мільйон вихідних токенів проти 0.20 доларів у провайдера.

Чи потрібно враховувати вхідні токени разом із вихідними?

Враховуйте їх, якщо ваші промпти довгі. У цьому порівнянні використовуються лише вихідні токени, оскільки саме вони є основною складовою для чатів і роботи агентів. Додавання вхідних токенів змінює обидві сторони порівняння. На боці API це окрема, дешевша позиція у рахунку. На власній відеокарті prefill споживає GPU time, тому його вартість уже входить у виміряну сумарну швидкість генерації токенів за секунду. Виконуйте вимірювання з реальними довжинами промптів, щоб обидві сторони залишалися порівнюваними.

Як виміряти кількість токенів за секунду, потрібну для формули?

Запускайте модель так, як ви плануєте її використовувати, а потім зчитайте сумарну швидкість генерації за реальної одночасної роботи запитів. В Ollama ollama run <model> --verbose виводить eval rate у токенах за секунду, але це один потік, тому показник буде нижчим, ніж на сервері з пакетною обробкою. У vLLM сервер, що працює, записує в журнал Avg generation throughput, поки запити виконуються; саме це значення потрібно використовувати. Одночасно контролюйте nvidia-smi. Якщо під час генерації завантаження GPU не наближається до 100%, граничної продуктивності ще не досягнуто.

Чи варто орендувати GPU VPS за завантаження нижче 10%?

Це залежить від API, за яке ви інакше платили б. За duty cycle 10% ви платите 3.47 доларів за мільйон вихідних токенів. Це менше, ніж у невеликого комерційного та frontier рівнів, але значно більше, ніж у hosted open-weight рівня. За 2% ви платите 17.36 доларів. Це більше, ніж у кожного API з оплатою за використання в цьому порівнянні, зокрема й у frontier рівня. Якщо враховувати лише ціну, відеокарта перестає бути вигіднішою приблизно за 6.9% duty cycle порівняно з невеликим комерційним рівнем і приблизно за 2.3% порівняно з frontier рівнем. Для hosted open-weight моделей вона не стає вигіднішою за жодного duty cycle. Орендуйте GPU нижче цих значень лише тоді, коли ви платите за приватність або за модель, якої немає в жодному API.