Проблема: 24 ГБ VRAM — это мало для современных LLM
Если вы работаете с локальными языковыми моделями, то знаете главную боль RTX 3090 — 24 ГБ видеопамяти. Для моделей типа Llama 3 70B в 4-битной квантованности нужно около 40 ГБ. Для обучения или инференса больших моделей в полной точности (FP16/BF16) и вовсе требуются сотни гигабайт. Один GPU не справляется.
Казалось бы, решение очевидно: ставим две RTX 3090. Но здесь возникает фундаментальный вопрос коммуникации между картами. PCIe 4.0 x16 даёт пропускную способность около 32 ГБ/с — этого катастрофически мало для обмена градиентами и активациями в распределённом обучении. Модель начинает "голодать" на данных, а вы наблюдаете утилизацию GPU на 30-50% вместо ожидаемых 90%+.
Ключевой момент: NVLink — это не SLI для игр. Это высокоскоростная шина для межпроцессорной коммуникации в вычислениях (NVIDIA NVSwitch на стероидах для потребительского сегмента). Пропускная способность — до 112 ГБ/с в каждом направлении (общая до 224 ГБ/с) против 32 ГБ/с у PCIe 4.0.
Решение: NVLink как мост между двумя мирами
NVLink для RTX 3090 создаёт виртуальное адресное пространство, где две карты видят память друг друга как свою собственную. Для фреймворков вроде PyTorch это означает возможность использовать model.to('cuda:0') и автоматическое распределение слоёв между GPU без явного копирования данных через PCIe.
| Параметр | PCIe 4.0 x16 | NVLink 3.0 (RTX 3090) | Выигрыш |
|---|---|---|---|
| Пропускная способность | ~32 ГБ/с | ~112 ГБ/с (в одном направлении) | 3.5x |
| Задержка | Высокая (протокол PCIe) | Низкая (прямое соединение) | Значительное |
| Объединённая память | Нет (только через CUDA Unified Memory с penalty) | Да (48 ГБ виртуального адресного пространства) | Критично для больших моделей |
Пошаговый план: от покупки до запуска
1 Выбор и покупка комплектующих
Вам понадобится:
- Две RTX 3090 с поддержкой NVLink — не все модели имеют разъём! Ищите Founders Edition или модели от ASUS, MSI, Gigabyte с NVLink bridge connector.
- Мост NVLink 3.0 (NVIDIA Part Number: 900-2G500-2500-000). На вторичном рынке стоит 15-25 тыс. рублей. Новых уже не найти.
- Материнская плата с двумя PCIe 4.0 x16 slots (желательно с расположением через один слот для воздушного охлаждения).
- Блок питания от 1000W (рекомендуется 1200W+ с учётом пиковых нагрузок).
2 Сборка и охлаждение — критический этап
Две RTX 3090 вплотную — это 700Вт тепловыделения под нагрузкой. Воздушное охлаждение в таком конфиге практически невозможно.
Предупреждение: Без водяного охлаждения карты будут троттлить уже через 5 минут нагрузки. Температура памяти GDDR6X (которая греется сильнее ядра) легко достигает 100°C+.
Варианты решения:
- Кастомная СВО — самый эффективный, но сложный вариант. Нужны водоблоки для обеих карт, радиатор 360мм+, мощная помпа.
- Готовые гибридные решения — если найдёте карты с заводским гибридным охлаждением (например, ASUS ROG Strix LC).
- Модификация с пассивными кулерами — замена штатных кулеров на пассивные радиаторы с выносом тепла за пределы корпуса.
3 Установка и настройка ПО
После физической сборки:
# 1. Установите последние драйверы NVIDIA
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/535.154.05/NVIDIA-Linux-x86_64-535.154.05.run
sudo sh NVIDIA-Linux-x86_64-535.154.05.run --no-x-check
# 2. Проверьте наличие NVLink
nvidia-smi nvlink --status
# Должно показать что-то вроде:
# GPU 0: NVIDIA GeForce RTX 3090
# Link 0: 25.781 GB/s
# GPU 1: NVIDIA GeForce RTX 3090
# Link 0: 25.781 GB/s
Настройка PyTorch для использования NVLink:
import torch
# Проверяем доступность NVLink
print(f"NVLink available: {torch.cuda.is_available() and torch.cuda.device_count() > 1}")
# Автоматическое распределение модели с поддержкой NVLink
model = YourLargeModel()
# Используем DataParallel с учётом NVLink
if torch.cuda.device_count() > 1:
# Важно: batch_size должна делиться на количество GPU
model = torch.nn.DataParallel(model, device_ids=[0, 1])
model = model.cuda() # Модель автоматически распределится
4 Тестирование производительности
Проведите сравнительные тесты:
# Тест пропускной способности между GPU
import torch
def benchmark_nvlink():
# Трансфер большого тензора между GPU
size = 1024 * 1024 * 1024 # 1 ГБ
tensor = torch.randn(size, dtype=torch.float32, device='cuda:0')
start = torch.cuda.Event(enable_timing=True)
end = torch.cuda.Event(enable_timing=True)
start.record()
tensor_on_gpu1 = tensor.to('cuda:1') # Копирование через NVLink/PCIe
end.record()
torch.cuda.synchronize()
elapsed = start.elapsed_time(end) # миллисекунды
bandwidth = (size * 4 / (elapsed / 1000)) / (1024**3) # ГБ/с
return bandwidth
print(f"Пропускная способность: {benchmark_nvlink():.2f} ГБ/с")
Реальные цифры: что даёт NVLink в разных сценариях
| Сценарий | Без NVLink | С NVLink | Прирост |
|---|---|---|---|
| Обучение Llama 2 13B (FP16) | 42 samples/sec | 68 samples/sec | +62% |
| Инференс Mixtral 8x7B (4-bit) | 14 tokens/sec | 22 tokens/sec | +57% |
| Stable Diffusion XL (1024×1024) | 1.8 it/sec | 2.9 it/sec | +61% |
| Обмен градиентами (ResNet-152) | 780 ms/step | 310 ms/step | +151% |
Альтернативы: когда NVLink — не лучший выбор
Рассмотрите эти варианты перед покупкой:
- Одна RTX 4090 + облачные инстансы — 24 ГБ всё ещё мало, но производительность одного чипа выше. Для больших задач арендуйте A100/H100 в облаке.
- Mac Studio с M2 Ultra (192 ГБ) — как мы сравнивали в статье "GB10 vs RTX vs Mac Studio". Единое адресное пространство, но другая архитектура и экосистема.
- Llama.cpp на CPU с большей RAM — если скорость не критична, но нужен большой контекст. Как в нашем гайде "Llama.cpp в LXC-контейнере на Proxmox".
- Ожидание RTX 5090 — слухи обедают 32 ГБ GDDR7 и улучшенную multi-GPU архитектуру.
Частые ошибки и проблемы
1. Несовместимые карты: NVLink требует одинаковые GPU. Нельзя соединить RTX 3090 с RTX 4090 или даже разные ревизии 3090 от разных производителей.
2. Недостаточное охлаждение: Самая частая причина нестабильной работы. Мониторьте температуру памяти через nvidia-smi -q -d temperature.
3. Проблемы с драйверами: NVLink чувствителен к версиям драйверов. Используйте версии 525+ и избегайте бета-драйверов.
4. Не все фреймворки поддерживают NVLink одинаково: PyTorch — отлично, TensorFlow — требуется ручная настройка, JAX — хорошая поддержка.
Вердикт: стоит ли игра свеч?
| Для кого ДА | Для кого НЕТ |
|---|---|
| • Исследователи, обучающие модели 13B+ параметров | • Те, кто работает только с инференсом маленьких моделей (<7B) |
| • Энтузиасты, которым нужна максимальная производительность в бюджет | • Те, кто не готов возиться с водяным охлаждением |
| • Студенты/стартапы без доступа к облачным A100/H100 | • Пользователи, которые часто меняют железо (NVLink bridge не универсален) |
| • Те, кому критично объединённое адресное пространство 48 ГБ | • Те, кто может подождать следующего поколения GPU |
Итог: NVLink для двух RTX 3090 — это решение для конкретного сегмента пользователей. Если вы попадаете в категорию "ДА", готовы к сложностям настройки и охлаждения, то прирост производительности в 50-150% того стоит. Для остальных случаев рассмотрите альтернативы или подождите более совершенных решений от NVIDIA.
Как и при выборе эмбеддинг-моделей, о которых мы писали в статье "BGE M3 vs EmbeddingGemma vs Qwen3", всё зависит от ваших конкретных задач и ограничений. Нет универсального ответа — есть оптимальное решение для вашего кейса.