类型

NCCL 库使用以下类型。

ncclComm_t

ncclComm_t

NCCL 通信器。指向 NCCL 内部的不透明结构。

ncclResult_t

ncclResult_t

所有 NCCL 函数的返回值。可能的值为

ncclSuccess

(0) 函数成功。

ncclUnhandledCudaError

(1) 调用 CUDA 函数失败。

ncclSystemError

(2) 系统调用失败。

ncclInternalError

(3) 内部检查失败。这可能是由于 NCCL 中的错误或内存损坏造成的。

ncclInvalidArgument

(4) 参数具有无效值。

ncclInvalidUsage

(5) 对 NCCL 的调用不正确。这通常反映了编程错误。

ncclRemoteError

(6) 调用失败,可能是由于网络错误或远程进程过早退出。

ncclInProgress

(7) 通信器上的 NCCL 操作正在排队,并在后台进行。

每当函数返回错误(既不是 ncclSuccess 也不是 ncclInProgress)时,当环境变量 NCCL_DEBUG 设置为 “WARN” 时,NCCL 应该打印更详细的消息。

ncclDataType_t

ncclDataType_t

NCCL 定义了以下整数和浮点数据类型。

ncclInt8

有符号 8 位整数

ncclChar

有符号 8 位整数

ncclUint8

无符号 8 位整数

ncclInt32

有符号 32 位整数

ncclInt

有符号 32 位整数

ncclUint32

无符号 32 位整数

ncclInt64

有符号 64 位整数

ncclUint64

无符号 64 位整数

ncclFloat16

16 位浮点数(半精度)

ncclHalf

16 位浮点数(半精度)

ncclFloat32

32 位浮点数(单精度)

ncclFloat

32 位浮点数(单精度)

ncclFloat64

64 位浮点数(双精度)

ncclDouble

64 位浮点数(双精度)

ncclBfloat16

16 位浮点数(bfloat16 格式的截断精度,CUDA 11 或更高版本)

ncclFloat8e4m3

8 位浮点数,4 位指数位,3 位尾数位 (CUDA >= 11.8 和 SM >= 90)

ncclFloat8e5m2

8 位浮点数,5 位指数位,2 位尾数位 (CUDA >= 11.8 和 SM >= 90)

ncclRedOp_t

ncclRedOp_t

定义归约操作。

ncclSum

执行求和 (+) 操作

ncclProd

执行乘积 (*) 操作

ncclMin

执行最小值操作

ncclMax

执行最大值操作

ncclAvg

执行平均值操作,即所有 rank 的总和,除以 rank 的数量。

ncclScalarResidence_t

ncclScalarResidence_t

指示标量参数驻留在哪里(内存空间),以及何时可以取消引用它们。

ncclScalarHostImmediate

标量驻留在主机内存中,应以最直接的方式取消引用。

ncclScalarDevice

标量驻留在设备可见内存中,应在需要时取消引用。

ncclConfig_t

ncclConfig_t

用户可以设置的基于结构的配置,用于初始化通信器;新创建的配置必须由 NCCL_CONFIG_INITIALIZER 初始化。

NCCL_CONFIG_INITIALIZER

配置宏初始化器,必须将其分配给新创建的配置。

blocking

此属性可以设置为整数 0 或 1,分别表示非阻塞或阻塞通信器行为。阻塞是默认行为。

cgaClusterSize

设置 NCCL 启动的内核的协同组阵列 (CGA) 大小。此属性可以设置为 0 到 8 之间的整数,默认值为 4 (对于 sm90 架构) 和 0 (对于较旧的架构)。

minCTAs

设置 NCCL 应为每个内核使用的最小 CTA 数量。设置为正整数值,最大为 32。默认值为 1。

maxCTAs

设置 NCCL 应为每个内核使用的最大 CTA 数量。设置为正整数值,最大为 32。默认值为 32。

netName

指定 NCCL 应用于网络通信的网络模块名称。netName 的值必须与网络模块的名称完全匹配(不区分大小写)。NCCL 内部网络模块名称为 “IB”(通用 IB verbs)和 “Socket”(TCP/IP 套接字)。外部网络插件定义了自己的名称。默认值未定义,NCCL 将自动选择网络模块。

splitShare

指定在通信器拆分期间是否与子通信器共享资源。将 splitShare 的值设置为 0 或 1。默认值为 0。当父通信器在 ncclCommInitRankConfig 期间使用 splitShare=1 创建时,子通信器可以在通信器拆分期间共享父通信器的内部资源。拆分的通信器属于同一族。当资源共享时,中止任何通信器都可能导致同一族中的其他通信器变得不可用。无论是否共享资源,用户都应始终中止/销毁所有不再需要的通信器,以释放资源。

ncclSimInfo_t

ncclSimInfo_t

此结构将由 ncclGroupSimulateEnd() 使用,以返回有关调用的信息。

NCCL_SIM_INFO_INITIALIZER

NCCL_SIM_INFO_INITIALIZER 是配置宏初始化器,必须将其分配给新创建的 ncclSimInfo_t 结构。

estimatedTime

组调用中操作的估计时间将在此属性中返回。