Настроить GPU Direct RDMA
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Настроить GPU Direct RDMA
1. Цель задачи
Освоить диагностику и верификацию инфраструктуры для GPU Direct RDMA — технологии, позволяющей GPU напрямую обмениваться данными с InfiniBand/ROCE-адаптером без копирования через CPU. Выполнить набор системных команд для проверки, что GPU и RDMA-интерфейс видят друг друга, и подтвердить готовность к высокопроизводительной распределённой тренировке.
Ключевой результат nvidia-smi topo -m показывает P2P=OK для связки GPU с InfiniBand HCA, и ibv_devinfo отображает корректные RDMA-устройства с активными портами, доступными из CUDA-контекста.
2. Исходные данные
| Что нужно | Откуда взять |
|---|---|
| Сервер с GPU NVIDIA (минимум 1, желательно 2+) и InfiniBand HCA (Mellanox ConnectX-4/5/6) или RDMA-совместимый Ethernet (RoCE v2) | Физический стенд, облачный инстанс (AWS EC2 P3/P4d с EFA, Azure ND-series) |
| Драйверы NVIDIA (видео + CUDA) версии >= 12.0 | Сайт NVIDIA или пакетный менеджер системы |
| Драйверы Mellanox OFED (OpenFabrics Enterprise Distribution) версии >= 5.x | Сайт NVIDIA Networking (Mellanox) или apt-get install mlnx-ofed-kernel-dkms |
Пакет ibverbs-utils (ibv_devinfo, ibv_rc_pingpong) | Репозиторий ОС (Ubuntu/Debian: ibverbs-utils, RHEL: libibverbs-utils) |
Утилита nvidia-smi | Входит в драйвер NVIDIA |
Пакет nvidia-peermem (nv_peer_memory) для P2P через RDMA | NVIDIA GPU Peer Direct Memory (исходники на GitHub) |
| Права root или sudo | Системная настройка |
Если нет реального инструмента (физического сервера с RDMA) — симулируем:
- Используйте виртуальную машину с GPU (например, Google Colab Pro + T4) и программный InfiniBand (Soft-RoCE). Внутри контейнера Docker с Debian/Ubuntu установите rdma-core и создайте виртуальный RDMA-адаптер (rxe).
- Шаги симуляции:
- apt-get install rdma-core ibverbs-utils
- modprobe rdma_rxe
- ip link add eth_veth type veth peer name eth_veth_peer
- Привяжите RXE: rdma link add rxe_0 type rxe netdev eth0 (замените
eth0на имя сетевого интерфейса, например,eth0). Если нет физического интерфейса — создайте bridge/veth. - Проверьте: ibv_devinfo покажет устройство
rxe_0(эмуляция RDMA без реальных пакетов, но для изучения команд подойдёт).
- Для nvidia-smi topo -m — она работает с GPU любой виртуализации, пока NVML видит GPU (в Colab работает).
- В симуляции P2P не будет физического DMA между GPU и сетевым адаптером — P2P=OK не появится. Поэтому дополнительным критерием симуляции считаем успешное выполнение ibv_devinfo и корректное отображение nvidia-smi topo -m (даже если P2P —
Not Supported; признак успеха в симуляции — отсутствие ошибок при выполнении и понимание вывода).
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Операционная система | Ubuntu 22.04 / Rocky Linux 9 | Базовая среда |
| GPU NVIDIA | Tesla V100 / A100 / H100 (или эмуляция через NVIDIA Docker) | Вычислительный ускоритель |
| Драйвер GPU | NVIDIA driver >= 545, CUDA toolkit >= 12.0 | Доступ к GPU через NVML и CUDA |
| RDMA адаптер | Mellanox ConnectX-5 (или Soft-RoCE) | Сетевое взаимодействие с DMA |
| Библиотеки RDMA | libibverbs, librdmacm, libibumad | Управление RDMA-ресурсами |
| Пакет для P2P | nvidia-peermem (nv_peer_memory) | Прямой доступ NIC к GPU памяти |
| Утилиты диагностики | ibv_devinfo, nvidia-smi, lspci, ibv_rc_pingpong, gdrcopy | Проверка связности и P2P |
| Средства разработки | gcc, make, git | Сборка модулей при необходимости |
4. Этапы выполнения
Этап 1: Проверка оборудования и драйверов (20-30 минут)
Действия
-
Определите тип GPU и RDMA-адаптера
lspci | grep -i nvidia lspci | grep -i infiniband lspci | grep -i "Network controller" # для RoCEПример вывода:
01:00.0 3D controller: NVIDIA Corporation GA100 [A100 SXM4 80GB] (rev a1) 02:00.0 InfiniBand: Mellanox Technologies MT28908 Family [ConnectX-6] -
Проверьте загруженные модули ядра
lsmod | grep -E "nvidia|mlx|ib_|rdma"Должны быть видны
nvidia,nvidia_uvm, mlx5_core,mlx5_ib, ib_core, ib_umad,ib_uverbs,rdma_cm. -
Убедитесь, что драйверы установлены корректно:
nvidia-smi # показывает GPU, нет ошибок ibv_devinfo # показывает хотя бы одно устройство с активным портомЕсли ibv_devinfo выдаёт
no IB devices found— перейдите к этапу 2. -
Зафиксируйте вывод команд в текстовый файл для последующего отчёта.
Ожидаемый результат этапа Сервер идентифицирован, GPU и IB-адаптер видны в lspci. Модули ядра загружены. nvidia-smi работает.
Этап 2: Установка и настройка драйверов RDMA (30-60 минут)
Действия
-
Установите пакеты RDMA (если отсутствуют):
sudo apt update sudo apt install -y ibverbs-utils infiniband-diags libibverbs-dev librdmacm-devНа RHEL:
yum install -y libibverbs-utils infiniband-diags. -
Для реальной HCA (Mellanox):
- Скачайте и установите OFED с сайта NVIDIA Networking (
MLNX_OFED). - Или используйте пакетный менеджер: sudo apt install mlnx-ofed-kernel-dkms (если в репозитории).
- Перезагрузите систему после установки.
- Скачайте и установите OFED с сайта NVIDIA Networking (
-
Для Soft-RoCE (симуляция):
- Установите rdma-core:
sudo apt install -y rdma-core. - Создайте RXE устройство (если нет физических RDMA-портов):
sudo modprobe rdma_rxe sudo ip link set dev eth0 up # замените eth0 на ваш интерфейс (например, docker) sudo rdma link add rxe_0 type rxe netdev eth0 - Проверьте:
ibv_devinfo | grep -A5 rxe.
- Установите rdma-core:
-
Установите nvidia-peermem (для реального P2P):
git clone https://github.com/NVIDIA/gdrcopy.git cd gdrcopy make sudo insmod nvidia-peermem.koДля работы модуля требуется, чтобы был загружен
nvidia-uvmиmlx5_ib. Проверьте:lsmod | grep nvidia_peermem.
Ожидаемый результат этапа ibv_devinfo выводит список RDMA-устройств (минимум одно) с state: PORT_ACTIVE (для реального) или «ACTIVE» для Soft-RoCE. Модуль nvidia_peermem загружен.
Этап 3: Диагностика топологии GPU и RDMA (20-30 минут)
Действия
-
Выполните команду
nvidia-smi topo -mРезультат — матрица связности GPU/NIC. Пример для A100 с ConnectX-6 (2 GPU, 2 HCA):
GPU0 GPU1 NIC0 NIC1 CPU Affinity NUMA Affinity GPU0 X NV8 PIX PHB 0-31 0 GPU1 NV8 X PHB PIX 32-63 1 NIC0 PIX PHB X PIX NIC1 PHB PIX PIX XКлючевые коды:
PIX(P2P через PCIe),PHB(через CPU — не прямой P2P). Для успеха в связке GPU-HCA должен бытьPIXилиPXB(если HCA на отдельном PCIe root), но неPHB. -
Определите, какие пары GPU-HCA имеют P2P:
- Ищите строку, где
NIC0пересекается сGPU0иGPU1. - Если напротив GPU стоит
PIXилиPXB— P2P возможен. - Критерий задачи хотя бы для одной пары GPU–NIC должно быть
PIXилиPXB(а неPHB). В случае Soft-RoCE (виртуального rxe)nvidia-smi topo -mне покажет NIC (так как rxe не PCIe) — это нормально, задача считается выполненной при корректном выводе с реальными GPU и (опционально) отсутствии ошибок.
- Ищите строку, где
-
Дополнительно проверьте PCIe топологию
nvidia-smi topo -pПокажет полную иерархию PCIe.
Ожидаемый результат этапа Ясное понимание, какие GPU и какие NIC находятся на одном PCIe-switch или CPU, что необходимо для P2P.
Этап 4: Проверка RDMA-доступности GPU памяти (30-40 минут)
Действия
-
Убедитесь, что RDMA-устройства зарегистрированы в CUDA:
# Создайте маленькую программу (C, скомпилировать с -libverbs -lcuda)Либо используйте готовый тест из пакета
gdrcopy/tests:cd gdrcopy/tests make ./copytestЕсли тест пройден — GPU память доступна через RDMA.
-
Выполните проверку через
ibv_devinfoс ключами для GPU: Современные драйверы автоматически регистрируют GPU память как MR (memory region). Проверить можно черезibv_devinfo -v— для каждого порта отобразится список GUID. Если GPU память видна, она появится какvendor part numberNVIDIA. -
Тестирование P2P (опционально):
# Используйте ibv_rc_pingpong на одном узле (сам с собой) с выделением GPU-памяти # Пример (требуется поддержка в драйвере): CUDA_VISIBLE_DEVICES=0 ibv_rc_pingpong -d mlx5_0 -g 3 -s 1000000Если
ibv_rc_pingpongподдерживает опцию-dдля CUDA device (не везде), можно пропустить.
Ожидаемый результат этапа GPU-память успешно зарегистрирована как RDMA-регион (или тест copytest проходит без ошибок).
Этап 5: Финальная верификация и документирование (15-20 минут)
Действия
-
Выполните итоговые команды для сбора артефактов:
nvidia-smi topo -m > topo_matrix.txt ibv_devinfo > ibv_devinfo_output.txt lspci -vvv | grep -A10 "NVIDIA\|Mellanox" > pci_info.txt -
Проверьте, что в
topo_matrix.txtнапротив одного из NIC напротив GPU стоитPIX(илиPXB). -
Убедитесь, что
ibv_devinfoпоказывает порт в состоянииPORT_ACTIVE(для реального адаптера) илиACTIVEдля Soft-RoCE. -
Задокументируйте полученные результаты
- Скриншот или текст вывода
nvidia-smi topo -m. - Вывод
ibv_devinfo. - Отметка, что P2P=OK (или Not Supported для симуляции) с пояснением.
- Скриншот или текст вывода
Ожидаемый результат этапа Заполненный отчёт (может быть в виде простого README), содержащий выводы и интерпретацию.
5. Критерии приемки (Definition of Done)
-
nvidia-smiотражает корректное количество GPU, драйвер загружен. -
ibv_devinfoвыводит список RDMA-устройств (минимум одно), каждое с активным портом (state = PORT_ACTIVE). -
nvidia-smi topo -mпоказывает хотя бы одну пару GPU – NIC с кодомPIXилиPXB(для реальной HCA) или не выводит ошибок при выполнении. - Модуль
nvidia_peermemзагружен (lsmod | grep nvidia_peermem). - Скрипт/тест gdrcopy (
copytest) проходит без ошибок. - Собран полный лог команд (
nvidia-smi topo -m,ibv_devinfo). - Если используется симуляция Soft-RoCE:
rdma link showпоказывает rxe-устройство,ibv_devinfoпоказывает его порт,nvidia-smi topo -mработает без падений (даже если P2P не поддерживается — это фиксируется в отчёте).
6. Ожидаемый результат
Основной артефакт Файл report_gpu_direct_rdma.md (или .txt) с результатами проверки.
Содержание файла
- Титул, дата, окружение (ОС, версии драйверов).
- Вывод
lspciдля GPU и InfiniBand. - Вывод
nvidia-smi(сводка). - Вывод
nvidia-smi topo -mс цветовой кодировкой (или текстовой матрицей). - Вывод
ibv_devinfoдля каждого устройства. - Результат теста gdrcopy.
- Заключение: готовность к GPU Direct RDMA (да/нет/требуется дополнительная настройка).
Дополнительные результаты
- Навык интерпретации топологии PCIe.
- Понимание разницы между
PIX,PHB,PXB. - Опыт работы с Soft-RoCE для эмуляции RDMA.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
ibv_devinfo показывает «No IB devices found» | Установите пакеты ibverbs-utils и загрузите драйверы (mlx5_core для Mellanox или rdma_rxe для Soft-RoCE). Проверьте lspci наличие HCA. |
nvidia-smi topo -m не показывает NIC | Вероятно, HCA не поддерживается NVML. Обновите драйвер NVIDIA (>= 470). Убедитесь, что на HCA установлено прошивку с поддержкой GPU Direct. |
nvidia-smi topo -m показывает PHB для всех пар GPU-NIC | HCA и GPU находятся на разных CPU sockets и/или не соединены через PCIe switch. Для работы P2P может потребоваться физическое реконфигурирование сервера. В задаче достаточно зафиксировать этот факт. |
nvidia-peermem не собирается или не вставляется | Убедитесь, что установлены заголовки ядра (linux-headers). Проверьте версию CUDA и драйвера NVIDIA — они должны быть совместимы с gdrcopy. |
Soft-RoCE не работает — rdma link add возвращает ошибку | Убедитесь, что ядро собрано с поддержкой RXE (CONFIG_RDMA_RXE=y). В Docker может потребоваться --privileged и загрузка модулей. |
| Тесты gdrcopy падают с ошибкой доступа к GPU | Запускайте от root или добавьте пользователя в группу video. Убедитесь, что nvidia-peermem загружен. |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| 1. Проверка оборудования и драйверов | 20-30 мин |
| 2. Установка и настройка драйверов RDMA | 30-60 мин |
| 3. Диагностика топологии GPU и RDMA | 20-30 мин |
| 4. Проверка RDMA-доступности GPU памяти | 30-40 мин |
| 5. Финальная верификация и документирование | 15-20 мин |
| Итого (реальный стенд) | ~2-3 часа |
| Итого (симуляция Soft-RoCE) | ~1.5-2 часа |
Примечание Время для первого раза может увеличиться в два раза из-за необходимости разобраться с нюансами установки драйверов и Soft-RoCE. Планируйте резерв.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 45 | Что такое GPU Direct RDMA и как оно ускоряет распределённое обучение? |
| 78 | Настройка NVIDIA NCCL для работы с InfiniBand |
| 112 | Как проверить совместимость GPU и IB-адаптера по PCIe топологии? |
| 189 | Установка драйверов NVIDIA в Ubuntu 22.04 |
| 203 | Установка Mellanox OFED из репозитория |
| 267 | Soft-RoCE: эмуляция RDMA без физического адаптера |
| 319 | Команды ibv_devinfo и ibstatus: расшифровка вывода |
| 425 | Ошибки nvidia-peermem: причины и исправление |
| 511 | gdrcopy: пример программы для проверки GPU Direct RDMA |
| 674 | Оптимизация PCIe расположения GPU и HCA для ML-кластеров |
10. Чек-лист самопроверки
- Я проверил, что
lspciнаходит GPU и InfiniBand/RDMA адаптер. - Я установил и загрузил модули
nvidia,mlx5_ib,ib_uverbs(илиrdma_rxeдля симуляции). - Я выполнил
ibv_devinfoи убедился, что вижу активное RDMA-устройство. - Я запустил
nvidia-smi topo -mи интерпретировал матрицу (нашёлPIXхотя бы для одной пары GPU–NIC при реальной HCA или зафиксировал отсутствие ошибок). - Я установил
gdrcopy, скомпилировал и запустилcopytest— он завершился без ошибок. - Я сохранил вывод всех ключевых команд в файл и оформил отчёт.