Когда счет за электричество дороже аренды H100
Вы собрали монстра. Семь GPU трещат по швам, разрывая Llama 3.1-405B на части. Скорость инференса радует, но потом приходит счет. И цифра в нем заставляет задуматься: может, проще было арендовать облако?
Я тоже прошел через это. Моя ферма из 7 RTX 4090 потребляла до 2500 ватт под нагрузкой. В месяц это выливалось в сумму, за которую можно было купить еще одну карту. За год. Безумие.
Но есть хорошая новость: энергопотребление LLM-фермы - не магия, а физика. И ее можно обмануть.
Самый большой миф: "GPU простаивают - не потребляют". Ложь. 7 RTX 4090 в idle съедают 270W. Это как постоянно включенный мощный компьютер. 24/7.
Сначала математика: сколько на самом деле стоит ваш инференс
Без цифр все разговоры об оптимизации - болтовня. Давайте считать.
1 Замеряем реальное потребление
Вам нужны три цифры:
- Idle power (система включена, LLM не работает)
- Средняя нагрузка (типичный инференс)
- Пиковая нагрузка (все GPU на 100%)
Для моей системы с 7 RTX 4090, Threadripper 7960X, 256GB RAM цифры такие:
| Режим | Потребление (W) | Примечание |
|---|---|---|
| Полный idle | 270-300W | Только система, карты в P8 state |
| Инференс Qwen2.5-32B | 1400-1800W | 4 карты загружены на ~70% |
| Полная нагрузка (FurMark) | 2450-2550W | Все 7 карт на 100%, лимит по БП |
Как замерить:
# Мониторим потребление GPU в реальном времени
watch -n 2 "nvidia-smi --query-gpu=power.draw --format=csv,noheader | awk '{sum+=\$1} END {print sum \" W\"}'"
# Или сразу все метрики
nvidia-smi -q -d POWER | grep -E "Power Draw|Power Limit"
Не доверяйте только nvidia-smi. Он показывает потребление GPU, но не всей системы. Кулеры, материнка, процессор, диски - все это добавляет 100-300W. Лучший способ - ваттметр в розетку.
2 Считаем деньги
Теперь переводим ватты в рубли. Допустим:
- Тариф: 8 руб/кВт·ч (актуально на 2026 для Москвы)
- Ферма работает 12 часов в день с нагрузкой
- 12 часов в idle
Расчет за месяц (720 часов):
# Простой расчет на Python
hours_per_month = 720
tariff = 8 # руб/кВт·ч
# Среднее потребление
idle_power = 285 # W
load_power = 1600 # W
# 12 часов нагрузки + 12 часов idle = сутки
daily_energy = (12 * load_power + 12 * idle_power) / 1000 # кВт·ч
monthly_energy = daily_energy * 30
monthly_cost = monthly_energy * tariff
print(f"Ежедневно: {daily_energy:.1f} кВт·ч")
print(f"Ежемесячно: {monthly_energy:.1f} кВт·ч")
print(f"Стоимость: {monthly_cost:.0f} руб")
Выходит около 6800 рублей в месяц. За год - 81 600 рублей. Это стоимость еще одной RTX 4090. Каждый год.
Вот почему американцы так заморачиваются с 120V - там тарифы еще выше. Если вы в США, обязательно прочитайте мой гайд "120V - не приговор" - там вся математика для ограниченных сетей.
Оптимизация: не жертвуя скоростью
Самый тупой способ экономии - выключать ферму. Но мы не для этого ее собирали. Нужны умные методы.
3 Настройка состояний питания (P-States)
Современные GPU NVIDIA (Ada Lovelace, Blackwell) умеют уходить в глубокий сон. Но по умолчанию они этого не делают.
Проблема: когда LLM не работает, карты остаются в состоянии P0 (максимальные частоты). Зачем? Никто не знает. Надо это исправить.
# Принудительно переводим все GPU в P8 (минимальное потребление)
sudo nvidia-smi -pm 1 # Включаем управление питанием
sudo nvidia-smi -pl 200 # Устанавливаем лимит 200W (для 4090)
# Автоматический переход в низкие состояния
sudo nvidia-persistenced --persistence-mode
# Проверяем текущее состояние
nvidia-smi -q -d PERFORMANCE | grep "Performance State"
После этих настроек idle потребление упадет с 270W до 180-200W. Экономия: 70W × 12 часов × 30 дней = 25.2 кВт·ч в месяц. Это 200 рублей. Мелочь, но приятно.
Внимание: некоторые фреймворки (особенно старые версии llama.cpp) могут криво работать с P8. GPU не успевает "проснуться" и инференс падает. Тестируйте.
4 Undervolting: магия 90% мощности за 70% энергии
Здесь физика на нашей стороне. Потребление GPU растет квадратично относительно напряжения. Чуть снизили напряжение - сильно снизили нагрев и потребление.
Для RTX 4090 золотая середина:
- Стандарт: 1.05V, 450W, 2520 MHz
- Оптимально: 0.95V, 320W, 2400 MHz
Теряем 5% производительности, экономим 30% энергии. Для LLM, где важнее объем VRAM, а не чистая FLOPS, это идеально.
# Используем nvidia-settings (требует X сервер)
nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=-200"
nvidia-settings -a "[gpu:0]/GPUMemoryTransferRateOffset[3]=1000"
nvidia-settings -a "[gpu:0]/GPUOverVoltageOffset=0"
# Или сразу для всех карт
for i in {0..6}; do
nvidia-settings -a "[gpu:$i]/GPUGraphicsClockOffset[3]=-200"
done
Но ручное управление - это каменный век. В 2026 году используем автоматику.
5 Автоматическое масштабирование: включаем GPU только когда нужно
У вас 7 GPU. Сколько реально нужно для вашей модели?
- Llama 3.1-405B: все 7 (или даже мало)
- Qwen2.5-32B: хватит 2-3
- Мелкие модели (до 7B): 1 GPU
Почему держать все карты включенными? Давайте отключать лишние.
# Пример скрипта динамического управления GPU
import subprocess
import psutil
import time
class GPUManger:
def __init__(self):
self.total_gpus = 7
def get_required_gpus(self, model_size: str) -> int:
"""Определяем сколько GPU нужно для модели"""
requirements = {
"llama-405b": 7,
"qwen-32b": 3,
"mistral-8b": 1,
"phi-3": 1
}
return requirements.get(model_size, 1)
def disable_gpu(self, gpu_id: int):
"""Выключаем GPU (через драйвер)"""
# Это сложно, но можно через unbind драйвера
with open(f"/sys/bus/pci/devices/0000:01:00.{gpu_id}/remove", 'w') as f:
f.write('1')
def enable_gpu(self, gpu_id: int):
"""Включаем GPU обратно"""
subprocess.run(["echo", "1", ">", "/sys/bus/pci/rescan"], shell=True)
# На практике используйте готовые решения
В реальности проще использовать vLLM с возможностью указать конкретные GPU:
# Запускаем только на GPU 0,1,2
CUDA_VISIBLE_DEVICES=0,1,2 python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B \
--tensor-parallel-size 3
# Когда нужна большая модель - используем все
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6 python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-405B \
--tensor-parallel-size 7
Инфраструктурные хаки: от охлаждения до тарифов
Охлаждение - это тоже энергия
Ваши вентиляторы и СЖО потребляют 100-300W. При 2500W общей нагрузки это 10-12%. Не мало.
Что делать:
- Настройте кривые вентиляторов. GPU при 60°C не нужны 100% обороты. 40-50% хватит.
- Используйте водяное охлаждение с пассивным радиатором. Нет вентиляторов - нет потребления.
- Зимой грейте помещение фермой. Банально, но работает. Выбрасывали тепло на улицу? Прекратите.
Умные тарифы
В 2026 году почти все регионы России имеют многотарифную систему. Ночью (с 23:00 до 07:00) электричество в 2-3 раза дешевле.
Что можно делать ночью:
- Обучение моделей (долгий процесс)
- Пакетный инференс (обработка датасетов)
- Тестирование и бенчмарки
Простое решение - systemd timer:
# /etc/systemd/system/nightly-inference.timer
[Unit]
Description=Run LLM inference at night
[Timer]
OnCalendar=*-*-* 23:00:00
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/nightly-inference.service
[Unit]
Description=Nightly LLM Inference
[Service]
Type=oneshot
ExecStart=/opt/llm/run_nightly_batch.sh
Environment="CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6"
Мониторинг и автоматизация
Без мониторинга все оптимизации бесполезны. Вы не узнаете, работает ли что-то.
Мой стек на 2026:
- Prometheus + Node Exporter - базовые метрики системы
- DCGM Exporter - метрики NVIDIA GPU (потребление, утилизация, температура)
- Grafana - дашборды и алерты
- Простые скрипты на Python для автоматического управления
| Метрика | Целевое значение | Что делать если вышли |
|---|---|---|
| Idle power > 200W | 150-180W | Проверить P-states, убить лишние процессы |
| Температура GPU > 75°C | 60-70°C | Увеличить обороты или снизить power limit |
| КПД (токен/ватт) | Максимальный | Оптимизировать batch size, проверить квантование |
Типичные ошибки (как сжечь деньги)
Ошибка 1: Держать ферму включенной 24/7 "на всякий случай". Якобы запуск занимает время. На самом деле современные системы с NVMe загружаются за 30 секунд. Выключайте на ночь.
Ошибка 2: Использовать максимальный power limit. Зачем GPU 4090 450W, если 320W хватает для стабильного инференса? Снижайте лимит.
Ошибка 3: Не мониторить КПД. Скорость - это хорошо, но токен/ватт - лучше. Иногда проще подождать на 30% дольше, но сэкономить 50% энергии.
ROI: когда ферма окупится
Давайте честно. Сборка фермы из 7 RTX 4090 в 2026 году стоит около 2.5-3 млн рублей. Энергопотребление - 80-100к руб/год.
Сравним с облаком (цены на январь 2026):
- A100 80GB (облако): $3-4/час
- H100 (облако): $5-7/час
- 7×RTX 4090 (локально): ~$0.5/час (только электричество)
Математика простая: если вы используете ферму больше 4-5 часов в день, локальный вариант выгоднее уже через 1.5-2 года. Если меньше - возможно, облако дешевле.
Но есть нюанс: облако - это только инференс. Локальная ферма - это еще обучение, эксперименты, полный контроль. И никаких лимитов на использование.
Мой совет: считайте не только электричество. Считайте:
- Амортизацию железа (3-5 лет)
- Затраты на охлаждение и помещение
- Стоимость вашего времени на администрирование
- Гибкость (можете ли вы запустить эксперимент в 3 ночи без согласований)
Что в итоге
Ферма из 7 GPU - это не домашний ПК. Это маленькая электростанция. И относиться к ней нужно соответственно.
Самый главный совет: начинайте с мониторинга. Не пытайтесь оптимизировать то, что не можете измерить. Поставьте Grafana, настройте дашборд с потреблением, и через неделю вы увидите, куда утекают деньги.
Второе: автоматизируйте. Скрипт, который выключает лишние GPU ночью, окупится за месяц. Автоматическое масштабирование частот - за два.
И помните: самая дорогая энергия - та, что тратится впустую. Ваши GPU должны либо работать, либо спать. Третьего не дано.
Если собираете ферму с нуля, обязательно прочитайте мой гайд про бюджетную 4-GPU сборку - там много нюансов по энергоэффективному железу. И про тонкую настройку энергопотребления при тестировании.
А если уже столкнулись с проблемами стабильности на многокарточных системах, вот разбор реального кейса с 8× RTX 3090: "Сборка multi-GPU сервера для LLM".
Удачи. И да пребудет с вами низкий idle power.