Зачем платить больше? Реальная математика боли
Представьте: вам нужно сделать тонкую настройку Llama 3.1 405B. Или Mixtral 8x22B. Или вашей собственной архитектуры на 120 миллиардов параметров. Вы открываете AWS, видите $8 в час за H100, умножаете на 72 часа обучения. 576 долларов. И это если повезёт, и обучение не упадёт на 68-м часу из-за какой-нибудь ерунды.
А теперь плохие новости: для 120B модели одной H100 мало. Нужно минимум 4. Считаем: $32 в час. 72 часа. 2304 доллара. За один эксперимент.
Стандартный подход "арендуй у облачного гиганта и молись" здесь не работает. Это путь к банкротству или к разговору с CFO, который спросит: "И что мы получили за эти $2300?"
Рынок GPU-аренды: дикий запад, где скидки прячутся в углах
После того как DeepInfra поднял цены, многие думают, что альтернатив нет. Это ложь. Альтернативы есть, но их нужно искать с фонарём.
Основная проблема не в том, что GPU дорогие. Проблема в том, что вы платите за них неэффективно.
1 Тактика первая: Игра на опережение (или как не платить за простаивающие карты)
vast.ai — это не просто маркетплейс. Это биржа, где цена определяется спросом и предложением. И здесь работает правило: ночью дешевле. В выходные дешевле. Когда Америка спит, а Европа ещё не проснулась — именно тогда цены падают на 30-40%.
| Сервис | H100 80GB (пик) | H100 80GB (ночь/вых) | Минималка |
|---|---|---|---|
| vast.ai (спотовый) | $4.50-$5.50/час | $2.80-$3.50/час | 1 час |
| Runpod (спотовый) | $4.20/час | $3.80/час | 1 час |
| TensorDock | $3.90/час | $3.90/час | 1 час (но часто нет в наличии) |
Практический совет: настройте скрипт, который мониторит цены на vast.ai и запускает инстанс, когда стоимость падает ниже вашего порога. Вот базовый пример:
import requests
import time
from datetime import datetime
def find_cheap_gpu(min_gpu_memory=80, max_price=3.5):
url = "https://vast.ai/api/v0/bundles/"
params = {
'q': '{\"verified\":{\"eq\":true},\"external\":{\"eq\":false},\"rentable\":{\"eq\":true},\"gpu_name\":{\"eq\":\"H100 80GB\"}}'
}
while True:
response = requests.get(url, params=params)
data = response.json()
for offer in data.get('offers', []):
if offer['dph_total'] <= max_price:
print(f"Найдена дешёвая карта: ${offer['dph_total']}/час")
# Здесь логика запуска инстанса
return offer['id']
print(f"[{datetime.now()}] Ничего дешёвого. Ждём 5 минут...")
time.sleep(300) # Проверяем каждые 5 минутВажно: vast.ai берёт комиссию 20% сверх указанной цены. Если в интерфейсе $3.00/час, реальная стоимость будет $3.60. Всегда умножайте на 1.2 при планировании бюджета.
2 Тактика вторая: А нужен ли именно H100? (Спойлер: не всегда)
H100 быстрее A100 в 2-3 раза для обучения. Но он и дороже в 2-3 раза. А теперь вопрос: что дешевле — 72 часа на A100 или 24 часа на H100?
Считаем:
• 4×A100 по $1.20/час = $4.80/час × 72 часа = $345.60
• 4×H100 по $3.50/час = $14.00/час × 24 часа = $336.00
Разница всего $9.60. Но! Это в идеальном мире, где ваш код использует 100% возможностей H100. В реальности ускорение редко достигает теоретического максимума. Особенно если вы не оптимизировали под Tensor Cores 8-го поколения.
Самый большой секрет экономии: Не тренировать мусор
Вот вам цифра, от которой волосы встают дыбом: 60% стоимости тонкой настройки — это подготовка данных и отладка. Не обучение. Подготовка.
Вы загружаете датасет на 100GB, платите за GPU, который его процессит, платите за CPU, который его парсит, платите за дисковое пространство. И только потом начинается обучение.
3 Фильтрация датасета: Как убрать 80% хлама до того, как он попадёт на GPU
Классическая ошибка: взять датасет, скормить его модели, надеяться на лучшее. Правильный подход: сначала оценить качество данных на маленькой модели.
Шаг 1: Берите маленькую модель (например, Llama 3.1 8B) и делайте эмбеддинги для всего датасета. На CPU. Это дёшево.
from sentence_transformers import SentenceTransformer
import numpy as np
# Загружаем маленькую, но эффективную модель для эмбеддингов
model = SentenceTransformer('all-MiniLM-L6-v2') # Всего 80MB
# Читаем датасет
with open('your_dataset.jsonl', 'r') as f:
samples = [json.loads(line) for line in f]
# Генерируем эмбеддинги для всех примеров
embeddings = model.encode([s['text'] for s in samples], show_progress_bar=True)
# Кластеризуем, чтобы найти повторяющиеся паттерны
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=100, random_state=42)
cluster_labels = kmeans.fit_predict(embeddings)Шаг 2: Анализируйте кластеры. Если 90% ваших данных падают в 10% кластеров — у вас проблема с разнообразием. Вы платите за обработку одних и тех же паттернов снова и снова.
Шаг 3: Используйте перплексию маленькой модели как фильтр. Если маленькая модель не понимает пример, большая тоже будет бороться.
Не делайте так: арендовать 4×H100 и начать процессить 500GB данных на них. Сначала отфильтруйте данные на ноутбуке. Или на дешёвом CPU-инстансе за $0.03/час.
Технические нюансы, которые съедают ваш бюджет
Проблема: Ваш GPU задыхается от I/O
Вы арендовали H100 за $4/час, но он загружен на 15%. Почему? Потому что данные не успевают поступать из памяти. NVMe диск в инстансе — это хорошо. Но если он shared между десятком виртуалок — это плохо.
Решение: Кэшируйте данные в GPU-памяти. Звучит очевидно, но 90% людей этого не делают.
# ПЛОХО: Читаем с диска для каждого батча
for batch in dataloader:
data = batch.to(device) # Медленно!
loss = model(data)
# ХОРОШО: Заранее загружаем всё, что помещается
max_gpu_samples = 1000 # Сколько примеров влазят в память
gpu_cache = []
for i in range(0, len(dataset), max_gpu_samples):
batch = dataset[i:i+max_gpu_samples].to(device)
gpu_cache.append(batch)
# Теперь обучение летает
for batch in gpu_cache:
loss = model(batch) # Данные уже в GPU!Проблема: Вы платите за время загрузки модели
Загрузка Llama 3.1 70B в память 4×H100 занимает 5-7 минут. По $4/час за карту — это $2.33 только за загрузку. Если вы перезапускаете обучение 10 раз в день — $23.30 впустую.
Решение: Используйте checkpoints. Или ещё лучше — арендуйте инстанс с предзагруженными весами. Некоторые провайдеры (например, OVHcloud) предлагают образы с популярными моделями уже загруженными.
А что насчёт B200? Стоит ли гоняться за новинкой?
NVIDIA B200 — это монстр. 192GB HBM3e памяти. Теоретически идеально для 120B моделей. Практически — дороже H100 в 2.5 раза, а доступность близка к нулю.
На момент написания:
• H100 80GB: $3.50-$5.50/час на вторичном рынке
• B200 192GB: $9.50-$12.00/час, если найдёте
Математика простая: B200 стоит как 3×H100. Но 3×H100 дают вам 240GB памяти (в распределённом режиме) и больше вычислительной мощности. Вывод: пока B200 — это игрушка для корпораций с безлимитным бюджетом.
Локальная альтернатива: Собираем кластер из б/у карт
Если вы делаете тонкую настройку регулярно — возможно, дешевле собрать своё железо. После прочтения статьи про сборку ПК за копейки многие задумываются о локальном решении.
Считаем:
• 4×RTX 4090 (24GB каждая) = $6000
• Электричество, охлаждение, риски = $1000 в год
Окупаемость: при арендной ставке $10/час (за 4 карты) — 700 часов работы. Это 29 дней непрерывного обучения. Если вы тренируете больше месяца в году — своё железо выгоднее.
Но помните: своё железо требует времени на настройку. И когда выйдет следующее поколение карт, ваши 4090 обесценятся. Аренда — это операционные расходы, покупка — капитальные.
Чеклист перед запуском дорогого обучения
- Запустите один эпох на 1% данных — убедитесь, что loss падает. Если нет — не тратьте деньги на полный датасет.
- Измерьте utilization GPU — если ниже 70%, ищите bottleneck (чаще всего это data loading).
- Проверьте, что используете смешанную точность (AMP) — это ускорит обучение в 2-3 раза практически бесплатно.
- Настройте gradient checkpointing — для 120B моделей это может уменьшить потребление памяти в 3 раза ценой 20% производительности.
- Используйте LoRA или QLoRA — тонкая настройка только части параметров вместо всех 120 миллиардов.
Финальный расчёт: Реальный кейс тонкой настройки 120B модели
Задача: тонкая настройка на датасете 50GB текста.
Наивный подход:
1. Аренда 4×H100 по $4.50/час = $18/час
2. Подготовка данных на GPU: 5 часов = $90
3. Обучение: 3 эпохи, 48 часов = $864
4. Отладка и перезапуски: +20% = $172.80
Итого: $1126.80
Умный подход:
1. Фильтрация датасета на CPU-инстансе ($0.10/час, 10 часов) = $1.00
2. Уменьшение датасета до 20GB после фильтрации
3. Аренда 4×A100 по $1.30/час (ночью) = $5.20/час
4. Обучение: 3 эпохи, 72 часа = $374.40
5. Использование LoRA: сокращение времени обучения на 40%
Итого: $375.40
Экономия: 66.7%. Или 751 доллар, который можно потратить на следующий эксперимент.
Что будет дальше? Прогноз на 2025
Цены на GPU аренду будут падать. Не потому, что NVIDIA станет добрее, а потому, что на рынок выйдут китайские аналоги (Biren, Iluvatar) и предложение превысит спрос. Но это произойдёт не раньше середины 2025.
До тех пор ваше главное оружие — не самые дешёвые карты, а самые эффективные пайплайны. Тот, кто умеет готовить данные на CPU и обучать на GPU, выживет. Остальные разорятся.
P.S. Если вы всё ещё платите $8/час за H100 — остановитесь. Прямо сейчас. Откройте vast.ai, настройте алерт на $3.50, и идите пить кофе. Когда карта найдётся — вы сэкономите достаточно, чтобы купить себе ещё чашку.