Когда ваш GPU стоит дороже, чем ваша модель
Вы тренировали модель неделями. Или скачали готовую с Hugging Face. Теперь её нужно запустить. И тут вы сталкиваетесь с шоком: аренда GPU, на которой модель будет работать, обойдётся вам в 5-10 раз дороже, чем все предыдущие этапы. Это не ошибка — это реальность облачных провайдеров.
Я видел проекты, где команда тратила $200 на обучение модели, а потом платила по $2000 в месяц за её инференс. Абсурд? Да. Но исправимо.
Главное заблуждение: думать, что GPU-провайдеры — это просто "аренда видеокарт". На самом деле вы платите за три вещи: вычислительную мощность, доступность (uptime) и, что самое дорогое, — привязанность к их экосистеме.
Hyperstack vs Runpod: битва за каждый цент
Возьмём два популярных провайдера для инди-разработчиков и посмотрим, где собака зарыта. Не в рекламных тарифах, а в реальных сценариях использования.
| Параметр | Hyperstack | Runpod | Что это значит для вас |
|---|---|---|---|
| RTX 4090 (час) | $0.79 | $0.89 | Разница в 12% — за месяц набегает $72 |
| Хранение данных | $0.10/GB в месяц | Бесплатно | Для модели на 70GB это $7 ежемесячно |
| Трафик на выход | Бесплатно | $0.10/GB после 1TB | Если ваш сервис популярен — счёт придёт неожиданно |
| Минимальный платёж | $5 | Нет | Hyperstack требует депозит, Runpod — нет |
Кажется, что Hyperstack дешевле? Не спешите. Бесплатное хранение у Runpod — это ловушка для тех, кто не читает мелкий шрифт. Ваши модели хранятся на SSD, которые привязаны к конкретным датацентрам. Хотите запустить инстанс в Европе, а модель лежит в США? Платите $0.02/GB за трансфер между регионами. Или ждите 40 минут, пока 70GB модели переедут через океан.
Секретное оружие: отделяем хранение от вычислений
Вот где начинается реальная экономия. GPU-провайдеры зарабатывают на том, что вы храните данные у них. А что если этого не делать?
1 Выбираем объектное хранилище: Cloudflare R2 vs Wasabi vs AWS S3
Объектные хранилища в 5-10 раз дешевле, чем SSD у GPU-провайдеров. Сравним три варианта:
- Cloudflare R2 — $0.015/GB в месяц, нулевая плата за исходящий трафик. Да, вы не ослышались: скачивайте свои модели сколько угодно. Но есть лимит операций в день.
- Wasabi — $0.0069/GB, минимальный счёт $6 в месяц. Трафик бесплатный, но данные нельзя удалять раньше 90 дней (иначе штраф).
- AWS S3 Glacier Deep Archive — $0.00099/GB. Дешевле не бывает. Но подождите 12 часов, пока ваша модель "разморозится". И заплатите $0.09/GB за скачивание.
Для активных моделей я рекомендую Cloudflare R2. Для архивных — AWS Glacier. Wasabi — золотая середина, если вы готовы к минимальному платежу.
2 Настраиваем кэширование моделей при запуске
Теперь техническая часть. Как заставить GPU-инстанс брать модель из объектного хранилища при запуске? С помощью скрипта инициализации.
Вот как НЕ надо делать:
# Плохо: качаем модель каждый раз при запуске
wget https://storage.example.com/llama-70b.gguf
# Ждём 30 минут и платим за трафик
Вот правильный подход с кэшированием:
#!/bin/bash
# Скрипт инициализации для Runpod/Hyperstack
MODEL_PATH="/runpod-volume/llama-70b.gguf"
R2_URL="https://r2.cloudflare.com/my-model-bucket/llama-70b.gguf"
# Проверяем, есть ли модель на локальном SSD
if [ ! -f "$MODEL_PATH" ]; then
echo "Модель не найдена локально, загружаем из R2..."
# Используем presigned URL для безопасности
curl -o "$MODEL_PATH" "$R2_URL"
echo "Загрузка завершена"
else
echo "Используем кэшированную модель"
fi
# Проверяем контрольную сумму
md5sum "$MODEL_PATH" | grep -q "expected_md5" || { echo "Ошибка целостности"; exit 1; }
# Запускаем инференс-сервер
python -m vllm.entrypoints.openai.api_server \
--model "$MODEL_PATH" \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.9
Важный нюанс: локальные SSD у GPU-провайдеров — ephemeral (временные). Они стираются при остановке инстанса. Но если вы не останавливаете инстанс месяцами (а зачем?), то модель останется в кэше. Для долгосрочного хранения всё равно нужен S3/R2.
Реальная математика: сколько вы сэкономите
Давайте посчитаем на примере проекта с Llama 3.1 70B (35GB в 4-битном квантовании), который работает 12 часов в день.
| Сценарий | Месячная стоимость | Экономия |
|---|---|---|
| Runpod с хранением модели у них | $256 (GPU) + $0 (хранение) = $256 | Базовый уровень |
| Hyperstack с хранением у них | $227 (GPU) + $3.5 (хранение) = $230.5 | Экономия $25.5 |
| Runpod + Cloudflare R2 (наш метод) | $256 (GPU) + $0.52 (R2) = $256.52 | Кажется, нет экономики? |
Стоп. Почему третий вариант кажется дороже? Потому что я ещё не рассказал про главный трюк.
Spot-инстансы: игра в русскую рулетку со скидкой 70%
И Hyperstack, и Runpod предлагают spot-инстансы — это GPU, которые могут быть отозваны в любой момент, если кому-то понадобились по полной цене. Стоят они на 60-80% дешевле.
Вот как это работает в реальности:
# Пример кода для работы со spot-инстансами
import runpod
from datetime import datetime
import time
# Создаём spot-инстанс
spot_pod = runpod.create_spot_pod(
gpu_type="RTX 4090",
cloud_type="SECURE",
docker_image="runpod/llm:v1.0",
volume_in_gb=100,
min_memory=24 # GB
)
print(f"Spot инстанс создан: ${spot_pod['cost_per_hour']}/час")
# Вместо $0.89 будет $0.27!
# Мониторим статус
while True:
status = runpod.get_pod_status(spot_pod['id'])
if status == "TERMINATED":
print("Нас вытеснили! Сохраняем состояние...")
# Сохраняем кэш модели обратно в R2
upload_to_r2("/runpod-volume/model-cache")
# Ждём 5 минут и пробуем снова
time.sleep(300)
spot_pod = runpod.create_spot_pod(...)
time.sleep(60)
На spot-инстансах та же модель будет стоить не $256, а $76-102 в месяц. Плюс $0.52 за R2. Итого: $77-103 вместо $256. Экономия 60-70%.
Spot-инстансы — не для production. Ваш сервис может быть недоступен до 15 минут, если все инстансы в регионе будут выкуплены. Но для разработки, тестирования, batch-обработки или не-critical сервисов — идеально.
5 ошибок, которые съедят вашу экономию
- Хранить модели в Docker-образах. Кажется удобным: один образ — и модель внутри. Но каждый раз при деплое вы будете качать 30-100GB. Платите за трафик и ждёте.
- Игнорировать квантование. Запускать FP16 версию модели на 70GB вместо 4-битной на 35GB — платить в 2 раза больше за одно и то же качество ответов. Про квантование я подробно писал здесь.
- Не мониторить utilization. GPU загружен на 15%, но вы платите за 100%. Используйте auto-scaling или прерывайте инстансы в периоды простоя.
- Выбирать регион подешевле. Дешёвый регион в Азии может быть доступен за $0.60 против $0.89 в Европе. Но latency для ваших пользователей из США будет 300ms вместо 80ms.
- Забывать про сетевые лимиты. Облачные провайдеры ограничивают сетевой трафик между инстансами. Если вы запускаете кластер из нескольких GPU, проверьте bandwidth.
Чеклист выбора провайдера
- Считаем стоимость за месяц, а не за час
- Проверяем цены на исходящий трафик
- Ищем hidden costs: плата за статичные IP, мониторинг, бэкапы
- Тестируем spot-инстансы в пиковые часы (с 10:00 до 18:00 по времени провайдера)
- Настраиваем автостоп при неиспользовании
- Договариваемся о custom tariff при >$500 в месяц
Что делать, когда перерастёте $1000 в месяц
Есть магическая граница в $800-1200 в месяц, после которой аренда GPU становится невыгодной. В этот момент стоит посмотреть на покупку своего железа.
Быстрый расчёт: сервер с 2x RTX 4090 стоит ~$5000. При аренде за $1.58/час он окупится за 3165 часов, или 4 месяца непрерывной работы. После этого вы платите только за электричество ($50-100 в месяц).
Вопросы, которые я слышу каждый день
«Почему не рассматриваете Lambda Labs / Vast.ai / Paperspace?»
Рассматриваю. Но у каждого свои недостатки. Lambda Labs дороже на 20-30%. Vast.ai — аукционная система, где цены меняются каждую минуту. Paperspace требует долгосрочных контрактов. Hyperstack и Runpod — золотая середина по соотношению цена/контроль.
«А если мне нужна A100/H100?»
Тогда всё меняется. A100 стоит от $2.5/час, H100 — от $4/час. Экономия на хранении становится незначительной на фоне счёта в $3000+ в месяц. Здесь нужно смотреть на производительность: иногда 2x RTX 4090 быстрее одной A100 и в 2 раза дешевле. Тесты производительности для разных моделей есть здесь.
«Мой инстанс внезапно стал стоить в 2 раза дороже!»
Такое бывает. Провайдеры меняют цены, заканчиваются spot-инстансы, вы превысили лимит трафика. Единственная защита — мониторинг. Настройте алерты в Grafana при превышении $X в день. И всегда имейте запасной вариант на другом провайдере.
Главное, что нужно запомнить: самый дешёвый GPU — это тот, который вы выключили, когда он не нужен. Всё остальное — технические детали.