Как я могу определить, использует ли NCCL сетевой интерфейс P CIe или IB при выполнении AllReduce? - PullRequest
0 голосов
/ 06 марта 2020

Я новичок в NCCL. В последнее время я тестировал примеры, приведенные в [url] https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/examples.html#example -2-one-device-per-process-or-thread [/ url]

Вот так я запускаю два процесса: mpirun -n 2 ./my_nccl, в которых my_nccl - исполняемый файл, скомпилированный из примера.

Я добавил sleep (600) сразу после ncclAllReduce функция, так что я могу контролировать состояние сети. Затем я обнаружил это:

tcp        0      0 <IB ip>:50928      0.0.0.0:*               LISTEN      42060/my_nccl
tcp        0      0 0.0.0.0:1024       0.0.0.0:*               LISTEN      42059/my_nccl
tcp        0      0 <IB ip>:56193      0.0.0.0:*               LISTEN      42059/my_nccl
tcp        0      0 0.0.0.0:1025       0.0.0.0:*               LISTEN      42060/my_nccl
tcp        0      0 127.0.0.1:40708    127.0.0.1:35753         ESTABLISHED 42060/my_nccl
tcp        0      0 <IB ip>:51550     <IB ip>:56193            ESTABLISHED 42060/my_nccl
tcp        0      0 <IB ip>:36210     <IB ip>:50928            ESTABLISHED 42059/my_nccl
tcp        0      0 <IB ip>:56193     <IB ip>:51550            ESTABLISHED 42059/my_nccl
tcp        0      0 127.0.0.1:40710    127.0.0.1:35753         ESTABLISHED 42059/my_nccl
tcp        0      0 <IB ip>:50928     <IB ip>:36210            ESTABLISHED 42060/my_nccl
unix  2      [ ACC ]     SEQPACKET  LISTENING     3185032501 42059/my_nccl       @cuda-uvmfd-4026531836-42059
unix  2      [ ACC ]     SEQPACKET  LISTENING     3185036696 42060/my_nccl       @cuda-uvmfd-4026531836-42060
unix  3      [ ]         STREAM     CONNECTED     3185033392 42060/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032487 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185033393 42060/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032488 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185033388 42060/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032494 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032495 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185033385 42060/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185033389 42060/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032490 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185032491 42059/my_nccl
unix  3      [ ]         STREAM     CONNECTED     3185033386 42060/my_nccl

Удаляя функции NCCL в примере кода, я могу сказать, что ip 0.0.0.0 и 127.0.0.1 оба прослушиваются OpenMPI. И, читая код NCCL в ncclGetUniqueId и ncclCommInitRank , я думаю, что NCCL используется для передачи uniqueId, информации о процессе и т. Д. c.

1. Итак, вот мой вопрос: я не могу подтвердить, выполняет ли NCCL AllReduce через интерфейс IB или P CIe между графическими процессорами одного хоста. В соответствии с do c https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/env.html#nccl -socket-ifname я могу контролировать, какой сетевой интерфейс использовать. Но я не могу полностью понять https://docs.nvidia.com/deeplearning/sdk/nccl-developer-guide/docs/env.html#nccl -p2p-level об использовании P CIe. В чем разница между ними в NCCL?

2.Если AllReduce выполняется через P CIe на том же хосте, есть ли какие-либо доказательства или есть ли способ, которым я могу это контролировать?

3.Могу ли я выбрать интерфейс IB для AllReduce или AllGather с помощью переменных среды NCCL?

Вот мое окружение и устройство:

Ubuntu 16.04.6 LTS

NCCL версия 2.4.8 + cuda10.0

cuda Версия драйвера: 410.48

GeForce GTX 1080 Ti

Спасибо!

...