
# 训练作业运行失败，出现NCCL报错
#### 问题现象
训练作业的状态"运行失败"，查看训练作业的"日志"，存在NCCL的报错，例如"NCCL timeout"、"RuntimeError: NCCL communicator was aborted on rank 7"、"NCCL WARN Bootstrap : no socket interface found"或"NCCL INFO Call to connect returned Connection refused, retrying"。
#### 原因分析
NCCL是一个提供GP间通信原语的库，实现集合通信和点对点发送/接收原语。当训练作业出现NCCL的报错时，可以通过调整NCCL的环境变量尝试解决问题。
#### 处理步骤
1. 进入状态"运行失败"的训练作业详情页，单击"日志"页签，查看NCCL报错。
   - 如果出现报错"NCCL timeout"或者"RuntimeError: NCCL communicator was aborted on rank 7"，则表示InfiniBand Verbs超时。单击右侧"复制"，重新创建训练作业，设置环境变量"NCCL_IB_TIMEOUT=22"，提交训练作业后等待作业完成。
   
   - 如果出现报错"NCCL WARN Bootstrap : no socket interface found"或"NCCL INFO Call to connect returned Connection refused, retrying"，则表示NCCL无法找到通信网卡或者是无法正常访问IP地址。需要排查训练代码中是否有设置NCCL_SOCKET_IFNAME环境变量，该环境变量由系统自动注入，训练代码中无需设置。训练代码去除NCCL_SOCKET_IFNAME环境变量设置逻辑后，单击右侧"复制"，重新创建训练作业，提交训练作业后等待作业完成。
    
2. 等待训练作业是否变成"已完成"状态。
   - 是，故障处理完成。
   
   - 否，则联系技术支持排查节点状态。
    
 
#### 建议与总结
- 环境变量NCCL_SOCKET_IFNAME用于指定通信的网卡名称。"NCCL_SOCKET_IFNAME=eth0"表示仅使用eth0网卡通信。该环境变量由系统自动注入，由于通信网卡名称不固定，因此训练代码不应默认设置该环境变量。
- 环境变量NCCL_IB_TIMEOUT用于控制InfiniBand Verbs超时。NCCL使用的默认值为18，取值范围是1\~22。
 
