环境变量
MCCL 提供了一套广泛的环境变量,用于特定用途的调整。
环境变量也可以在 /etc/mccl.conf 中静态设置(由管理员设置系统范围的值)或在 ${MCCL_CONF_FILE} 中设置。例如,这些文件可能包含:
MCCL_DEBUG=WARN
MCCL_SOCKET_IFNAME=ens1f0
环境变量分为两类。有些变量需要使 MCCL 遵循系统特定的配置,并且可以保留在脚 本和系统配置中。"调试" 部分中列出的其他参数在生产环境中不应使用。
系统配置
MCCL_SOCKET_IFNAME
MCCL_SOCKET_IFNAME 变量指定用于通信的 IP 接口。
接受的值
定义为要由 MCCL 使用的接口的前缀列表。
可以提供多个前缀,用 , 符号分隔。
使用 ^ 符号,MCCL 将排除以该列表中任何前缀开头的接口。
要匹配(或不匹配)确切的接口名称,请以前缀字符串以 = 字符开头。
示例:
eth:使用所有以eth开头的接口,例如eth0、eth1...=eth0:仅使用接口eth0=eth0,eth1:仅使用接口eth0和eth1^docker:不使用任何以docker开头的接口^=docker0:不使用接口docker0
注意:默认情况下,回环接口(lo)和 docker 接口(docker*)除非没有其他接口可用,否则不会被选中。
MCCL_SOCKET_FAMILY
MCCL_SOCKET_FAMILY 变量允许用户强制 MCCL 仅使用 IPv4 或 IPv6 接口。
接受的值
设置为 AF_INET 以强制使用 IPv4,或 AF_INET6 以强制使用 IPv6。
MCCL_SOCKET_RETRY_CNT
MCCL_SOCKET_RETRY_CNT 变量指定在 ETIMEDOUT、ECONNREFUSED 或 EHOSTUNREACH 错误后,MCCL 重试建立套接字连接的次数。
接受的值
默认值为 34,任何正数值都是有效的。
MCCL_SOCKET_RETRY_SLEEP_MSEC
MCCL_SOCKET_RETRY_SLEEP_MSEC 变量指定在第一次错误后,MCCL 在重试建立套接字连接前等待的毫秒数。
接受的值
默认值为 100 毫秒,任何 正数值都是有效的。
MCCL_SOCKET_NTHREADS
MCCL_SOCKET_NTHREADS 变量指定每个网络连接使用的 CPU 辅助线程数。增加此值可能会提高套接字传输性能,但代价是更高的 CPU 使用率。
接受的值
1 到 16。默认值为 2。
MCCL_SOCKET_NTHREADS 和 MCCL_NSOCKS_PERTHREAD 的乘积不能超过 64。
MCCL_NSOCKS_PERTHREAD
MCCL_NSOCKS_PERTHREAD 变量指定每个套接字传输辅助线程打开的套接字数。
接受的值
默认值为 8。
MCCL_SOCKET_RCVBUF
MCCL_SOCKET_RCVBUF 变量指定套接字接收缓冲区大小。
接受的值
默认值为 -1(使用系统默认值)。
MCCL_SOCKET_SNDBUF
MCCL_SOCKET_SNDBUF 变量指定套接字发送缓冲区大小。
接受的值
默认值为 -1(使用系统默认值)。
MCCL_SOCKET_INLINE
MCCL_SOCKET_INLINE 变量指定套接字内联传输大小。
接受的值
默认值为 128。
MCCL_SOCKET_MIN_TASKSIZE
MCCL_SOCKET_MIN_TASKSIZE 变量指定套接字最小任务大小。
接受的值
默认值为 65536。
MCCL_CROSS_NIC
MCCL_CROSS_NIC 变量控制 MCCL 是否允许环/树使用不同的 NIC。
接受的值
- 0:始终使用相同的 NIC 进行相同的环/树,以避免交叉网络轨道
- 1:允许为相同的环/树使用不同的 NIC
- 2:(默认)尝试为相同的环/树使用相同的 NIC,但如果使用不同的 NIC 可以带来更好的性能,则仍允许使用不同的 NIC
MCCL_IB_HCA
MCCL_IB_HCA 变量指定用于通信的主机通道适配器(RDMA)接口。
接受的值
列表以逗号分隔;可以使用 : 符号指定端口号。可选前缀 ^ 表示列表是排除列表。第二个可选前缀 = 表示令牌是确切名称。
示例:
mlx5:使用所有以mlx5开头的卡的所有端口=mlx5_0:1,mlx5_1:1:使用卡mlx5_0和mlx5_1的端口 1^=mlx5_1,mlx5_4:不使用卡mlx5_1和mlx5_4
MCCL_IB_TIMEOUT
MCCL_IB_TIMEOUT 变量控制 InfiniBand Verbs 超时。
超时计算为 4.096 µs * 2 ^ timeout。
接受的值
MCCL 使用的默认值为 20。值可以是 1-31。
MCCL_IB_RETRY_CNT
MCCL_IB_RETRY_CNT 变量控制 InfiniBand 重试计数。
接受的值
默认值为 7。
MCCL_IB_GID_INDEX
MCCL_IB_GID_INDEX 变量定义在 RoCE 模式中使用的全局 ID 索引。
接受的值
默认值为 -1。
MCCL_IB_ADDR_FAMILY
MCCL_IB_ADDR_FAMILY 变量定义与 MCCL 动态 选择的 infiniband GID 相关的 IP 地址族。
接受的值
默认值为 "AF_INET"。
MCCL_IB_ADDR_RANGE
MCCL_IB_ADDR_RANGE 变量定义 MCCL 在 MCCL_IB_GID_INDEX 未设置时动态选择的有效 GID 范围。
接受的值
可以使用无类域间路由(CIDR)格式为 IPv4 和 IPv6 族定义 GID 范围。
MCCL_IB_ROCE_VERSION_NUM
MCCL_IB_ROCE_VERSION_NUM 变量定义与 MCCL 动态选择的 infiniband GID 相关的 RoCE 版本。
接受的值
默认值为 2。
MCCL_IB_SL
定义 InfiniBand 服务级别。
接受的值
默认值为 -1。
MCCL_IB_TC
定义 InfiniBand 流量类别字段。
接受的值
默认值为 -1。
MCCL_IB_FIFO_TC
定义 InfiniBand 控制消息的流量类别。
接受的值
默认值由 MCCL_IB_TC 设置的流量类别,如果未设置,则默认为 -1。
MCCL_IB_PKEY
定义 InfiniBand Partition Key。
接受的值
默认值为 0。
MCCL_IB_USE_INLINE
启用 InfiniBand 内联发送。
接受的值
默认值为 0。
MCCL_IB_RETURN_ASYNC_EVENTS
IB 事件作为警告报告给用户。如果启用,MCCL 还将在致命的 IB 异步事件上停止 IB 通信。
接受的值
默认值为 1,设置为 0 以禁用。
MCCL_IB_AR_THRESHOLD
阈值,超过此阈值时我们将以单独的消息发送 InfiniBand 数据,这可以利用自适应路由。
接受的值
字节大小,默认值为 8192。
MCCL_IB_QPS_PER_CONNECTION
两个 rank 之间每 个连接使用的 IB 队列对数。
接受的值
1 到 128 之间的数字,默认为 1。
MCCL_IB_SPLIT_DATA_ON_QPS
此参数控制当我们创建多个队列对时如何使用它们。
接受的值
0 或 1。默认为 0。
MCCL_IB_ADAPTIVE_ROUTING
启用 IB Verbs 传输的自适应路由能力数据传输。
接受的值
默认在 IB 网络上启用(1),在 RoCE 网络上禁用(0)。
MCCL_IB_ECE_ENABLE
在 IB/RoCE Verbs 网络上启用增强型连接建立(ECE)。
接受的值
默认为启用(1)。
MCCL_IB_PCI_RELAXED_ORDERING
启用 IB Verbs 传输的 Relaxed Ordering。
接受的值
设置为 2 以在可用时自动使用。设置为 1 以强制使用。设置为 0 以禁用。默认为 2。
MCCL_IB_MERGE_NICS
启用 MCCL 将双端口 IB NIC 合并为单个逻辑网络设备。
接受的值
默认为 1(启用),设置为 0 以禁用。
MCCL_IB_MERGE_VFS
启用 MCCL 合并虚拟功能(VF)。
接受的值
默认为 1 (启用)。
MCCL_IB_DATA_DIRECT
启用 IB 数据直接传输。
接受的值
默认值为 1(启用)。
MCCL_IB_MQP_RETRY_CNT
IB MQP 重试计数。
接受的值
默认值为 34。
MCCL_IB_MQP_RETRY_SLEEP_MSEC
IB MQP 重试间隔(毫秒)。
接受的值
默认值为 100。
MCCL_OOB_NET_ENABLE
变量 MCCL_OOB_NET_ENABLE 启用 MCCL 网络用于带外通信。
接受的值
将变量设置为 0 以禁用,设置为 1 以启用。
MCCL_OOB_NET_IFNAME
如果启用了 MCCL 网络用于带外通信,MCCL_OOB_NET_IFNAME 变量指定要使用的网络接口。
接受的值
定义要由 MCCL 用于带外通信的接口。
MCCL_NET
强制 MCCL 使用特定网络。
接受的值
MCCL_NET 的值必须与使用的 MCCL 网络的名称完全匹配(不区分大小写)。内部网络名称为 "IB"(通用 IB 动词)和 "Socket"(TCP/IP 套接字)。
MCCL_NET_PLUGIN
将其设置为后缀字符串或库名称,以在多个 MCCL 网络插件 中进行选择。
接受的值
插件后缀、插件文件名或 "none"。
MCCL_TUNER_PLUGIN
将其设置为后缀字符串或库名称,以在多个 MCCL 调优插件中进行选择。
接受的值
插件后缀、插件文件名或 "none"。
MCCL_PROFILER_PLUGIN
将其设置为后缀字符串或库名称,以在多个 MCCL 分析器插件中进行选择。
接受的值
插件后缀、插件文件名或 "none"。
MCCL_ENV_PLUGIN
指定环境变量插件。
接受的值
插件路径或名称。
MCCL_IGNORE_CPU_AFFINITY
MCCL_IGNORE_CPU_AFFINITY 变量可用于使 MCCL 忽略作业提供的 CPU 亲和性,而只使用 GPU 亲和性。
接受的值
默认为 0,设置为 1 以使 MCCL 忽略作业提供的 CPU 亲和性。
MCCL_CONF_FILE
MCCL_CONF_FILE 变量允许用户指定一个包含静态配置的文件。
接受的值
配置文件路径。
MCCL_HOSTID
指定主机 ID。
接受的值
整数,默认根据系统信息自动计算。
MCCL_COMM_ID
指定通信器 ID。
接受的值
网络地址,格式为 ip:port。
MCCL_SET_THREAD_NAME
为 MCCL CPU 线程赋予更有意义的名称,以便于调试和分析。
接受的值
0 或 1。默认为 0(禁用)。
MCCL_SET_CPU_STACK_SIZE
设置 CPU 线程堆栈大小。
接受的值
默认值为 1(启用)。
MCCL_SET_STACK_SIZE
将 MUSA 内核堆栈大小设置为所有 MCCL 内核中的最大堆栈大小。
接受的值
0 或 1。默认值为 0(禁用)。
MCCL_WORK_FIFO_BYTES
工作 FIFO 缓冲区大小(字节)。
接受的值
默认值为 1048576(1MB)。
MCCL_WORK_ARGS_BYTES
工作参数缓冲区大小(字节)。
接受的值
默认值为 INT64_MAX。
MCCL_PROXY_CPUSET
指定代理线程的 CPU 亲和性。
接受的值
CPU 列表字符串。
MCCL_REPORT_CONNECT_PROGRESS
报告连接建立进度。
接受的值
默认值为 0(禁用)。
MCCL_CONNECT_ROUND_MAX_PEERS
每轮连接的最大对等节点数。
接受的值
默认值为 128。
MCCL_PROGRESS_APPENDOP_FREQ
进度追加操作频率。
接受的值
默认值为 8。
调试
MCCL_DEBUG
MCCL_DEBUG 变量控制从 MCCL 显示的调试信息。
接受的值
- VERSION - 在程序开始时打印 MCCL 版本
- WARN - 每当任何 MCCL 调用出错时,打印明确的 error 消息
- INFO - 打印调试信息
- TRACE - 打印可重放的跟踪信息,每次调用都会打印
MCCL_DEBUG_FILE
MCCL_DEBUG_FILE 变量将 MCCL 调试日志输出定向到文件。
接受的值
默认输出文件是 stdout。
MCCL_DEBUG_SUBSYS
MCCL_DEBUG_SUBSYS 变量允许用户根据子系统过滤 MCCL_DEBUG=INFO 输出。
接受的值
默认值为 INIT,BOOTSTRAP,ENV。
支持的子系统名称有 INIT、COLL、P2P、SHM、NET、GRAPH、TUNING、ENV、ALLOC、CALL、PROXY、BOOTSTRAP、REG、PROFILE、RAS 和 ALL。
MCCL_DEBUG_TIMESTAMP_FORMAT
MCCL_DEBUG_TIMESTAMP_FORMAT 变量允许用户更改打印调试日志消息时使用的格式。
接受的值
默认为 [%F %T],即 [YYYY-MM-DD HH:MM:SS]。
MCCL_DEBUG_TIMESTAMP_LEVELS
MCCL_DEBUG_TIMESTAMP_LEVELS 变量允许用户设置哪些日志行根据日志级别获得时间戳。
接受的值
默认情况下,为 WARN 启用时间戳,但为其余级别禁用。
MCCL_WARN_ENABLE_DEBUG_INFO
在警告中启用调试信息。
接受的值
默认启用。
内存和注册
MCCL_BUFFSIZE
MCCL_BUFFSIZE 变量控制 MCCL 在 GPU 对之间通信数据时使用的缓冲区大小。
接受的值
默认为 4194304(4 MiB)。值是整数,以字节为单位。建议使用 2 的幂。
MCCL_LL_BUFFSIZE
MCCL_LL_BUFFSIZE 变量控制低延迟(LL)协议的缓冲区大小。
接受的值
默认值为 -2(自动选择)。
MCCL_MUMEM_ENABLE
在 MCCL 中使用 MUSA muMem* 函数分配内存。
接受 的值
0 或 1。,如果系统支持,则默认自动启用。
MCCL_MUMEM_HOST_ENABLE
在 MCCL 中使用 MUSA muMem* 函数分配主机内存。
接受的值
0 或 1。,默认为 1。
MCCL_MUMEM_ENABLE
启用 MUMEM 内存分配。
接受的值
默认值为 -1(自动检测)。
MCCL_MUMEM_HOST_ENABLE
启用 MUMEM 主机内存分配。
接受的值
默认值为 -1(自动检测)。
MCCL_DMABUF_ENABLE
启用使用 Linux dma-buf 子系统进行 GPU Direct RDMA 缓冲区注册。
接受的值
0 或 1。默认值为 1(启用)。
MCCL_GDRCOPY_ENABLE
启用 GDRCopy 用于 GPU 内存拷贝。
接受的值
默认值为 0(禁用)。
MCCL_GDRCOPY_FIFO_ENABLE
启用 GDRCopy FIFO 模式。
接受的值
默认值为 1(启用)。
MCCL_GDRCOPY_FLUSH_ENABLE
启用 GDRCopy 刷新操作。
接受的值
默认值为 0(禁用)。
MCCL_GDRCOPY_SYNC_ENABLE
启用 GDRCopy 同步操作。
接受的值
默认值为 1(启用)。
MCCL_LOCAL_REGISTER
当用户显式调用 mcclCommRegister 时启用用户本地缓冲区注册。
接受的值
0 或 1。默认值为 1(启用)。
MCCL_LEGACY_MUSA_REGISTER
通过 musaMalloc 分配的 musa 缓冲区是遗留缓冲区。MCCL 默认禁用遗留缓冲区注册。
接受的值
0 或 1。默认值为 0(禁用)。
MCCL_GRAPH_REGISTER
在 MCCL 调用被 MUSA 图捕获时启用用户缓冲区注册。
接受的值
0 或 1。默认值为 1(启用)。
MCCL_SINGLE_PROC_MEM_REG_ENABLE
启用单进程内存注册优化。
接受的值
默认值为 0(禁用)。
MCCL_ALIGNMENT_CHECK
启用内存对齐检查。
接受的值
默认值为 1(启用)。
MCCL_CACHE_ALIGNMENT
缓存对齐大小。
接受的值
默认值为 CACHE_LINE_SIZE。
算法和协议
MCCL_ALGO
MCCL_ALGO 变量定义 MCCL 将使用的算法。
接受的值
算法的逗号分隔列表(不区分大小写):Ring、Tree、CollnetChain、CollnetDirect、NVLS、NVLSTree、PAT。
MCCL_PROTO
MCCL_PROTO 变量定义 MCCL 被允许使用的协议。
接受的值
协议的逗号分隔列表:LL、Simple。
MCCL_NTHREADS
MCCL_NTHREADS 变量设置每个 MUSA 块的 MUSA 线程数。
接受的值
允许的值是 64、128、256 和 512。默认值为 -2(自动选择)。
MCCL_MAX_NCHANNELS
MCCL_MAX_NCHANNELS 变量限制 MCCL 可以使用的通道数量。
接受的值
任何大于或等于 1 的值。默认值为 -2(自动选择)。
MCCL_MIN_NCHANNELS
MCCL_MIN_NCHANNELS 变量控制 MCCL 使用的最小通道数量。
接受的值
默认值为 -2(自动选择)。