Почему NVIDIA GPUDirect RDMA медленнее при отправке данных с графического процессора на сетевой адаптер, чем в обратном направлении?

У меня есть два узла с процессором AMD EPYC 7452, графическим процессором NVIDIA V100 и сетевой картой Mellanox ConnectX-6. Я реализовал простой тест RDMA, используя IB Verbs API и NVIDIA GPUDirect. Вот результат:

                            Direction         : Node 1 <- Node 2    Node 1 -> Node 2
Node 1 CPU memory <-> Node 2 CPU memory : 24.480147 GB/s      24.532782 GB/s
Node 1 GPU memory <-> Node 2 CPU memory : 14.291703 GB/s      6.113229 GB/s
Node 1 GPU memory <-> Node 2 GPU memory : 6.122043 GB/s       6.128194 GB/s
Node 1 CPU memory <-> Node 2 GPU memory : 6.104582 GB/s       14.295329 GB/s
  • ~ 24 ГБ / с - это пропускная способность, ограниченная IB HDR, поэтому она ожидаема. (200 Гбит / с = 25 ГБ / с)
  • ~14 ГБ / с - это пропускная способность, ограниченная PCIe Gen 3, поэтому она ожидаема. (около 16 ГБ / с)
  • Неожиданные числа ~ 6 ГБ / с.

Короче говоря, производительность снижается, когда пути RDMA занимают GPU -> NIC, т. е. читать с графических процессоров. NIC -> GPUпуть не вредит производительности. NCCL, популярная коммуникационная библиотека, также, похоже, распознает это явление и отключает RDMA по умолчанию на платформе PCIe при отправке данных с графического процессора. (Ссылка)

У меня вопрос, в чем может быть основная причина снижения производительности? Как вообще может быть затронуто только одно направление?

0 ответов

Другие вопросы по тегам