节点预选
任务说明
根据任务所需昇腾AI处理器数量和节点可用昇腾AI处理器数量,判断节点是否满足任务需求。Atlas训练系列产品要求任务所需昇腾AI处理器为1、2、4时,只能在一个HCCL环内进行选择。
例如某个任务需要4个昇腾AI处理器,某个节点具有4个昇腾AI处理器,但这4个并未在同一个HCCL环内,而是两环各两个,则不选择该节点分配任务。
具体实现
具体代码实现请参考开源代码中CheckNodeNPUByTask方法。其中通过GetTaskReqNPUNum方法获取到训练任务请求的昇腾AI处理器数量,再通过getUsableTopFromNode方法获取到节点可用NPU资源。judgeNodeAndTaskNPU方法实现了判断节点NPU资源是否满足任务需求的功能。
代码示例如下:
func (tp *module910x8) judgeNodeAndTaskNPU(taskNPU int, nodeTop []int) error { var reFlag = false // 根据NPU编号分为左右环,左[0,1,2,3],右[4,5,6,7] sNodeInf := initSelectNodeInf(nodeTop) switch taskNPU { // 任务所需NPU数量是1,2,4时,需左环或右环满足 case 1, npuIndex2, npuNumPerHccs: reFlag = (sNodeInf.leftNPUNum >= taskNPU) || (sNodeInf.rightNPUNum >= taskNPU) // 任务所需NPU数量是8时,需节点总NPU满足 case nodeNPUNumber: reFlag = sNodeInf.allNPUNum == nodeNPUNumber default: // single pod(task) cannot require npu not belong to mode // this kind job has been deal with job logical klog.V(util.LogErrorLev).Infof("judgeNodeAndTaskNPU err: task req npu is invalid.") } if reFlag { return nil } meetErr := fmt.Errorf("%v not meet req npu(%d)", nodeTop, taskNPU) klog.V(util.LogErrorLev).Infof("cardIDs:<%v> not meet task reqNum<%d>.", nodeTop, taskNPU) return meetErr }
父主题: 昇腾AI处理器的调度算法说明