nccl-reader / nccl

Optimized primitives for collective multi-GPU communication
Other
3 stars 0 forks source link

[miyamoto] 読み進めメモ #8

Open DaisukeMiyamoto opened 5 years ago

DaisukeMiyamoto commented 5 years ago

目的: EFA (Elastic Fabric Adapter) 実装の深堀り。

EFAのドライバはlibfabric内でプロバイダとして提供されている。 NCCL自体は、デフォルトではlibfabricを使用していないため、NCCLのplug-inとして、aws-ofi-nccl (https://github.com/aws/aws-ofi-nccl) が提供されている。

疑問:NCCLのplug-inとはなにか。どういう実装か

DaisukeMiyamoto commented 5 years ago

マッピングはここでやっている。 この関数群を実装すれば、デバイス側は置き換えられる?

https://github.com/aws/aws-ofi-nccl/blob/master/src/nccl_ofi_net.c#L1450

const ncclNet_t NCCL_PLUGIN_SYMBOL = {
    .name = "AWS Libfabric",
    .init = ofi_init,
    .devices = ofi_devices,
    .pciPath = ofi_pciPath,
    .ptrSupport = ofi_ptrSupport,
    .listen = ofi_listen,
    .connect = ofi_connect,
    .accept = ofi_accept,
    .regMr = ofi_regMr,
    .deregMr = ofi_deregMr,
    .isend = ofi_isend,
    .irecv = ofi_irecv,
    .flush = ofi_flush,
    .test = ofi_test,
    .closeSend = ofi_closeSend,
    .closeRecv = ofi_closeRecv,
    .closeListen = ofi_closeListen,
};

NCCL側はこらへん

https://github.com/NVIDIA/nccl/blob/9db4b1d801624a00591b7aafd426d6dd23547443/ext-net/dummy/plugin.c

おおよそ

に対応しそう?

DaisukeMiyamoto commented 5 years ago

https://github.com/aws/aws-ofi-nccl/blob/657f438c80f68542ec272d38074dac2feaddca39/src/nccl_ofi_net.c#L678-L682

気になるコメント

DaisukeMiyamoto commented 5 years ago

ringの作り方

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/misc/rings.cc#L67-L101

DaisukeMiyamoto commented 5 years ago

plug-in関係、結局 net_ib.ccnet_socket.cc も最終的に ncclNet_t 型の構造体?を作ってる。

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/transport/net_ib.cc#L849-L867

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/include/nccl_net.h#L61-L106

DaisukeMiyamoto commented 5 years ago

GPU Directのサポート

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/transport/net.cc#L249-L282

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/transport/net_socket.cc#L50-L53

https://github.com/nccl-reader/nccl/blob/0ceaec9cee96ae7658aa45686853286651f36384/src/transport/net_ib.cc#L218-L231

https://github.com/aws/aws-ofi-nccl/blob/master/src/nccl_ofi_net.c#L770

static ncclResult_t ofi_ptrSupport(int dev, int *supportedTypes)
{
    *supportedTypes = NCCL_PTR_HOST;
    return ncclSuccess;
}