NvLink или PCIe, как указать межсоединение?

Мой кластер оснащен как Nvlink, так и PCIe. Все графические процессоры (V100) могут связываться напрямую через PCIe или NvLink. Насколько мне известно, и коммутатор PCIe, и Nvlink могут поддерживать прямую связь через CUDA.

Теперь я хочу сравнить производительность одноранговой связи PCIe и NvLink. Тем не менее, я не знаю, как указать один, кажется, CUDA всегда будет автоматически указывать один. Кто-нибудь может мне помочь?

2 ответа

Решение

Если два графических процессора в CUDA имеют прямое соединение NVLink между ними, и вы включаете одноранговые передачи, эти передачи будут проходить через NVLink. В CUDA нет какого-либо способа изменить это поведение.

Если вы не включаете одноранговые передачи, то переносы данных (например, cudaMemcpy, cudaMemcpyAsync, cudaMemcpyPeerAsync) между этими двумя устройствами будет течь от исходного GPU через PCIE к сокету процессора (возможно, проходя через промежуточные коммутаторы PCIE, возможно, также проходя по каналу уровня сокета, например, QPI), а затем через PCIE от сокета процессора к другому GPU, Всегда будет задействован, по крайней мере, один сокет ЦП, даже если через структуру PCIE существует более короткий прямой путь. Это поведение также не может быть изменено любым способом, доступным для программиста.

Обе методологии демонстрируются с использованием p2pBandwidthLatencyTest Пример кода CUDA.

Принятый ответ — от сотрудника NVIDIA — был правильным в 2018 году. Но в какой-то момент NVIDIA добавила (недокументированную?) опцию в драйвер.

В Linux теперь вы можете поместить это в /etc/modprobe.d/disable-nvlink.conf:

      options nvidia NVreg_NvLinkDisable=1

Это отключит NVLink при следующей загрузке драйвера, заставив одноранговую связь GPU использовать межсоединение PCIe. Этот гаджет существует в драйвере 515.65.01 (CUDA 11.7.1). Я не уверен, когда он был добавлен.

Что касается «нет причин позволять конечному пользователю выбирать более медленный путь» , само существование этого вопроса SO предполагает обратное. В моем случае мы покупаем не один сервер, а десятки... И в процессе выбора нашей конфигурации приятно использовать один-единственный прототип системы для бенчмарка нашего приложения либо по NVLink, либо по PCIe.

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