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



我正在使用Argo和KFServing与Amazon EKS (Kubernetes)建立一个推论服务。重要的是要知道,我们的团队在每个环境中都有一个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工作流舱并排斥其他的?

——OR——

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

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

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

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

需要GPU的作业的pod。

如果你的培训作业需要GPU,你需要在你的培训/部署部署的规范中使用nodeSelectortolerations分配它,在这里看到一个很好的例子。

如果你的模型是CV/NLP(许多矩阵乘法),你可能想要有推理服务在这种情况下,你需要在它的规格中请求它,如这里所述。

我们是否只需要分配我们的argo工作流pod并击退休息吗?

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

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

不,唯一的kserver组件是kfserving-controller,不需要gpu,因为它只是为您的推理服务编排本地资源的创建。

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

最新更新