环境变量
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
此参数控制当我们创建多个队列对时如何使用它们。