В мире локальных LLM есть два типа людей. Первые покупают готовые решения за десятки тысяч долларов. Вторые собирают монстров из того, что есть на рынке. Я из вторых. И сегодня расскажу про самую безумную сборку в моей практике - 8 видеокарт RTX 3090 в одном сервере.
Звучит как мечта? 192 ГБ VRAM, возможность запускать практически любую современную модель в полной точности. Реальность оказалась куда интереснее. И больнее.
Зачем вообще 8 карт? Математика безумия
Перед тем как ругать меня за избыточность, давайте посчитаем. Одна RTX 3090 - 24 ГБ. Четыре карты - 96 ГБ, как в моей бюджетной сборке на китайских GPU. Этого хватает для Llama 3.1 405B в 4-битном квантовании. Но что если нужна полная точность FP16? Или работа с контекстом в 128К токенов? Или параллельный запуск нескольких моделей?
Восемь карт дают 192 ГБ. Это уже другой уровень. Можно загрузить Qwen2.5 72B в FP16 и еще останется место для кэша. Можно экспериментировать с mixture-of-experts моделями. Можно запускать инференс для команды из 5-10 человек одновременно.
Ключевой момент: для LLM инференса важнее всего объем памяти, а не вычислительная мощность. 8 карт с x8 линиями PCIe часто работают лучше, чем 4 карты с x16 - просто потому что у вас больше VRAM для загрузки больших моделей целиком.
Железо: где начинаются проблемы
Список компонентов выглядит просто:
- Материнская плата: Supermicro H12SSL-NT (EPYC 7002 series)
- Процессор: AMD EPYC 7302P (16 ядер, 128 линий PCIe 4.0)
- Видеокарты: 8× NVIDIA GeForce RTX 3090 (разные производители)
- Блок питания: 2× Seasonic PRIME TX-1600 (1600W каждый)
- Ризеры: 8× PCIe x16 to x16 ризеров с кабелями 30 см
Кажется, все логично. EPYC дает 128 линий PCIe - по 16 на каждую карту в теории. На практике начинается ад.
1 Проблема первая: PCIe bifurcation или как заставить 8 карт работать одновременно
Bifurcation - это когда один физический слот PCIe x16 делится на несколько логических. Например, x16 можно разделить на x8/x8 или x8/x4/x4. На бумаге EPYC поддерживает bifurcation. В реальности - только если производитель материнской платы не сэкономил на прошивке.
Supermicro H12SSL-NT официально поддерживает только x8/x8/x8/x8 в четырех слотах. Для восьми карт нужны дополнительные PCIe свитчи (PLX-чипы). Которые стоят как половина сборки. Или ризеры со встроенными свитчами. Которые не существуют в природе в нормальном качестве.
2 Решение: хак BIOS и китайские ризеры
Пришлось лезть в настройки BIOS глубже, чем предполагалось. В Advanced → PCIe/PCI/PnP Configuration нашел скрытые опции:
# Команды для настройки bifurcation через IPMI
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password raw 0x30 0x70 0x0c 0x00 0x08
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password raw 0x30 0x70 0x0c 0x01 0x08
# И так для всех 8 слотов
Это принудительно устанавливает режим x8 для каждого слота. Но система все равно не видела все карты. Потому что ризеры.
Внимание: 95% ризеров на рынке - мусор. Они работают на PCIe 3.0, хотя заявлен 4.0. Или не поддерживают bifurcation. Или падают под нагрузкой. Я перепробовал 4 разных типа, прежде чем нашел рабочие.
Рабочие ризеры оказались от китайского производителя, который делает их для майнинговых ферм. Без бренда, без гарантии, зато с поддержкой PCIe 4.0 x8. Стоили в 3 раза дороже обычных.
Охлаждение: 2400W тепла в одном корпусе
Одна RTX 3090 под нагрузкой - 350W. Восемь - 2800W. Даже с учетом того, что для LLM инференса карты редко работают на 100%, это 2000-2400W тепла.
Стандартные корпусные вентиляторы не справляются. Нужна промышленная система. Я использовал:
- 6× вентиляторов Noctua NF-A14 industrialPPC-2000 PWM (2000 об/мин)
- 2× вентиляторов на выдув сверху (также industrialPPC)
- Кастомный воздуховод из картона и алюминиевой фольги (да, это работает)
Температуры в простое: 45-50°C. Под нагрузкой (запуск Llama 3.1 405B через vLLM): 75-82°C. Без кастомного воздуховода - 90+ и троттлинг.
| Конфигурация | Температура GPU | Стабильность |
|---|---|---|
| Без воздуховода | 92-96°C | Падения каждые 2-3 часа |
| С воздуховодом | 75-82°C | Стабильно 24/7 |
| Профессиональные карты (RTX Pro 6000) | 65-72°C | Идеальная стабильность |
Проблемы ПО: когда vLLM ненавидит multi-GPU
Железо собрали. Система видит все 8 карт. Запускаем тест:
import torch
print(f"GPUs available: {torch.cuda.device_count()}")
# Вывод: 8
# Пробуем распределить модель
from transformers import AutoModelForCausalLM
import torch
try:
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-405B",
torch_dtype=torch.float16,
device_map="auto" # Автоматическое распределение по GPU
)
except RuntimeError as e:
print(f"Ошибка: {e}")
# Типичная ошибка: CUDA out of memory
# Хотя памяти должно хватить с запасом
Проблема в том, что device_map="auto" в Hugging Face не оптимизирован для 8+ GPU. Он пытается загрузить слои последовательно, но не учитывает латентность PCIe. Результат - out of memory ошибки, хотя память свободна.
Решение - ручное распределение или использование специализированных фреймворков:
# Способ 1: Ручное распределение для vLLM
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3.1-405B",
tensor_parallel_size=8, # Явно указываем 8 GPU
gpu_memory_utilization=0.9, # 90% памяти каждой карты
max_num_seqs=16,
enforce_eager=True # Важно для стабильности
)
# Способ 2: DeepSpeed (более гибкий, но сложнее)
import deepspeed
model = AutoModelForCausalLM.from_pretrained(...)
model_engine = deepspeed.init_inference(
model,
mp_size=8,
dtype=torch.float16,
replace_method="auto",
replace_with_kernel_inject=True
)
RTX 3090 vs RTX Pro 6000: драма выбора
Пока я бился с проблемами стабильности, у меня возник вопрос: а что если вместо 8 RTX 3090 взять 4 RTX Pro 6000? Те самые, о которых я писал в статье про тесты температуры.
Давайте сравним:
| Параметр | 8× RTX 3090 | 4× RTX Pro 6000 |
|---|---|---|
| Стоимость | ~$12,000 | ~$20,000 |
| VRAM всего | 192 ГБ | 96 ГБ |
| Потребление | 2800W | 1180W |
| Стабильность | Требует настройки | Из коробки |
| Поддержка NVLink | Только 2 карты | 4 карты через NVSwitch |
Профессиональные карты выигрывают по стабильности и простоте сборки. Но проигрывают по цене и общему объему памяти. Для большинства задач 96 ГБ хватает. Но если нужны именно 192 ГБ - готовьтесь к танцам с бубном.
Типичные ошибки и как их избежать
За месяц эксплуатации я собрал коллекцию падений системы. Вот самые частые:
1. Разные производители карт = разные проблемы
У меня были карты от ASUS, MSI, Gigabyte и Zotac. Каждая со своей прошивкой BIOS. Результат - разное поведение при нагрузке, разные температуры, разная стабильность PCIe линков.
2. PCIe Gen 4 vs Gen 3: невидимая разница
Ризеры, которые якобы поддерживают PCIe 4.0, на практике работают на Gen 3. Проверить можно так:
# Проверка скорости PCIe
nvidia-smi -q | grep "Link Width"
nvidia-smi -q | grep "Link Speed"
# Или через lspci на Linux
lspci -vv -s 03:00.0 | grep -A 5 LnkSta
# Ожидаем: Speed 16GT/s (Gen 4)
# Реальность часто: Speed 8GT/s (Gen 3)
Для LLM инференса разница между Gen 3 x8 и Gen 4 x8 минимальна. Но если карты активно обмениваются данными (как в NVLink конфигурациях), то Gen 4 дает прирост 10-15%.
3. Питание: почему два блока лучше, чем один огромный
Я использовал два блока по 1600W вместо одного на 3200W. Причина - отказоустойчивость. Если один блок выйдет из строя, система продолжит работать на половине карт. Также два блока легче охлаждать.
Важный нюанс: нужен правильный адаптер для синхронизации включения. Без него один блок может включаться на секунду позже, что вызывает сброс PCIe устройств.
Итоги: стоит ли игра свеч?
После месяца настройки система работает стабильно. Запускает Llama 3.1 405B со скоростью 5-7 токенов в секунду (FP16, контекст 32К). Для сравнения, на 4 картах та же модель в 4-битном квантовании дает 15-20 токенов в секунду.
Кажется, что производительность низкая? Но вспомните: это полная точность. И контекст в 5 раз больше. И главное - модель загружена целиком, без свопа на диск.
Стоило ли оно того? Для исследовательских задач - да. Для продакшена, где важна стабильность - нет. Лучше взять меньше карт, но профессиональных. Или рассмотреть гибридные варианты, как в статье про eGPU.
Главный урок: multi-GPU системы - это всегда компромисс. Между ценой и стабильностью. Между объемом памяти и сложностью настройки. Между мечтой о 192 ГБ VRAM и реальностью PCIe bifurcation.
Но если решитесь - теперь знаете, где подстерегают проблемы. И как их решить. Или хотя бы как диагностировать, когда очередной китайский ризер решит, что сегодня ему не хочется работать на PCIe 4.0.