For such a small cluster I think 25 GBe should be enough, but it depends on the size of your model and the parameter gradients that need to be synchronized. GPUDirect RDMA and GPUDirect storage are not absolutely necessary to use DDP. It would be best to consider measuring the DDP forward, backward, and optimizer step delay, then find the bottleneck and see if you can optimize from there.