概述
备注:
节点计划仅适用于代理节点,不应应用于服务器节点。
节点计划对于更好地处理硬件并确保 ML 副本 (pod)、技能或管道尤其有用。 您应该主要在两种情况下使用它们:
- 当您有 GPU 节点时,请确保在该节点上仅计划需要 GPU 的工作负载
- 为了更好地隔离 ML 工作负载,使其不会干扰其他应用程序。
默认情况下,Kubernetes 调度程序将具有所需资源的所有节点视为相同。
您可以通过两种方法将 ML 副本(Pod)、技能或管道计划到特定节点, UiPath AI Center支持这两种方法:
- Assign Pods to Nodes using Node Affinity: this is useful when collocating ML pods with other pods on a node. Multiple labels can be applied to a node.
- Taints and Tolerations: intended for a dedicated node, either repelling all pods (
NoSchedule
), or imposing a low scheduling preference (PreferNoSchedule
) for pods that don't match the scheduling criteria. Although multiple taints can be applied to a node(s), node taints only support the “AND” Boolean logic.
节点亲和性是 Pod 的一个属性,可将 Pod 作为首选项或要求吸引到一组节点。 另一方面,污点允许节点排斥一组 Pod。
第一种方法使用节点标签在副本和节点之间创建亲和性,而第二种方法通过污染节点来应用反亲和性。
ML 副本的PodSpec
模板旨在支持这两种方法,并根据部署时的 GPU 或非 GPU 选择进行自定义。
节点亲和性
如果已添加代理节点以扩展资源池,并且您希望影响其上 ML Pod 的计划,则可以应用节点关联性。 为此,请使用以下命令向节点添加标签:
- 对于 CPU:
kubectl label node <node_name> node.type=aic.ml.cpu
- 对于 GPU:
kubectl label node <node_name> node.type=aic.ml.gpu
节点关联性不能确保节点专用于为 ML 工作负载提供服务,也不会阻止其他工作负载 Pod 调度到应用标签的同一节点。
污点
要专用节点,您需要使用污点或节点关联性和污点的组合。 要将代理节点专用于为 ML GPU 或 CPU Pod 提供服务,您可以将以下污点应用于节点:
- 对于 CPU:
kubectl taint node <node_name> aic.ml/cpu=present:NoSchedule
- 对于 GPU:
kubectl taint node <node_name> nvidia.com/gpu=present:NoSchedule
结合节点亲和性和污点
要将代理节点专用于为 ML GPU Pod 提供服务并影响 ML CPU Pod 对相同节点的调度,您可以结合使用节点亲和力和污点:
kubectl taint node <node_name> nvidia.com/gpu=present:PreferNoSchedule
kubectl label node <node_name> node.type=aic.ml.cpu
2 个月前更新