之前我们有学习过nccl的部署和ncc-test工具的使用,我们可以查看之前的笔记:https://sulao.cn/post/988
今天我们就根据nccl官网文档https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html整理了一些常用的nccl环境变量的说明,在推理训练阶段使用这些环境变量比较简单
export NCCL_DEBUG=INFO
python train.py
#或者直接使用
NCCL_DEBUG=INFO python train.py
下面是我整理的一些nccl常用环境变量和说明
环境变量名 | 变量值 | 描述 |
---|---|---|
NCCL_DEBUG | INFO,WARN,ERROR | 用于调试NCCL的通信问题。可以设置为INFO、WARN、ERROR等不同级别。设置为INFO可以获取详细的调试信息,帮助分析通信过程中的问题。 |
NCCL_DEBUG_FILE | NCCL_DEBUG_FILE变量将NCCL调试日志输出指向一个文件。文件名格式可以设置为filename.%h。%p其中%h被替换为主机名,%p被替换为进程PID。不接受~字符作为路径的一部分,请先转换为相对或绝对路径。 | |
NCCL_IB_DISABLE | 0,1 | 控制是否禁用InfiniBand支持。当系统中存在网络兼容性问题时,可以通过设置NCCL_IB_DISABLE=1来禁用IB并强制使用Socket通信。 |
NCCL_IB_HCA | ib网卡接口名字,例如:mlx5,=mlx5_0:1,mlx5_1:1,^=mlx5_1,mlx5_4 | NCCL_IB_HCA变量指定要使用哪个主机通道适配器(RDMA)接口进行通信。 |
NCCL_IB_TIMEOUT | 1~31,默认值20 | NCCL_IB_TIMEOUT变量控制ib动词超时时间。 |
NCCL_IB_GID_INDEX | 默认-1,具体查看show_gids | NCCL_IB_GID_INDEX变量定义RoCE模式中使用的全局ID索引。请参见InfiniBand show_gids命令设置该值。 |
NCCL_IB_SL | 默认0 | 定义ib服务等级。 |
NCCL_IB_RETRY_CNT | 默认7 | 变量NCCL_IB_RETRY_CNT控制ib重试次数。 |
NCCL_SOCKET_IFNAME | 网络接口名(eth0) | 指定NCCL使用的网络接口名称。在多网络接口的系统中,可以通过设置这个变量来选择特定的接口用于通信,例如NCCL_SOCKET_IFNAME=eth0,可以是IB网络接口 |
NCCL_IB_ADDR_FAMILY | 默认AF_INET | NCCL_IB_ADDR_FAMILY变量定义了NCCL在不设置NCCL_IB_GID_INDEX时动态选择的ib GID所关联的IP地址族。 |
NCCL_IB_ROCE_VERSION_NUM | 默认2 | NCCL_IB_ROCE_VERSION_NUM变量定义了当NCCL_IB_GID_INDEX未设置时,NCCL动态选择与ib GID关联的RoCE版本。 |
NCCL_SOCKET_NTHREADS | 1~16 | NCCL_SOCKET_NTHREADS变量指定用于套接字传输的每个网络连接的CPU辅助线程数。增加此值可能会提高套接字传输性能,但代价是更高的CPU使用率。 |
NCCL_NSOCKS_PERTHREAD | 1~16 | NCCL_NSOCKS_PERTHREAD变量指定套接字传输的每个辅助线程打开的套接字数量。在每个套接字速度有限的环境中,将此变量设置大于1可能会提高网络性能。 |
NCCL_NET_GDR_LEVEL | LOC,PIX,PXB,PHB,SYS | 控制NCCL是否使用GPU直接通信(GDR,GPUDirect RDMA)。设置较高的级别可以利用GPUDirect RDMA提高通信速度,适合有GPUDirect支持的网络配置 |
NCCL_SHM_DISABLE | 0,1 | 控制是否禁用共享内存通信。在某些环境下,禁用共享内存可以避免一些因共享内存冲突导致的性能问题 |
NCCL_P2P_LEVEL | LOC,NVL,PIX,PXB,PHB,SYS | 控制点对点通信的使用级别。可以设置为NVL(NVLink)、PXB(PCIe跨插槽)、SYS(系统内存)等,以调整通信路径,提升通信效率 |
NCCL_P2P_DISABLE | 0,1 | NCCL_P2P_DISABLE变量禁用点对点(P2P)传输,使用NVLink或PCI在gpu之间使用CUDA直接访问 |
NCCL_BUFFSIZE | 4194304 | 设置NCCL通信的缓冲区大小。通常设置为更大的值可以提高带宽利用率,但也会占用更多的内存,默认值为4MiB |
NCCL_LAUNCH_MODE | GROUP,PARALLEL | 控制NCCL内核的启动模式。可以设置为GROUP(组启动)或PARALLEL(并行启动),以优化启动开销,适应不同的集群环境 |
NCCL_ALGO | Ring,Tree,Collnet,CollnetChain,CollnetDirect,NVLS,NVLSTree | NCCL_ALGO变量定义了NCCL将使用哪些算法 |
NCCL_MIN_NCHANNELS | <12|<16|<32 | NCCL_MIN_NCHANNELS变量控制您希望NCCL使用的最小通道数。增加通道的数量也会增加NCCL使用的CUDA块的数量,这可能有助于提高性能;然而,它使用更多的CUDA计算资源。默认值是平台相关的。设置为整数值,最多为12(最高为2.2),16(2.3和2.4)或32(2.5及更高版本) |
NCCL_MAX_NCHANNELS | >=1 | NCCL_MAX_NCHANNELS变量限制了NCCL可以使用的通道数量。减少通道的数量也减少了用于通信的CUDA块的数量,因此对GPU计算资源的影响 |
NCCL_CHECK_POINTERS | 0,1 | NCCL_CHECK_POINTERS变量允许对每个集合调用的CUDA内存指针进行检查。检查在开发过程中很有用,但可能会增加延迟 |
- 标签
- nccl
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1054
评论列表