MPI с поддержкой CUDA для двух графических процессоров в одном K80

Я пытаюсь оптимизировать производительность теста MPI+CUDA под названием LAMMPS (https://github.com/lammps/lammps ). Прямо сейчас я работаю с двумя процессами MPI и двумя графическими процессорами. Моя система имеет две розетки, и каждая розетка подключается к 2 K80. Поскольку каждый K80 содержит 2 графических процессора внутри, каждый сокет фактически подключается к 4 графическим процессорам. Но я использую только 2 ядра в одном сокете и 2 графических процессора (1 K80), подключенных к этому сокету. Компилятор MPI — MVAPICH2 2.2rc1, а версия компилятора CUDA — 7.5.

Это был фон. Я профилировал приложение и обнаружил, что связь является узким местом в производительности. И я подозреваю, что это потому, что не применялась технология GPUDirect. Поэтому я переключаюсь на MVAPICH2-GDR 2.2rc1 и устанавливаю все остальные необходимые библиотеки и инструменты. Но для MVAPICH2-GDR требуется интерфейсная карта Infiniband, которая недоступна в моей системе, поэтому у меня возникает ошибка времени выполнения «ошибка инициализации канала. В системе не найдено активных HCA». Насколько я понимаю, карта Infiniband не требуется, если мы хотим использовать только графические процессоры в пределах 1 K80 на одном узле, потому что K80 имеет внутренний переключатель PCIe для этих двух графических процессоров. Это мои сомнения. Чтобы вопросы были ясны, я перечислю их следующим образом:

  1. В моей системе одна розетка подключается к двум К80. Если два графических процессора в одном K80 должны обмениваться данными с графическими процессорами в другом K80, то у нас должна быть карта IB, если мы хотим использовать GPUDirect, верно?

  2. Если нам нужно использовать только два графических процессора в пределах 1 K80, то для связи между этими двумя графическими процессорами не требуется карта IB, верно? Однако для MVAPICH2-GDR требуется как минимум одна карта IB. Так есть ли обходной путь для решения этой проблемы? Или мне нужно подключить карту IB к системе?


person silence_lamb    schedule 21.07.2016    source источник


Ответы (1)


В моей системе одна розетка подключается к двум К80. Если два графических процессора в одном K80 должны обмениваться данными с графическими процессорами в другом K80, то у нас должна быть карта IB, если мы хотим использовать GPUDirect, верно?

Карта IB необходима только тогда, когда у вас есть MPI-коммуникации (GPU или что-то еще), которые передаются от системы к системе. Графическим процессорам в одной системе не требуется наличие карты IB для связи друг с другом. Дополнительная информация об использовании GPUDirect в этом (односистемном) параметре приведена ниже.

Если нам нужно использовать только два графических процессора в пределах 1 K80, то для связи между этими двумя графическими процессорами не требуется карта IB, верно? Однако для MVAPICH2-GDR требуется как минимум одна карта IB. Так есть ли обходной путь для решения этой проблемы? Или мне нужно подключить карту IB к системе?

GDR в MVAPICH2-GDR относится к GPUDirect-RDMA. GPUDirect — это общий термин для набора технологий, позволяющих графическим процессорам напрямую взаимодействовать друг с другом.

Для GPU в одной системе технология GPUDirect называется Peer-to-Peer. Два графических процессора на K80 всегда должны иметь возможность взаимодействовать друг с другом с помощью одноранговой связи, и вы можете проверить это самостоятельно, используя примеры кодов CUDA, в имени которых есть P2P, например простой P2P. Этот пример кода также сообщит вам, может ли ваша система поддерживать P2P между любыми двумя графическими процессорами в одной системе.

Для графических процессоров в отдельных системах, соединенных сетью IB (Infiniband), существует дополнительная технология GPUDirect, называемая GPUDirect-RDMA. Это позволяет двум графическим процессорам в отдельных системах взаимодействовать друг с другом по каналу IB.

Итак, поскольку MVAPICH2-GDR включает в себя GPUDirect RDMA, относящийся к IB, он, вероятно, по умолчанию будет искать карту IB.

Однако вы должны быть в состоянии получить преимущества связи, используя MPI с поддержкой GPUDirect (включая некоторые варианты MVAPICH2) даже между графическими процессорами в одной системе, например, с K80. Этот тип использования просто называется «MPI с поддержкой CUDA», потому что он использует GPUDirect P2P, но не обязательно RDMA.

Подробное руководство и пошаговое руководство о том, как это настроить, выходит за рамки того, что я могу предложить в ответе SO, но для получения дополнительной информации об этом виде использования я бы отослал вас к двум статьям в блоге, которые подробно освещают эту тему, первая из них здесь, вторая часть здесь. Дополнительная информация о GPUDirect-RDMA находится здесь .

person Robert Crovella    schedule 21.07.2016
comment
Спасибо, Роберт. Вы объясняете очень ясно. Наконец я понимаю различия и связи между этими терминами. - person silence_lamb; 21.07.2016