Настройка GPUDirect для infiniband

Я пытаюсь настроить GPUDirect для использования вызовов rdma глаголов infiniband непосредственно в памяти устройства без необходимости использовать cudaMemcpy. У меня 2 машины с видеокартами nvidia k80 каждая с версией драйвера 367.27. CUDA8 установлен и Mellanox OFED 3.4 Также установлен плагин Mellanox-nvidia GPUDirect:

-bash-4.2$ service nv_peer_mem status
nv_peer_mem module is loaded.

Согласно этой теме " Как использовать GPUDirect RDMA с Infiniband" у меня есть все требования для GPUDirect, и следующий код должен успешно работать. Но это не так, и ibv_reg_mr завершается с ошибкой "Bad Address", как будто GPUDirect не установлен должным образом.

void * gpu_buffer;
struct ibv_mr *mr;
const int size = 64*1024;
cudaMalloc(&gpu_buffer,size); // TODO: Check errors
mr = ibv_reg_mr(pd,gpu_buffer,size,IBV_ACCESS_LOCAL_WRITE|IBV_ACCESS_REMOTE_WRITE|IBV_ACCESS_REMOTE_READ);

Запрашиваемая информация:
mlx5 используется.
Последний журнал ядра:

[Nov14 09:49] mlx5_warn:mlx5_0:mlx5_ib_reg_user_mr:1418:(pid 4430): umem get failed (-14)

Я что-то пропустил? Нужны ли мне какие-то другие пакеты или я должен как-то активировать GPUDirect в моем коде?

1 ответ

Решение

Распространенной причиной сбоя модуля nv_peer_mem является взаимодействие с Unified Memory (UVM). Не могли бы вы попробовать отключить UVM:

export CUDA_DISABLE_UNIFIED_MEMORY=1

?

Если это не решит вашу проблему, попробуйте запустить validation а также copybw тесты с https://github.com/NVIDIA/gdrcopy для проверки GPUDirectRDMA. Если это работает, то ваш стек Mellanox неправильно настроен.

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