下载
中文
注册
hostNetwork设置为true后,通信阻塞超时,任务失败

hostNetwork设置为true后,通信阻塞超时,任务失败

2025/01/26

29

暂无评分
我要评分

问题信息

问题来源产品大类关键字
官方集群调度hostNetwork、通信阻塞、任务失败

问题描述

训练任务开启hostNetwork为true。提示如图所示报错,通信阻塞超时,任务失败

原因分析

hostNetwork设置为true后,由于未在任务yaml中配置环境变量参数HCCL_IF_IP,HCCL无法确认与哪个网卡IP建立通信,导致HCCL通信超时。

解决措施

在任务yaml中设置hostNetwork为true后,需要在yaml中同步配置环境变量HCCL_IF_IP为status.hostIP,指定root通信网卡IP为hostIP,即可使HCCL成功建链,解决问题。

apiVersion: mindxdl.gitee.com/v1
kind: AscendJob
metadata:
  name: default-test-mindspore
  labels:
    framework: mindspore     # 训练框架名称
    ring-controller.atlas: ascend-{xxx}b  # 标识产品类型
spec:
  schedulerName: volcano    # 当Ascend Operator组件的启动参数enableGangScheduling为true时生效
  runPolicy:
    schedulingPolicy:      # 当Ascend Operator组件的启动参数enableGangScheduling为true时生效
      minAvailable: 2  #任务总副本数
      queue: default     # 任务所属队列
  successPolicy: AllWorkers  #任务成功的前提
  replicaSpecs:
    Scheduler:
      replicas: 1   # 任务副本数
      restartPolicy: Never
      template:
        metadata:
          labels:
            ring-controller.atlas: ascend-{xxx}b  # 标识产品类型
        spec:
          hostNetwork: true    # 可选值,根据实际情况填写,true支持hostIP创建Pod,false不支持hostIP创建Pod
          affinity:                                         # 本段配置表示分布式任务的Pod调度到不同节点
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: job-name
                        operator: In
                        values:
                          - default-test-mindspore         # 需要和上面的任务名一致
                  topologyKey: kubernetes.io/hostname
          nodeSelector:
            host-arch: huawei-arm              # 可选值,根据实际情况填写
            accelerator-type: module-{xxx}b-8   # 节点类型
          containers:
          - name: ascend                                     # 必须为ascend,不能修改
            image: mindspore-test:latest  #镜像名称
            imagePullPolicy: IfNotPresent
...
            env:                                    
              - name: HCCL_IF_IP                    # 可选值,根据实际情况填写
                valueFrom:                          # 若hostNetwork配置为true,需要同步配置HCCL_IF_IP环境变量
                  fieldRef:                         # 若hostNetwork未配置或配置为false,不可配置HCCL_IF_IP环境变量
                    fieldPath: status.hostIP        # 
...            
            ports:                          # 分布式训练集合通讯端口
              - containerPort: 2222         
                name: ascendjob-port
            resources:
              limits:
                huawei.com/Ascend910: 8 # 申请的芯片数量
              requests:
                huawei.com/Ascend910: 8 #与limits取值一致
            volumeMounts:
...            
          volumes:
...            
    Worker:
      replicas: 1   #任务副本数
      restartPolicy: Never
      template:
        metadata:
          labels:
            ring-controller.atlas: ascend-{xxx}b   # 标识产品类型
        spec:
          hostNetwork: true    # 可选值,根据实际情况填写,true支持hostIP创建Pod,false不支持hostIP创建Pod
          affinity:            # 本段配置表示分布式任务的Pod调度到不同节点
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: job-name
                        operator: In
                        values:
                          - default-test-mindspore        # 需要和上面的任务名一致
                  topologyKey: kubernetes.io/hostname
          nodeSelector:
            host-arch: huawei-arm              # 可选值,根据实际情况填写
            accelerator-type: module-{xxx}b-8  # 节点类型
          containers:
          - name: ascend                            # 必须为ascend,不能修改
...
            env:                                    
              - name: HCCL_IF_IP                    # 可选值,根据实际情况填写
                valueFrom:                          # 若hostNetwork配置为true,需要同步配置HCCL_IF_IP环境变量
                  fieldRef:                         # 若hostNetwork未配置或配置为false,不可配置HCCL_IF_IP环境变量
                    fieldPath: status.hostIP        # 
...
          - name: ASCEND_VISIBLE_DEVICES                       # Ascend Docker Runtime会使用该字段
            valueFrom:
              fieldRef:
                fieldPath: metadata.annotations['huawei.com/Ascend910']               # 需要和下面resources.requests保持一致
...
            ports:                          # 分布式训练集合通讯端口
              - containerPort: 2222         
                name: ascendjob-port
            resources:
              limits:
                huawei.com/Ascend910: 8 # 申请的芯片数量
              requests:
                huawei.com/Ascend910: 8 #与limits取值一致
            volumeMounts:
...
          volumes:
...

本页内容