hostNetwork设置为true后,通信阻塞超时,任务失败
问题描述
训练任务开启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:
...
父主题: 使用时出现的故障