我们如何正确分配Pod以便KFServing可以将GPU实例缩小到零?

我正在使用 Argo 和 KFServing 和 Amazon EKS (Kubernetes) 设置 InferenceService。重要的是要知道,我们的团队每个环境都有一个 EKS 集群,这意味着我们的集群中可能有多个我们无法控制的应用程序。

这是我们到目前为止的设置

  1. 我们将 docker 镜像推送到 Amazon ECR,其中包含我们用于训练和部署模型的逻辑
  2. 我们argo用来提交在 #1 中开始训练的工作流。将 argo 安装到我们的 kubernetes 集群时,我们注意到它的组件有时会分配给 GPU 节点。
  3. 我们也在使用KFServing。KFServing 允许我们自动上下调整 GPU,特别是在不使用时将其缩放为零。在将 KFServing 中的组件应用于我们的集群时,它们也会被分配给 GPU 节点。

我们对#2 和#3(上图)的当前设置似乎禁止了 KFServing 缩小到零的能力。我们担心在 GPU 中使用这些组件将不允许 GPU 缩小。

哪些 Pod 需要分配给我们的 GPU 节点?

(选项 1)我们是否只需要分配我们的 argo 工作流 Pod 而排斥其余的?

- 或者 -

(选项 2)GPU 节点中是否需要其他 kfserving 组件才能正常工作?

  • 选项 1:除了 argo 工作流 Pod,我们如何阻止所有 Pod 进入我们的 GPU 节点?提醒一下,我们还有其他应用程序无法控制,因此为每个 Pod 添加节点关联似乎不现实。

  • 选项 2:当这些 GPU 节点中有 kfserving 组件时,这些 GPU 节点如何缩放到零?我的印象是缩小意味着节点中没有 Pod。

回答

tl;dr 你可以使用taints。

哪些 Pod 需要分配给我们的 GPU 节点?

需要 GPU 的作业的 pod。

如果您的训练作业需要 GPU,您需要使用训练/部署部署的规范中的nodeSelector和来分配它tolerations,请在此处查看一个很好的示例。

如果您的模型是 CV/NLP(许多矩阵乘法),您可能还希望在 GPU 中拥有推理服务,在这种情况下,您需要按照此处所述在其规范中请求它。

我们是否只需要分配我们的 argo 工作流 pod 并排斥其余的?

是的,如果您的推理服务不需要 GPU。

GPU 节点中是否需要其他 kfserving 组件才能正常工作?

不,唯一的 kfserving 组件是kfserving-controller并且不需要 gpu,因为它只是为您的推理服务编排 istio&knative 资源的创建。

如果在您的 gpu 节点组中运行了推理服务,而没有在规范中请求 GPU,则意味着该节点组未配置为具有 taint effect NoSchedule。确保 eksctl 配置中的 gpu 节点组具有文档中所述的污点。


以上是我们如何正确分配Pod以便KFServing可以将GPU实例缩小到零?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>