文章目录
快速回忆
官网查询网站:https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html
背景
本文快速记录,在NCCL测试中需要设置的一些环境变量的快速获取方法。
一个例子
mpirun -np 2 --allow-run-as-root \
--mca btl openib,self,vader \
--mca btl_openib_if_include mlx5_0,mlx5_1 \
--mca btl_openib_cpc_include rdmacm \
-x NCCL_SOCKET_IFNAME=enp1s0f0 \
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1 -c 0
这里用mpirun启动16个进程,mpirun参数参考:mpirun常见参数作用?
指定环境变量
用-x 将环境变量传递给 mpirun 启动的进程。
更多参考:https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html
NCCL_DEBUG 变量控制从 NCCL 显示的调试信息
NCCL_DEBUG 变量控制从 NCCL 显示的调试信息。此变量通常用于调试。
NCCL_SOCKET_IFNAME 变量指定要用于通信的 IP 接口。
使用 ^ 符号,NCCL 将排除该列表中任何前缀开头的接口。
eth : 使用所有以 eth 开头的接口,例如 eth0、eth1 …,比如-x NCCL_SOCKET_IFNAME eth
=eth0 : 仅使用接口 eth0,比如-x NCCL_SOCKET_IFNAME=eth0
=eth0,eth1 : 仅使用接口 eth0 和 eth1,比如-x NCCL_SOCKET_IFNAME=eth0,eth1
^docker : 不要使用任何以 docker 开头的接口,比如-x NCCL_SOCKET_IFNAME^docker
^=docker0 : 不要使用接口 docker0,比如-x NCCL_SOCKET_IFNAME^=docker0
=表示限定只使用xxx
^=表示限定不使用xxx
无=表示以xxx开头的
注意:默认情况下,除非没有其他接口可用,否则不会选择环回接口 (lo) 和 docker 接口 (docker*)。默认算法还将优先使用以 ib 开头的接口。设置 NCCL_SOCKET_IFNAME 将绕过自动接口选择算法,并可能使用与手动选择匹配的所有接口。
NCCL_IB_HCA 变量指定用于通信的 RDMA 接口。
mlx5 : 使用以 mlx5 开头的所有卡的所有端口
=mlx5_0:1,mlx5_1:1 : 使用卡 mlx5_0 和 mlx5_1 的端口 1。
^=mlx5_1,mlx5_4 : 不使用 mlx5_1 和 mlx5_4 卡。
注意:使用不带前置 = 的 mlx5_1 将选择 mlx5_1 以及 mlx5_19 mlx5_10(如果存在)。因此,始终建议添加 = 前缀以确保完全匹配。
NCCL_ALGO 变量定义 NCCL 将使用的算法。
以下算法的逗号分隔列表(不区分大小写):
Version | Algorithm |
---|---|
2.5+ | Ring 戒指 |
2.5+ | Tree 树 |
2.5 to 2.13 | Collnet 科内特 |
2.14+ | CollnetChain |
2.14+ | CollnetDirect |
2.17+ | NVLS 系列 |
2.18+ | NVLSTree |
2.23+ | PAT 帕特 |
NCCL_NVB_DISABLE 通过中间 GPU 通过 NVLink 禁用节点内通信。
默认值为 0,设置为 1 以禁用此机制。
其他
- NCCL_SOCKET_FAMILY 变量允许用户强制 NCCL 仅使用 IPv4 或 IPv6 接口。设置为 AF_INET 以强制使用 IPv4,设置为 AF_INET6 以强制使用 IPv6。
- NCCL_IB_GID_INDEX 变量定义 RoCE 模式中使用的全局 ID 索引。请参阅 InfiniBand show_gids 命令以设置此值。
- NCCL_IB_ADDR_FAMILY 变量定义与 NCCL 在未设置时动态选择的 infiniband GID 关联的 NCCL_IB_GID_INDEX 地址系列。
- NCCL_IB_ADDR_RANGE 变量定义 NCCL 在未设置 NCCL_IB_GID_INDEX 时动态选择的有效 GID 的范围。
- NCCL_IB_TC 定义 InfiniBand 流量类字段。
- 设置 NCCL_DEBUG_FILE 将导致 NCCL 创建并覆盖该名称的任何先前文件。
- NCCL_MAX_NCHANNELS 变量限制 NCCL 可以使用的通道数。减少通道数量也会减少用于通信的 CUDA 块数量,从而对 GPU计算资源产生影响。
- NCCL_MIN_NCHANNELS 变量控制希望 NCCL 使用的最小通道数。增加通道数量也会增加 NCCL 使用的 CUDA 块数量,这可能有助于提高性能;但是,它使用更多的 CUDA 计算资源。
- NCCL_CHECKS_DISABLE 变量可用于在每个集体调用上禁用参数检查。检查在开发过程中很有用,但会增加延迟。可以禁用它们以提高生产性能。
- NCCL_IB_DISABLE 变量可防止 NCCL 使用 IB/RoCE 传输。相反,NCCL 将回退到使用 IP 套接字。
参考:
官网查询网站:https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html