我们如何正确分配 pods 以便 KFServing 可以将 GPU 实例缩减为零?

How do we assign pods properly so that KFServing can scale down GPU Instances to zero?

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

这是我们目前的设置

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

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

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

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

-- 或--

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

tl;博士 您可以使用 taints.

Which pods need to be assigned to our GPU nodes?

pods 个需要 GPU 的作业。

如果您的训练 作业需要 GPU,您需要使用 training/deployment 部署规范中的 nodeSelectortolerations 来分配它, 看一个很好的例子 here.

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

Do we only need our argo workflow pod to be assigned and repel the rest?

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

Are there other kfserving components needed within the GPU node to work right?

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

如果您的 GPU 节点组中有推理服务 运行 而规范中没有请求 GPU,则意味着该节点组未配置为具有污染效果 NoSchedule。确保 eksctl 配置中的 gpu 节点组具有 doc.

中描述的污点