如何通过Microsoft HPC Pack API编程设置「Prefer Nodes With」
如何通过HPC API编程实现「Prefer Nodes With」设置
「Prefer Nodes With」本质是让作业优先调度到具备特定属性(比如GPU、大内存、自定义标签)的节点上,用HPC API实现的话,有两种实用方式:
方法1:用现成的节点组
如果你已经在集群里把符合要求的节点归成了一个节点组(比如叫「HighMemNodes」),直接关联这个组就行:
// 前提:已经拿到IScheduler实例和要配置的作业对象ISchedulerJob ISchedulerJob job = ...; string targetGroup = "HighMemNodes"; // 替换成你的节点组名称 // 把节点组设为作业优先选择的组 job.AddNodeGroup(targetGroup); // 可选:设置亲和性策略,确保优先用这个组的节点 job.Affinity = NodeAffinity.Preferred;
方法2:直接筛选节点属性
如果没提前建节点组,也可以直接通过节点的属性来筛选目标节点,设为作业的优先节点:
第一步:找出符合条件的节点
先查询集群里满足属性要求的节点,比如筛选带GPU的节点:
IScheduler scheduler = new Scheduler(); scheduler.Connect("你的集群头节点名称"); // 筛选条件:自定义属性里GPU值为True的节点 string filter = "CustomProperties['GPU'] = 'True'"; ISchedulerCollection targetNodes = scheduler.GetNodes(filter, false);
第二步:把这些节点设为作业优先节点
把查到的节点逐个添加到作业的优先列表里:
foreach (ISchedulerNode node in targetNodes) { job.AddPreferredNode(node.Name); } // 也可以直接用逗号分隔节点名设置PreferredNodes属性 // job.PreferredNodes = "Node01,Node02,Node03";
注意点
Affinity属性决定了优先级强度:设为NodeAffinity.Preferred时,目标节点优先,但没可用的话会用其他节点;如果设为NodeAffinity.Required,那作业只能在目标节点可用时才会运行。- 节点的自定义属性可以在HPC管理器UI里提前配置,也能用
ISchedulerNode.SetCustomProperty代码添加。
内容的提问来源于stack exchange,提问作者Jon Barker
相关产品推荐
相关产品推荐

