昇腾社区首页
中文
注册

节点预选

任务说明

根据任务所需昇腾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
}