From 309cea4ba8684f5503887cea068acca79b76408c Mon Sep 17 00:00:00 2001 From: yexiang-aws Date: Thu, 23 Jan 2025 08:11:46 +0000 Subject: [PATCH] Import headers from NCCL v2.24.3 --- 3rd-party/Makefile.am | 1 + 3rd-party/nccl/cuda/include/nccl/net.h | 3 + 3rd-party/nccl/cuda/include/nccl/net_device.h | 3 +- 3rd-party/nccl/cuda/include/nccl/net_v8.h | 2 - 3rd-party/nccl/cuda/include/nccl/net_v9.h | 99 +++++++++++++++++++ 3rd-party/nccl/neuron/include/nccl/net.h | 2 + 6 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 3rd-party/nccl/cuda/include/nccl/net_v9.h diff --git a/3rd-party/Makefile.am b/3rd-party/Makefile.am index 1b9f38cb6..3f48ce442 100644 --- a/3rd-party/Makefile.am +++ b/3rd-party/Makefile.am @@ -15,6 +15,7 @@ noinst_HEADERS = \ nccl/cuda/include/nccl/net_v6.h \ nccl/cuda/include/nccl/net_v7.h \ nccl/cuda/include/nccl/net_v8.h \ + nccl/cuda/include/nccl/net_v9.h \ nccl/cuda/include/nccl/tuner.h \ nccl/cuda/include/nccl/tuner_v1.h \ nccl/cuda/include/nccl/tuner_v2.h \ diff --git a/3rd-party/nccl/cuda/include/nccl/net.h b/3rd-party/nccl/cuda/include/nccl/net.h index 2f455c60f..797244fd1 100644 --- a/3rd-party/nccl/cuda/include/nccl/net.h +++ b/3rd-party/nccl/cuda/include/nccl/net.h @@ -11,6 +11,8 @@ #include "err.h" #define NCCL_NET_HANDLE_MAXSIZE 128 +#define NCCL_MAX_NET_SIZE_BYTES (1*1024*1024*1024*1024L) //1TB +#define NCCL_NET_OPTIONAL_RECV_COMPLETION 0x1 #define NCCL_PTR_HOST 0x1 #define NCCL_PTR_CUDA 0x2 @@ -24,6 +26,7 @@ typedef enum {NCCL_INIT=1, NCCL_COLL=2, NCCL_P2P=4, NCCL_SHM=8, NCCL_NET=16, NCC typedef void (*ncclDebugLogger_t)(ncclDebugLogLevel level, unsigned long flags, const char *file, int line, const char *fmt, ...); +#include "net_v9.h" #include "net_v8.h" #include "net_v7.h" #include "net_v6.h" diff --git a/3rd-party/nccl/cuda/include/nccl/net_device.h b/3rd-party/nccl/cuda/include/nccl/net_device.h index a0b84c765..b7c045581 100644 --- a/3rd-party/nccl/cuda/include/nccl/net_device.h +++ b/3rd-party/nccl/cuda/include/nccl/net_device.h @@ -27,6 +27,7 @@ typedef struct { } ncclNetDeviceHandle_v7_t; typedef ncclNetDeviceHandle_v7_t ncclNetDeviceHandle_v8_t; -typedef ncclNetDeviceHandle_v7_t ncclNetDeviceHandle_t; +typedef ncclNetDeviceHandle_v8_t ncclNetDeviceHandle_v9_t; +typedef ncclNetDeviceHandle_v9_t ncclNetDeviceHandle_t; #endif diff --git a/3rd-party/nccl/cuda/include/nccl/net_v8.h b/3rd-party/nccl/cuda/include/nccl/net_v8.h index 316155820..54a61f61b 100644 --- a/3rd-party/nccl/cuda/include/nccl/net_v8.h +++ b/3rd-party/nccl/cuda/include/nccl/net_v8.h @@ -23,8 +23,6 @@ typedef struct { int netDeviceVersion; // Version number for network offload } ncclNetProperties_v8_t; -typedef ncclNetProperties_v8_t ncclNetProperties_t; - typedef struct { // Name of the network (mainly for logs) const char* name; diff --git a/3rd-party/nccl/cuda/include/nccl/net_v9.h b/3rd-party/nccl/cuda/include/nccl/net_v9.h new file mode 100644 index 000000000..61035ecc9 --- /dev/null +++ b/3rd-party/nccl/cuda/include/nccl/net_v9.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. + */ + +#ifndef NCCL_NET_V9_H_ +#define NCCL_NET_V9_H_ + +#include "net_device.h" + +#define NCCL_NET_MAX_DEVS_PER_NIC_V9 4 +#define NCCL_NET_MAX_DEVS_PER_NIC NCCL_NET_MAX_DEVS_PER_NIC_V9 +typedef struct { + int ndevs; + int devs[NCCL_NET_MAX_DEVS_PER_NIC_V9]; +} ncclNetVDeviceProps_v9_t; +typedef ncclNetVDeviceProps_v9_t ncclNetVDeviceProps_t; + +typedef struct { + char* name; // Used mostly for logging. + char* pciPath; // Path to the PCI device in /sys. + uint64_t guid; // Unique identifier for the NIC chip. Important for + // cards with multiple PCI functions (Physical or virtual). + int ptrSupport; // [NCCL_PTR_HOST|NCCL_PTR_CUDA|NCCL_PTR_DMABUF] + int regIsGlobal; // regMr is not tied to a particular comm + int forceFlush; // Force a flush on receives + int speed; // Port speed in Mbps. + int port; // Port number. + float latency; // Network latency + int maxComms; // Maximum number of comms we can create + int maxRecvs; // Maximum number of grouped receives. + ncclNetDeviceType netDeviceType; // Network offload type + int netDeviceVersion; // Version number for network offload + ncclNetVDeviceProps_v9_t vProps; + size_t maxP2pBytes; // Max transfer size for point-to-point operations + size_t maxCollBytes; // Max transfer size for collective operations +} ncclNetProperties_v9_t; + +typedef ncclNetProperties_v9_t ncclNetProperties_t; + +typedef struct { + // Name of the network (mainly for logs) + const char* name; + // Initialize the network. + ncclResult_t (*init)(ncclDebugLogger_t logFunction); + // Return the number of adapters. + ncclResult_t (*devices)(int* ndev); + // Get various device properties. + ncclResult_t (*getProperties)(int dev, ncclNetProperties_v9_t* props); + // Create a receiving object and provide a handle to connect to it. The + // handle can be up to NCCL_NET_HANDLE_MAXSIZE bytes and will be exchanged + // between ranks to create a connection. + ncclResult_t (*listen)(int dev, void* handle, void** listenComm); + // Connect to a handle and return a sending comm object for that peer. + // This call must not block for the connection to be established, and instead + // should return successfully with sendComm == NULL with the expectation that + // it will be called again until sendComm != NULL. + // If *sendDevComm points to a valid object, then NCCL is requesting device offload for this connection + ncclResult_t (*connect)(int dev, void* handle, void** sendComm, ncclNetDeviceHandle_v9_t** sendDevComm); + // Finalize connection establishment after remote peer has called connect. + // This call must not block for the connection to be established, and instead + // should return successfully with recvComm == NULL with the expectation that + // it will be called again until recvComm != NULL. + // If *recvDevComm points to a valid object, then NCCL is requesting device offload for this connection + ncclResult_t (*accept)(void* listenComm, void** recvComm, ncclNetDeviceHandle_v9_t** recvDevComm); + // Register/Deregister memory. Comm can be either a sendComm or a recvComm. + // Type is either NCCL_PTR_HOST or NCCL_PTR_CUDA. + ncclResult_t (*regMr)(void* comm, void* data, size_t size, int type, void** mhandle); + /* DMA-BUF support */ + ncclResult_t (*regMrDmaBuf)(void* comm, void* data, size_t size, int type, uint64_t offset, int fd, void** mhandle); + ncclResult_t (*deregMr)(void* comm, void* mhandle); + // Asynchronous send to a peer. + // May return request == NULL if the call cannot be performed (or would block) + ncclResult_t (*isend)(void* sendComm, void* data, size_t size, int tag, void* mhandle, void** request); + // Asynchronous recv from a peer. + // May return request == NULL if the call cannot be performed (or would block) + ncclResult_t (*irecv)(void* recvComm, int n, void** data, size_t* sizes, int* tags, void** mhandles, void** request); + // Perform a flush/fence to make sure all data received with NCCL_PTR_CUDA is + // visible to the GPU + ncclResult_t (*iflush)(void* recvComm, int n, void** data, int* sizes, void** mhandles, void** request); + // Test whether a request is complete. If size is not NULL, it returns the + // number of bytes sent/received. + ncclResult_t (*test)(void* request, int* done, int* sizes); + // Close and free send/recv comm objects + ncclResult_t (*closeSend)(void* sendComm); + ncclResult_t (*closeRecv)(void* recvComm); + ncclResult_t (*closeListen)(void* listenComm); + + // Copy the given mhandle to a dptr in a format usable by this plugin's device code + ncclResult_t (*getDeviceMr)(void* comm, void* mhandle, void** dptr_mhandle); + + // Notify the plugin that a recv has completed by the device + ncclResult_t (*irecvConsumed)(void* recvComm, int n, void* request); + + // Virtual NIC APIs. makeVDevice will create a virtual NIC given the specified properties, and tell the caller + // what index this new vNIC exists at + ncclResult_t (*makeVDevice)(int* d, ncclNetVDeviceProps_t* props); +} ncclNet_v9_t; + +#endif // end include guard diff --git a/3rd-party/nccl/neuron/include/nccl/net.h b/3rd-party/nccl/neuron/include/nccl/net.h index 1ebd2be35..8c10dcd4b 100644 --- a/3rd-party/nccl/neuron/include/nccl/net.h +++ b/3rd-party/nccl/neuron/include/nccl/net.h @@ -24,6 +24,8 @@ extern "C" { // Maximum number of requests per comm object #define NCCL_NET_MAX_REQUESTS 128 +#define NCCL_NET_OPTIONAL_RECV_COMPLETION 0x1 + typedef enum { NCCL_LOG_NONE=0, NCCL_LOG_VERSION=1,