环境变量

标准选项

NVSHMEM_VERSION
类型: bool
默认值: false

启动时打印库版本。

NVSHMEM_INFO
类型: bool
默认值: false

启动时打印环境变量选项。

NVSHMEM_SYMMETRIC_SIZE
类型: size
默认值: 1073741824

指定每个 PE 的对称堆内存大小(以字节为单位)。结果大小由实现定义,并且必须至少与数字前缀和缩放因子的乘积的整数上限一样大。缩放因子允许的字符后缀如下

  • k 或 K 乘以 2^10 (千字节)
  • m 或 M 乘以 2^20 (兆字节)
  • g 或 G 乘以 2^30 (吉字节)
  • t 或 T 乘以 2^40 (太字节)

例如,字符串 ‘20m’ 等效于整数值 20971520,或 20 兆字节。类似地,字符串 ‘3.1M’ 等效于整数值 3250586。仅识别一个乘数,并且忽略乘数后的任何字符,因此 ‘20kk’ 不会产生与 ‘20m’ 相同的结果。使用字符串 ‘.5m’ 将产生与字符串 ‘0.5m’ 相同的结果。NVSHMEM_SYMMETRIC_SIZE 的无效值是一个错误,NVSHMEM 库应通过从 nvshmem_init_thread 返回非零值或导致程序终止来报告此错误。

NVSHMEM_DEBUG
类型: string
默认值: “”

设置为启用调试消息。可选值:VERSION、WARN、INFO、ABORT、TRACE

引导选项

NVSHMEM_BOOTSTRAP
类型: string
默认值: “PMI”

应该用于初始化 NVSHMEM 的默认引导程序的名称。允许的值:PMI、MPI、SHMEM、plugin

NVSHMEM_BOOTSTRAP_PMI
类型: string
默认值: “PMI”

应该用于初始化 NVSHMEM 的 PMI 引导程序的名称。允许的值:PMI、PMI-2、PMIX

NVSHMEM_BOOTSTRAP_PLUGIN
类型: string
默认值: “”

当指定 NVSHMEM_BOOTSTRAP=plugin 时,要加载的引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_MPI_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_mpi.so”

MPI 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_SHMEM_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_shmem.so”

SHMEM 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_PMI_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_pmi.so”

PMI 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_PMI2_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_pmi2.so”

PMI-2 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_PMIX_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_pmix.so”

PMIx 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_UID_PLUGIN
类型: string
默认值: “nvshmem_bootstrap_uid.so”

UID 引导程序插件文件的名称。

NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME
类型: string
默认值: “”

定义一个前缀列表,以过滤 NVSHMEM 要使用的接口。使用 ^ 符号,NVSHMEM 将排除以该列表中的任何前缀开头的接口。要匹配(或不匹配)精确的接口名称而不是前缀,请在字符串前加上 = 字符。

示例:eth:使用所有以 eth 开头的接口,例如 eth0eth1、… =eth0:仅使用接口 eth0 ^docker:不要使用任何以 docker 开头的接口 ^=docker0:不要使用接口 docker0

注意:默认情况下,环回接口 (lo) 和 docker 接口 (docker*) 将不会被选中,除非没有其他可用接口。如果您更喜欢使用 lodocker* 而不是其他接口,您需要使用 NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME 显式选择它们。默认算法还将优先选择以 ib 开头的接口而不是其他接口。设置 NVSHMEM_BOOTSTRAP_UID_SOCK_IFNAME 将绕过自动接口选择算法,并且可以使用与手动选择匹配的所有接口。

NVSHMEM_BOOTSTRAP_UID_SOCK_FAMILY
类型: string
默认值: “AF_INET”

接口所属的套接字族名称。允许的值:AF_INET6、AF_INET

NVSHMEM_BOOTSTRAP_UID_SESSION_ID
类型: string
默认值: “”

UID 会话标识符的名称,由 <ipv4>:<TCP 端口> 或 [<ipv6>]:<TCP 端口> 或 <hostname>:<TCP 端口> 的组合指定。

附加选项

NVSHMEM_DEBUG_FILE
类型: string
默认值: “”

调试输出文件名,可能包含 %h 代表主机名,%p 代表 pid。

NVSHMEM_MAX_TEAMS
类型: long
默认值: 32

允许的最大同时团队数。

NVSHMEM_MAX_MEMORY_PER_GPU
类型: size
默认值: 137438953472

每个 GPU 的最大内存

NVSHMEM_DISABLE_CUDA_VMM
类型: bool
默认值: false

禁用 CUDA VMM 用于 P2P 内存映射。默认情况下,CUDA VMM 在 x86 上启用,在 P9 上禁用。NVSHMEM 中的 CUDA VMM 功能要求 CUDA RT 版本和 CUDA 驱动程序版本大于或等于 11.3。

NVSHMEM_DISABLE_P2P
类型: bool
默认值: false

即使可用,也禁用 GPU 的 P2P 连接。

NVSHMEM_DISABLE_NVLS
类型: bool
默认值: false

即使可用,也禁用通过 NVSwitch 为 P2P 连接的 GPU 提供的 NVLINK SHARP 集合通信。

NVSHMEM_CUMEM_GRANULARITY
类型: size
默认值: 536870912

cuMemAlloc/cuMemCreate 的粒度。

NVSHMEM_CUDA_LIMIT_STACK_SIZE
类型: size
默认值: 0

指定 P9 上每个 GPU 线程的堆栈大小限制。

NVSHMEM_PROXY_REQUEST_BATCH_MAX
类型: int
默认值: 32

代理线程在进度循环的单次迭代中处理的最大请求数。

集合通信选项

NVSHMEM_DISABLE_NCCL
类型: bool
默认值: false

禁用 NCCL 用于集合操作。

NVSHMEM_BARRIER_DISSEM_KVAL
类型: int
默认值: 2

用于屏障操作的分发算法的基数。

NVSHMEM_BARRIER_TG_DISSEM_KVAL
类型: int
默认值: 2

用于线程组屏障的分发算法的基数。

NVSHMEM_FCOLLECT_LL_THRESHOLD
类型: size
默认值: 2048

消息大小阈值,达到此阈值将使用 fcollect LL 算法。

NVSHMEM_BCAST_ALGO
类型: int
默认值: 0
要使用的广播算法。
  • 0 - 使用默认算法选择策略
NVSHMEM_REDMAXLOC_ALGO
类型: int
默认值: 1
要使用的归约算法。
  • 1 - 默认值,标记 alltoall 算法
  • 2 - 平面归约 + 平面广播
  • 3 - 拓扑感知的两级归约 + 拓扑感知广播
NVSHMEM_REDUCE_SCRATCH_SIZE
类型: size_t
默认值: 524288

运行时为每个团队保留的对称堆内存量(最小 16B,8B 的倍数),用于实现 reduce 和 reducescatter 集合通信。

传输选项

NVSHMEM_REMOTE_TRANSPORT
类型: string
默认值: “ibrc”

为远程操作选择的传输:ibrc、ucx、libfabric、ibdevx、none。

NVSHMEM_DISABLE_IB_NATIVE_ATOMICS
类型: bool
默认值: false

禁用 InfiniBand 本地原子操作的使用。

NVSHMEM_DISABLE_GDRCOPY
类型: bool
默认值: false

禁用 IB RC 传输中的 GDRCopy 的使用。

NVSHMEM_ENABLE_NIC_PE_MAPPING
类型: bool
默认值: false

当未设置或设置为 0 时,PE 被分配节点上距离它最近的 NIC。当设置为 1 时,NVSHMEM 要么以循环方式将 NIC 分配给 PE,要么在使用 NVSHMEM_HCA_PE_MAPPINGNVSHMEM_HCA_LIST 时使用它们(如果已指定)。

NVSHMEM_IB_GID_INDEX
类型: int
默认值: -1

ROCE 的源 GID 索引。默认情况下,它会动态发现 NIC 支持的 GID。

NVSHMEM_IB_TRAFFIC_CLASS
类型: int
默认值: 0

ROCE 的流量类别。

NVSHMEM_IB_SL
类型: int
默认值: 0

要在 IB/ROCE 上使用的服务级别。

NVSHMEM_IB_ADDR_FAMILY
类型: string
默认值: AF_INET

NVSHMEM_IB_GID_INDEX 未设置时,与 NVSHMEM 动态选择的 GID 关联的 IP 地址族。

NVSHMEM_IB_ADDR_RANGE
类型: string
默认值: ::/0

定义当 NVSHMEM_IB_GID_INDEX 未设置时,NVSHMEM 动态选择的有效 GID 范围。

NVSHMEM_IB_ROCE_VERSION_NUM
类型: int
默认值: 2

NVSHMEM_IB_GID_INDEX 未设置时,与 NVSHMEM 动态选择的 IB GID 关联的 ROCE 版本。

NVSHMEM_HCA_LIST
类型: string
默认值: “”

要在 NVSHMEM 应用程序中使用的 HCA 的逗号分隔列表。条目的格式为 hca_name:port,例如 mlx5_1:1,mlx5_2:2,并且以 ^ 开头的条目将被排除。NVSHMEM_ENABLE_NIC_PE_MAPPING 必须设置为 1,此变量才能生效。

NVSHMEM_HCA_PE_MAPPING
类型: string
默认值: “”

将 HCA 映射到 PE,形式为逗号分隔列表。逗号分隔列表中的每个条目的格式为 hca_name:port:count。例如,mlx5_0:1:2,mlx5_0:2:2 表示 PE0、PE1 映射到 mlx5_0 的端口 1,PE2、PE3 映射到 mlx5_0 的端口 2。NVSHMEM_ENABLE_NIC_PE_MAPPING 必须设置为 1,此变量才能生效。

NVSHMEM_DISABLE_LOCAL_ONLY_PROXY
类型: bool
默认值: false

在仅 NVLink 配置(无 IB,无 UCX)上运行时,完全禁用代理线程。这将禁用设备端全局退出和设备端等待超时轮询(由 NVSHMEM_TIMEOUT_DEVICE_POLLING 构建时变量启用),因为这些由代理线程处理。

NVSHMEM_LIBFABRIC_PROVIDER
类型: string
默认值: “cxi”

为 libfabric 传输设置功能集提供程序:cxi、efa、verbs

NVSHMEM_IBGDA_NUM_DCT
类型: int
默认值: 2

GPU 发起的通信传输中使用的 DCT QP 的数量。

NVSHMEM_IBGDA_NUM_DCI
类型: int
默认值: 1

GPU 发起的通信传输中使用的 DCI QP 的总数。设置为 0 或负数以使用自动配置。

NVSHMEM_IBGDA_NUM_SHARED_DCI
类型: int
默认值: 1

共享池中 DCI QP 的数量。其余 DCI QP (NVSHMEM_IBGDA_NUM_DCI - NVSHMEM_IBGDA_NUM_SHARED_DCI) 是独占分配的。有效值:[1, NVSHMEM_IBGDA_NUM_DCI]。

NVSHMEM_IBGDA_DCI_MAP_BY
类型: string
默认值: “cta”

指定如何分配独占 DCI QP。选项为:cta、sm、warp、dct。

  • cta:按 CTA ID 循环分配(默认)。
  • sm:按 SM ID 循环分配。
  • warp:按 Warp ID 循环分配。
  • dct:按 DCT ID 循环分配。
NVSHMEM_IBGDA_NUM_RC_PER_PE
类型: int
默认值: 2

GPU 发起的通信传输中每个对等 PE 使用的 RC QP 的数量。设置为 0 以禁用 RC QP(默认值为 2)。如果设置为正数,则 DCI 将仅用于强制实施一致性。

NVSHMEM_IBGDA_RC_MAP_BY
类型: string
默认值: “cta”

指定如何分配 RC QP。选项为:cta、sm、warp。

  • cta:按 CTA ID 循环分配(默认)。
  • sm:按 SM ID 循环分配。
  • warp:按 Warp ID 循环分配。
NVSHMEM_IBGDA_FORCE_NIC_BUF_MEMTYPE
类型: string
默认值: “gpumem”

强制 NIC 缓冲区内存类型。有效选项为:gpumem(默认)、hostmem。对于其他值,请使用自动发现。

NVSHMEM_IBGDA_NUM_REQUESTS_IN_BATCH
类型: int
默认值: 32

在提交到 NIC 之前要批处理的请求数。它将向上舍入到最接近的 2 的幂。设置为 1 表示激进提交。

NVSHMEM_IBGDA_NUM_FETCH_SLOTS_PER_DCI
类型: int
默认值: 1024

每个 DCI QP 的获取操作的内部缓冲区槽数。它将向上舍入到最接近的 2 的幂。

NVSHMEM_IBGDA_NUM_FETCH_SLOTS_PER_RC
类型: int
默认值: 1024

每个 RC QP 的获取操作的内部缓冲区槽数。它将向上舍入到最接近的 2 的幂。

NVSHMEM_IB_ENABLE_IBGDA
类型: bool
默认值: false

设置为启用 GPU 发起的通信传输。

NVSHMEM_IBGDA_NIC_HANDLER
类型: string
默认值: auto

选择用于响铃 NIC 门铃的处理器。选项为 autogpucpu

auto:使用 GPU SM,如果不支持,则回退到 CPU(默认)。gpu:使用 GPU SM。cpu:使用 CPU 代理线程。

NVSHMEM_IB_DISABLE_DMABUF
类型: bool
默认值: false

设置为禁用任何基于 IB 的远程传输中的 DMAbuf。

NVSHMEM_IBGDA_ENABLE_MULTI_PORT
类型: bool
默认值: false

设置为在可用时启用每个 PE 的多个 NIC。

NVTX 选项

NVSHMEM_NVTX
类型: string
默认值: “off”

设置为启用 NVTX instrumentation。接受逗号分隔的 instrumentation 组列表。默认情况下,NVTX instrumentation 处于禁用状态。

init                : library setup
alloc               : memory management
launch              : kernel launch routines
coll                : collective communications
wait                : blocking point-to-point synchronization
wait_on_stream      : point-to-point synchronization (on stream)
test                : non-blocking point-to-point synchronization
memorder            : memory ordering (quiet, fence)
quiet_on_stream     : nvshmemx_quiet_on_stream
atomic_fetch        : fetching atomic memory operations
atomic_set          : non-fetchong atomic memory operations
rma_blocking        : blocking remote memory access operations
rma_nonblocking     : non-blocking remote memory access operations
proxy               : activity of the proxy thread
common              : init,alloc,launch,coll,memorder,wait,atomic_fetch,rma_blocking,proxy
all                 : all groups
off                 : disable all NVTX instrumentation