环境变量
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