昇腾社区首页
中文
注册

HCCL建立P2P使能链接超时,AI server初始化失败

问题现象

常见于算子编译阶段,日志报错信息:Wait timeout for get P2P status

原因分析

HCCL初始化会在AI Server内的各rank(Device)间建立P2P使能链接,若任一个rank在建链前/中发生异常,未拉起业务进程,则会导致本AI server初始化失败。

解决方法

  • 场景1:部分rank在P2P使能前异常时,会导致和其他rank间的P2P使能超时,处理步骤为:
    1. 确认各rank上HCCL初始化是否成功(plog日志关键字为hcom init by file success,级别为TRACE),若未成功初始化则可能原因为:
      • 进入HCCL初始化之前有其他组件初始化失败。
      • 上次训练过程存在进程残留。
    2. P2P使能前其他组件异常,导致未执行到到HCCL初始化阶段(典型问题:TSD拉起失败)。
    3. 训练脚本问题,训练拉起进程/docker数和训练卡数不一致,导致实际拉起的进程和集群描述不符。
    4. TDT拉起失败/磁盘空间不足等,导致进程异常退出。
  • 场景2:各rank上HCCL的调用时差超过120s,引起P2P使能超时:

    确认各rank的通信初始化打印日志(plog日志关键字为Entry-HcomInitByFile,级别为EVENT)的时间,是否相差超过120s,若超过则为集合通信拉起时间相差过大。

    常见场景: 训练启动脚本有问题,多卡训练时应同时运行多个进程(每张卡对应一个进程),而不是一个进程结束后再启动下一个进程。

    #典型错误

    for i in ${DEVICE_LIST}
       do
         export DEVICE_ID=$i
         export RANK_ID=$i
         echo "start train ing device $i"
         python3.7.5 /home/HwHiAiUser/train.py          # 阻塞执行
       done

    # 解决方法,修改脚本如下:

    for i in ${DEVICE_LIST}
        do
          export DEVICE_ID=$i
          export RANK_ID=$i
          echo "start train ing device $i"
          python3.7.5 /home/HwHiAiUser/train.py &        # 后台执行
        done
  • 场景3:配置的rank_table和实际使用的Device不一致。

    在日志(EVENT级别)中 grep 关键字 paraInfo(hcom init)(下沉模式) 或者 paraInfo(HcclCommInitClusterInfo)(单算子模式),打开日志中打印的rank table文件,确认该server上启动的rank数和rank table文件上配置数量是否一致。

    例如,实际使用2P,但是rank table是按照8P进行配置的,则HCCL在初始化时会出现该现象。