首页 > 解决方案 > 我们如何正确分配 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 组件才能正常工作?

标签: kubernetesgpuamazon-ekskubeflowargo-workflows

解决方案


tl;博士您可以使用taints

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

需要 GPU 的作业的 pod。

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

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

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

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

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

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

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


推荐阅读