双机双卡训练yolov5(yolov5+pytorch+DDP+NCCL+RDMA全栈解析)

重点关注问题:

1、nvidia-smi topo -m 是怎么获取topo结构的?调用了什么api?

2、以下接口有什么用,怎么实现的?

nvmlDeveiceGetNvLinkVersion

nvmlDeveiceGetNvLinkCapability

nvmlDeveiceGetNvLinkState

nvmlDeveiceGetNvLinkErrorCounter

nvmlDeveiceResetNvLinkErrorCounters

nvmlDeveiceGetNvLinkRemotePciInfo

nvmlDeveiceGetP2PStatus

3、单机单进程P2P场景使用一下接口,具体有什么用,怎么实现的?

cudaDeviceCanAccessPeer

cudaDeviceEnablePeerAccess

cudaMemcpyPeer

4、以下是单机多进程P2P,具体有什么用,怎么实现的?

cudaIpcGetMemHandle

cudaIpcOpenMemHandle

cudaIpcCloseMemHandle

cudaIpcGetEventHandle

cudaIpcOpenEventHandle

5、NCCL是怎么获取topo结构的?

6、NCCL通过nvml获取本地拓扑,多机拓扑是怎么获取的呢?

7、pytorch如何调用DDP?

8、DDP如何调用NCCP?

9、NCCL如何调用RDMA?

10、怎么理解RING和TREE?