15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
23.10.2024

Как настроить NVLink на выделенном сервере

NVLink — это фирменный высокоскоростной интерконнект GPU от NVIDIA, который заменяет шину PCIe в качестве основного канала связи между GPU — а в отдельных архитектурах — между GPU и CPU. Он обеспечивает двунаправленную пропускную способность до 600 GB/s на соединение на оборудовании поколения Hopper, по сравнению с теоретическим максимумом около 64 GB/s на PCIe 5.0 x16. Для таких рабочих нагрузок, как обучение больших языковых моделей, моделирование молекулярной динамики или многогпу-инференс, это различие не является незначительным — оно носит архитектурный характер.

Это руководство содержит полное пошаговое описание производственного уровня для настройки NVLink на выделенном сервере: от физической установки оборудования и настройки стека драйверов до проверки топологии, интеграции на уровне приложений и текущего мониторинга производительности.

NVLink — это не просто более быстрый кабель. Это когерентная, точка-точка интерконнект-структура, встроенная непосредственно в кристалл GPU. Каждая линия NVLink передаёт данные в обоих направлениях одновременно, используя сериализованный протокол дифференциальной сигнализации. Несколько линий объединяются в единое логическое соединение, а несколько соединений могут связывать одну и ту же пару GPU для суммирования пропускной способности.

Важно отметить, что NVLink поддерживает когерентный доступ к памяти с кэшированием. Это означает, что GPU A может читать из памяти фреймбуфера GPU B без промежуточного хранения данных в оперативной памяти хоста или контроллере памяти CPU. Именно это свойство обеспечивает модель программирования «унифицированной памяти» в CUDA — единое виртуальное адресное пространство, охватывающее несколько физических памятей GPU.

Чем NVLink не является: он не является заменой NVSwitch в крупномасштабных системах. В конфигурациях с более чем двумя GPU NVIDIA использует NVSwitch — специализированный чип коммутации с перекрёстной коммутацией — для обеспечения полного подключения NVLink «все ко всем». Например, DGX A100 использует шесть чипов NVSwitch, чтобы каждый из восьми GPU A100 имел полную пропускную способность NVLink к каждому другому GPU одновременно. Если вы создаёте рабочую станцию с двумя GPU или сервер с четырьмя GPU с поддерживаемым мостом, вы работаете с прямыми соединениями NVLink. Если вы работаете с восемью и более GPU, вы почти наверняка находитесь в области NVSwitch.

Понимание предела пропускной способности вашего конкретного оборудования необходимо перед бенчмаркингом или планированием ёмкости.

Поколение GPUВерсия NVLinkСоединений на GPUОбщая двунаправленная пропускная способность
Volta (V100)NVLink 2.06300 GB/s
Turing (RTX 2080 Ti)NVLink 2.02100 GB/s
Ampere (A100 SXM)NVLink 3.012600 GB/s
Ampere (RTX 3090)NVLink 3.02112.5 GB/s
Ada Lovelace (RTX 4090)NVLink 4.02112.5 GB/s
Hopper (H100 SXM)NVLink 4.018900 GB/s
Blackwell (B200)NVLink 5.0181800 GB/s

PCIe 4.0 x16 обеспечивает примерно 32 GB/s двунаправленно. PCIe 5.0 x16 удваивает это значение примерно до 64 GB/s. Даже двухсоединительный потребительский мост NVLink на картах RTX 3090 обеспечивает почти вдвое большую пропускную способность, чем PCIe 5.0 — а GPU для центров обработки данных находятся в совершенно другой категории.

Предварительные требования и совместимость оборудования

Прежде чем прикасаться к какому-либо файлу конфигурации, убедитесь в следующем:

Совместимость GPU. NVLink доступен не на всех GPU NVIDIA. Потребительские карты ниже RTX 2080 Ti не поддерживают его. RTX 4080 не поддерживает NVLink, несмотря на то что является высококлассной картой — в поколении Ada только RTX 4090 его поддерживает. Всегда проверяйте официальный лист технических характеристик GPU NVIDIA для вашего конкретного SKU.

Мост NVLink. Для потребительских и полупрофессиональных GPU требуется физический разъём моста NVLink. Эти мосты зависят от поколения — мост Turing не подойдёт к карте Ampere. GPU для центров обработки данных (A100, H100) в форм-факторе SXM используют фирменную плату-мезонин и не используют дискретный мост.

Материнская плата и расстояние между слотами PCIe. Мост NVLink требует, чтобы два GPU находились в соседних слотах PCIe x16 с определённым физическим зазором. Большинство потребительских мостов занимают два слота. Некоторые высококлассные мосты занимают три слота. Перед покупкой проверьте шаг слотов вашей материнской платы относительно размеров моста.

Настройки BIOS. Включите «Above 4G Decoding» и «Resizable BAR» (также называемый Smart Access Memory на платформах AMD) в UEFI. В некоторых системах также требуется отключить CSM (Compatibility Support Module), чтобы обеспечить полное выделение адресного пространства PCIe для нескольких GPU.

Подача питания. Два высококлассных GPU под полной нагрузкой с ускорением NVLink могут потреблять в совокупности 600 Вт и более. Убедитесь, что ваш блок питания имеет достаточный запас мощности и что разъёмы питания GPU по возможности подключены к отдельным линиям.

Операционная система. В этом руководстве Linux (Ubuntu 22.04 LTS / Debian 12) рассматривается как основная целевая платформа, которая является стандартной средой для рабочих нагрузок ИИ и HPC на Выделенных серверах. Шаги, специфичные для Windows, отмечены там, где они существенно отличаются.

Шаг 1: Физическая установка GPU и моста

Полностью выключите сервер и отключите его от сети питания. Перед работой с картами PCIe наденьте антистатический браслет для заземления.

  1. Снимите заглушки слотов PCIe для целевых слотов.
  2. Вставьте первый GPU в основной слот x16 (обычно ближайший к CPU).
  3. Вставьте второй GPU в соседний слот x16, убедившись, что физический зазор соответствует вашему мосту NVLink.
  4. Надёжно установите обе карты до щелчка фиксаторов PCIe.
  5. Подключите все необходимые разъёмы питания PCIe от блока питания к каждому GPU. Не используйте разветвлённые кабели для карт с высоким TDP — используйте отдельные кабели от блока питания.
  6. Совместите мост NVLink с золотыми контактными площадками на верхнем крае обоих GPU. Нажмите вниз равномерно и твёрдо до полной посадки. Частично установленный мост приведёт к тому, что соединение не будет работать или будет работать с уменьшенной шириной.
  7. Если ваши GPU поддерживают двойные мосты NVLink (например, RTX 2080 Ti имеет два разъёма NVLink), установите оба моста для максимальной пропускной способности.
  8. Закройте корпус и подключите питание.

Шаг 2: Настройка BIOS и UEFI

Войдите в настройки UEFI (обычно Del или F2 при POST).

  • Включите Above 4G Decoding.
  • Включите Resizable BAR, если поддерживается.
  • Установите скорость соединения PCIe на Auto или Gen4/Gen5 в соответствии с вашим оборудованием.
  • Отключите CSM, если ваша ОС загружается через UEFI.
  • Сохраните и выйдите.

Шаг 3: Установка драйверов NVIDIA на Linux

NVIDIA предоставляет несколько способов установки. Метод через менеджер пакетов предпочтителен для серверных сред, поскольку он интегрируется с DKMS (Dynamic Kernel Module Support), который автоматически пересобирает модуль ядра после обновлений ядра.

Сначала добавьте репозиторий пакетов NVIDIA и установите драйвер:

sudo apt-get update
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install -y nvidia-driver-545 nvidia-dkms-545

Замените 545 на последнюю версию производственной ветки, доступную для вашего GPU. Вы можете запросить доступные версии с помощью:

apt-cache search nvidia-driver | grep "^nvidia-driver"

После установки перезагрузитесь:

sudo reboot

После перезагрузки убедитесь, что драйвер загружен корректно:

nvidia-smi

В выводе должны быть перечислены оба GPU с версией драйвера, совместимостью с версией CUDA и текущим состоянием питания. Если отображается только один GPU, второй может быть неправильно установлен или иметь проблему с подачей питания.

Важная ошибка: Если у вас загружен Nouveau (драйвер NVIDIA с открытым исходным кодом), он будет конфликтовать с проприетарным драйвером. Явно внесите его в чёрный список:

echo -e "blacklist nouveaunoptions nouveau modeset=0" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
sudo reboot

Шаг 4: Установка CUDA Toolkit

Полные возможности NVLink — в особенности одноранговый доступ к памяти и коллективные коммуникации — требуют наличия CUDA toolkit. Установите его через репозиторий NVIDIA CUDA для наиболее надёжного соответствия версий:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get install -y cuda-toolkit-12-4

Добавьте бинарные файлы и библиотеки CUDA в окружение вашей оболочки:

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

Проверьте установку:

nvcc --version

Вы должны увидеть вывод, определяющий версию компилятора CUDA. Также запустите пример CUDA deviceQuery, если у вас установлены примеры — он перечислит оба GPU и сообщит флаги возможностей NVLink.

Это наиболее важный диагностический шаг. nvidia-smi предоставляет несколько подкоманд специально для проверки NVLink.

Проверьте матрицу топологии системы:

nvidia-smi topo -m

Вывод представляет собой матрицу, показывающую тип интерконнекта между каждой парой устройств в системе. Ищите метки NV# между вашими GPU, где # — количество мостов NVLink, соединяющих их. Метка NV2 означает, что активны два моста NVLink. Метка PIX или PHB означает, что GPU взаимодействуют через PCIe — NVLink не активен.

Пример вывода для правильно настроенной системы с двумя GPU:

        GPU0    GPU1    CPU Affinity    NUMA Affinity
GPU0     X      NV2     0-23            0
GPU1    NV2      X      0-23            0

Проверьте состояние соединений NVLink для каждого GPU:

nvidia-smi nvlink --status -i 0

Это показывает состояние каждого порта NVLink на GPU 0. Активные соединения будут отображать состояние Active и согласованную скорость.

Проверьте счётчики ошибок NVLink:

nvidia-smi nvlink --errorcounters -i 0

Ненулевые счётчики повторных попыток или восстановления указывают на проблему физического уровня — частично установленный мост, повреждённый разъём или проблемы целостности сигнала из-за недостаточной подачи питания.

Мониторинг пропускной способности NVLink в реальном времени:

nvidia-smi nvlink -s

Это выводит накопленные счётчики пропускной способности. Для мониторинга дельты в реальном времени объедините с watch:

watch -n 1 nvidia-smi nvlink -s

Шаг 6: Включение и проверка однорангового доступа к памяти

Когерентный доступ к памяти NVLink требует включения однорангового доступа (P2P) на уровне CUDA. Вы можете проверить это программно:

cat << 'EOF' > check_p2p.py
import subprocess
result = subprocess.run(['nvidia-smi', 'topo', '-p2p', 'r'], capture_output=True, text=True)
print(result.stdout)
EOF
python3 check_p2p.py

Или используйте программу на CUDA C с cudaDeviceCanAccessPeer(). Для быстрой проверки примеры CUDA simpleP2P и p2pBandwidthLatencyTest являются окончательными инструментами:

cd /usr/local/cuda/samples/1_Utilities/p2pBandwidthLatencyTest
make
./p2pBandwidthLatencyTest

В выводе будет показана двунаправленная пропускная способность между парами GPU. Через NVLink вы должны увидеть значения, соответствующие таблице пропускной способности выше. Если вы видите пропускную способность уровня PCIe (~10–30 GB/s), P2P через NVLink не активен — проверьте, что мост полностью установлен и что никакие настройки IOMMU не блокируют одноранговый доступ.

Замечание об IOMMU: На платформах AMD EPYC и некоторых Intel Xeon IOMMU может быть включён по умолчанию и может блокировать P2P-доступ GPU. Если P2P не работает, добавьте iommu=pt (режим сквозной передачи) или amd_iommu=on iommu=pt в командную строку ядра в /etc/default/grub:

sudo nano /etc/default/grub
# Add iommu=pt to GRUB_CMDLINE_LINUX_DEFAULT
sudo update-grub
sudo reboot

Современные фреймворки автоматически обнаруживают NVLink через NCCL (NVIDIA Collective Communications Library), но понимание того, как проверять и настраивать это поведение, необходимо для производственных развёртываний.

Переменные окружения NCCL для оптимизации NVLink:

export NCCL_DEBUG=INFO
export NCCL_P2P_LEVEL=NVL        # Force NVLink for P2P transfers
export NCCL_SHM_DISABLE=0        # Keep shared memory enabled
export NCCL_SOCKET_IFNAME=eth0   # Specify network interface for multi-node

Установка NCCL_DEBUG=INFO заставляет NCCL выводить обнаруженную топологию во время выполнения. Вы увидите строки вида [0] NCCL INFO Channel 00 : 0[...] -> 1[...] via NVL, подтверждающие, что NVLink используется для межгпу-передач.

Проверка многогпу-конфигурации PyTorch:

import torch

print(f"CUDA available: {torch.cuda.is_available()}")
print(f"GPU count: {torch.cuda.device_count()}")

for i in range(torch.cuda.device_count()):
    for j in range(torch.cuda.device_count()):
        if i != j:
            can_access = torch.cuda.can_device_access_peer(i, j)
            print(f"GPU {i} -> GPU {j} P2P access: {can_access}")

Если can_device_access_peer возвращает True для обоих направлений, DataParallel и DistributedDataParallel PyTorch будут автоматически использовать NVLink для синхронизации градиентов.

Проверка многогпу-конфигурации TensorFlow:

import tensorflow as tf

gpus = tf.config.list_physical_devices('GPU')
print(f"Detected GPUs: {len(gpus)}")
for gpu in gpus:
    print(gpu)

# Enable memory growth to prevent TF from allocating all VRAM at startup
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)

TensorFlow использует NCCL для коллективных операций при работе с MirroredStrategy, поэтому переменные окружения NCCL, указанные выше, применяются в равной мере.

Перед запуском производственных рабочих нагрузок установите базовый уровень производительности. Это также служит регрессионным тестом после обновлений драйверов или изменений оборудования.

Тест пропускной способности all-reduce NCCL (наиболее репрезентативный бенчмарк для распределённого обучения):

git clone https://github.com/NVIDIA/nccl-tests.git
cd nccl-tests
make CUDA_HOME=/usr/local/cuda
./build/all_reduce_perf -b 8 -e 512M -f 2 -g 2

Флаг -g 2 указывает два GPU. Обратите внимание на столбец busbw — это эффективная пропускная способность шины. На картах RTX 3090 через NVLink вы должны увидеть значения, приближающиеся к 100 GB/s. Через PCIe ожидайте 20–30 GB/s.

Бенчмарк cuBLAS GEMM для вычислительно-интенсивных рабочих нагрузок:

/usr/local/cuda/extras/demo_suite/bandwidthTest --mode=shmoo

Шаг 9: Текущий мониторинг и оповещение

Для производственных сред рекомендуется использовать nvidia-smi в режиме демона или интеграцию с Prometheus через dcgm-exporter.

Установите DCGM (Data Center GPU Manager):

sudo apt-get install -y datacenter-gpu-manager
sudo systemctl enable nvidia-dcgm
sudo systemctl start nvidia-dcgm

Запросите метрики, специфичные для NVLink, через DCGM:

dcgmi dmon -e 1011,1012,1013,1014

Идентификаторы полей 1011–1014 соответствуют счётчикам пропускной способности NVLink (TX/RX на соединение). Они могут быть экспортированы в Prometheus и визуализированы в Grafana для долгосрочного анализа тенденций.

Для более лёгкого мониторинга простой цикл nvidia-smi захватывает основное:

nvidia-smi dmon -s pucvmet -d 5

Флаги -s pucvmet включают отчётность о потреблении энергии, утилизации, тактовой частоте, VRAM, пропускной способности памяти, ECC и температуре с интервалом 5 секунд.

СценарийРекомендуемый интерконнектОбоснование
Потребительская рабочая станция с 2 GPUМост NVLinkЭкономически эффективно, вдвое больше пропускной способности PCIe
Полупрофессиональный сервер с 2–4 GPUМост NVLink (если поддерживается)Значительный прирост пропускной способности для обучения
Узел центра обработки данных с 8 GPUСтруктура NVSwitchПодключение «все ко всем», без узких мест
Многоузловое распределённое обучениеInfiniBand + NVLinkNVLink внутри узла, IB между узлами
Инференс-сервинг (критичный по задержке)NVLinkСнижает задержку межгпу-синхронизации
Транскодирование видео (смущающе параллельное)PCIe достаточноМежгпу-коммуникация не требуется

Типичные сбои и устранение неполадок

NVLink не обнаружен после физической установки. Запустите nvidia-smi topo -m и проверьте наличие PIX вместо NV#. Переустановите мост. Убедитесь, что оба GPU находятся на одном корневом комплексе PCIe — GPU на разных сокетах CPU, соединённых через QPI/UPI, не образуют пару NVLink даже при установленном мосте.

Пропускная способность P2P соответствует скоростям PCIe, несмотря на мост NVLink. IOMMU почти наверняка блокирует одноранговый доступ. Примените параметр ядра iommu=pt, как описано выше.

Накапливаются ошибки NVLink в nvidia-smi nvlink --errorcounters. Проблема физического уровня. Осмотрите контактные площадки разъёма моста на наличие загрязнений или повреждений. Попробуйте переустановить мост. Если ошибки сохраняются, сам мост может быть неисправен.

NCCL не использует NVLink, несмотря на то что топология показывает NV2. Явно установите NCCL_P2P_LEVEL=NVL. Также проверьте совместимость версии NCCL с вашей версией CUDA — несоответствия приводят к тому, что NCCL переходит на транспорт через общую память или сокеты.

Установка драйвера завершается с ошибками DKMS. Заголовочные файлы ядра для вашего работающего ядра могут быть не установлены. Исправьте с помощью:

sudo apt-get install -y linux-headers-$(uname -r)
sudo dkms autoinstall

Конфигурация NVLink эффективна ровно настолько, насколько эффективна базовая серверная платформа. Несколько факторов инфраструктуры напрямую влияют на производительность NVLink на практике:

Топология PCIe. На двухсокетных платформах EPYC или Xeon линии PCIe распределены между обоими CPU. GPU, подключённые к разным CPU, взаимодействуют через межсокетную структуру (Infinity Fabric или UPI), что добавляет задержку и снижает эффективную пропускную способность для передач GPU-GPU, которые должны пересекать границу сокета. По возможности устанавливайте GPU, объединённые NVLink, в слоты PCIe, подключённые к одному сокету CPU.

Пропускная способность памяти. Даже при том, что NVLink обрабатывает передачи GPU-GPU, подсистема памяти CPU остаётся узким местом для приёма данных. Высокопроизводительные платформы с DDR5 или HBM сокращают время, затрачиваемое на промежуточное хранение данных перед их поступлением на GPU.

Пропускная способность хранилища. Большие контрольные точки моделей и обучающие наборы данных требуют быстрого хранилища. NVMe SSD со скоростью последовательного чтения выше 7 GB/s предотвращают превращение уровня хранилища в узкое место при загрузке данных.

Охлаждение. Два GPU с высоким TDP под устойчивой нагрузкой с ускорением NVLink выделяют значительное количество тепла. Обеспечьте достаточный воздушный поток или мощность жидкостного охлаждения. Тепловое троттлирование снизит тактовые частоты GPU и сведёт на нет преимущество пропускной способности, которое обеспечивает NVLink.

Для команд, выполняющих многогпу-обучение ИИ или HPC-симуляции, Выделенные серверы с хранилищем NVMe и root-доступом обеспечивают необходимый контроль над оборудованием для реализации полной конфигурации, описанной в этом руководстве. Для рабочих нагрузок с ускорением GPU GPU Хостинг предлагает предварительно настроенные среды с уже установленными драйверами NVIDIA. Команды, которым нужна гибкая основа для пользовательских сред CUDA, также могут найти VPS Хостинг полезным для разработки и тестирования перед масштабированием до выделенного оборудования.

Ключевые выводы и контрольный список решений

Перед развёртыванием NVLink в производственной среде проверьте каждый пункт:

  • Оборудование подтверждено: Оба GPU находятся в списке совместимости NVIDIA NVLink для вашего конкретного SKU, а не только для семейства продуктов.
  • Поколение моста совпадает: Поколение моста NVLink соответствует поколению GPU (мост Turing для GPU Turing, мост Ampere для GPU Ampere).
  • Физическая установка проверена: nvidia-smi topo -m показывает NV1 или NV2 между парами GPU, а не PIX или PHB.
  • P2P-доступ подтверждён: p2pBandwidthLatencyTest сообщает пропускную способность уровня NVLink (не уровня PCIe).
  • IOMMU учтён: При работе на EPYC или Xeon в параметрах ядра установлен iommu=pt.
  • Транспорт NCCL подтверждён: Вывод NCCL_DEBUG=INFO показывает via NVL для межгпу-каналов.
  • Счётчики ошибок чистые: nvidia-smi nvlink --errorcounters показывает нулевые ошибки повторных попыток и восстановления после нагрузочного теста.
  • Мониторинг активен: DCGM или nvidia-smi dmon записывает метрики пропускной способности NVLink и ошибок в постоянное хранилище.
  • Тепловой запас подтверждён: Оба GPU поддерживают целевые тактовые частоты под полной нагрузкой без теплового троттлирования.
  • Версии драйвера и CUDA зафиксированы: В производственных средах используются зафиксированные версии драйверов, управляемые через DKMS, для предотвращения непреднамеренных обновлений, нарушающих конфигурацию.

Часто задаваемые вопросы

Работает ли NVLink на всех картах NVIDIA RTX?

Нет. Поддержка NVLink существенно варьируется даже в линейке RTX. Например, RTX 4080 не поддерживает NVLink, несмотря на то что является высококлассной картой Ada Lovelace. Только RTX 4090 поддерживает NVLink в этом поколении. Всегда проверяйте по техническому листу конкретного GPU, а не по семейству продуктов.

Можно ли использовать NVLink с разными моделями GPU?

В общем случае нет. NVLink требует, чтобы оба GPU были одной модели и поколения. NVIDIA официально не поддерживает конфигурации NVLink со смешанными моделями, и стек драйверов не установит одноранговое соединение NVLink между разнородными GPU, даже если физические разъёмы совместимы.

Что произойдёт, если мост NVLink будет снят во время работы системы?

Система не завершит работу немедленно, но любые активные P2P-передачи через NVLink завершатся с ошибкой, что обычно приведёт к тому, что работающее CUDA-приложение выдаст ошибку CUDA и завершится. GPU перейдут на PCIe для последующих операций. Горячее извлечение моста не поддерживается и создаёт риск физического повреждения контактных площадок разъёма.

Используется ли NVLink автоматически в PyTorch и TensorFlow, или требуется явная настройка?

Оба фреймворка используют NCCL для многогпу-коллективных операций, и NCCL автоматически обнаруживает топологию NVLink. Однако вы всегда должны проверять с помощью NCCL_DEBUG=INFO, что NCCL действительно выбирает транспортный путь NVLink. В некоторых конфигурациях — особенно при включённом IOMMU или несовпадающих версиях NCCL/CUDA — NCCL молча переходит на более медленные транспорты.

Как определить, действительно ли NVLink улучшает пропускную способность обучения?

Запустите задачу обучения с NCCL_P2P_DISABLE=1 (принудительно PCIe) и без него (разрешает NVLink). Сравните время итерации или количество образцов в секунду. Для рабочих нагрузок с интенсивными коммуникациями, таких как обучение больших трансформеров с частыми операциями all-reduce, NVLink обычно сокращает время межгпу-синхронизации на 40–70% по сравнению с PCIe, что напрямую выражается в более быстром времени эпох.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать