/ / Cómo usar GPUDirect RDMA con Infiniband - cuda, openmpi, infiniband, gpudirect

Cómo usar GPUDirect RDMA con Infiniband - cuda, openmpi, infiniband, gpudirect

Tengo dos máquinas. Hay múltiples tarjetas de Tesla en cada máquina. También hay una tarjeta InfiniBand en cada máquina. Quiero comunicarme entre las tarjetas de GPU en diferentes máquinas a través de InfiniBand. Solo punto a punto unicast estaría bien. Seguramente quiero usar GPUDirect RDMA para poder ahorrar operaciones de copia adicionales.

Soy consciente de que hay una conductor disponible ahora de Mellanox para su InfiniBandtarjetas Pero no ofrece una guía de desarrollo detallada. También soy consciente de que OpenMPI tiene soporte para la función que estoy preguntando. Pero OpenMPI es demasiado pesado para esta tarea simple y no admite múltiples GPU en un solo proceso.

Me pregunto si podría obtener ayuda directamenteUtilizando el driver para realizar la comunicación. Ejemplo de código, tutorial, cualquier cosa sería buena. Además, agradecería que alguien me ayudara a encontrar el código que trata esto en OpenMPI.

Respuestas

6 para la respuesta № 1

Para que GPUDirect RDMA funcione, necesita lo siguiente instalado:

Todo lo anterior debe ser instalado (por laorden listado arriba), y los módulos relevantes cargados. Después de eso, debería poder registrar la memoria asignada en la memoria de video de la GPU para las transacciones RDMA. El código de muestra se verá así:

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);

Esto creará (en un sistema habilitado con RDMA GPUDirect) una región de memoria, con una clave de memoria válida que puede utilizar para las transacciones RDMA con nuestro HCA.

Para obtener más detalles sobre el uso de verbos RDMA e InfiniBand en su código, puede consultar este documento.