Сборка 8-GPU сервера на RTX 3090 для LLM: проблемы стабильности и решения | AiManual
AiManual Logo Ai / Manual.
14 Янв 2026 Гайд

Сборка multi-GPU сервера для LLM: разбор кейса с 8× RTX 3090 и проблемы стабильности

Подробный разбор реального кейса сборки сервера с 8 видеокартами RTX 3090 для запуска больших языковых моделей. PCIe ризеры, проблемы bifurcation, стабильность

В мире локальных 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-чипы). Которые стоят как половина сборки. Или ризеры со встроенными свитчами. Которые не существуют в природе в нормальном качестве.

💡
Если видите объявление "8 GPU сервер" - спросите про bifurcation. В 90% случаев это обман. Либо используются профессиональные карты с x8 интерфейсом (как RTX Pro 6000 в моей предыдущей статье), либо карты работают в x4 режиме с серьезной потерей производительности.

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 линков.

💡
Если собираете multi-GPU систему - берите карты одного производителя и одной ревизии. Идеально - из одной партии. Разница в $50 за карту сэкономит недели настройки.

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.