kubernetes - 我们如何正确分配 pod,以便 KFServing 可以将 GPU 实例缩减到零?
问题描述
我正在使用 Argo 和 KFServing 与 Amazon EKS (Kubernetes) 设置 InferenceService。重要的是要知道我们的团队每个环境都有一个 EKS 集群,这意味着我们的集群中可能有多个我们无法控制的应用程序。
这是我们到目前为止的设置
- 我们将一个 docker 镜像推送到 Amazon ECR,其中包含我们训练和部署模型的逻辑
- 我们用于
argo
提交在 #1 中开始训练的工作流。在将 argo 安装到我们的 kubernetes 集群时,我们注意到它的组件有时会分配给 GPU 节点。 - 我们也在使用KFServing。KFServing 允许我们向上和向下自动缩放 GPU,特别是在不使用时缩放为零。KFServing 中的组件在将它们应用到我们的集群时也会被分配给 GPU 节点。
我们对#2 和#3(上图)的当前设置似乎阻止了 KFServing 缩小到零的能力。让我们担心的是,在 GPU 中拥有这些组件不会让 GPU 缩小。
哪些 Pod 需要分配给我们的 GPU 节点?
(选项 1)我们是否只需要分配我们的 argo 工作流 pod 并排斥其余部分?
- 或者 -
(选项 2)GPU 节点中是否需要其他 kfserving 组件才能正常工作?
选项 1:我们如何阻止所有 pod 进入我们的 GPU 节点,而不是 argo 工作流 pod?提醒一下,我们还有其他无法控制的应用程序,因此为每个 pod 添加节点关联似乎不切实际。
选项 2:当这些 GPU 节点中有 kfserving 组件时,这些 GPU 节点如何缩放到零?我的印象是缩小意味着节点中没有 pod。
解决方案
tl;博士您可以使用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 效果NoSchedule
。确保 eksctl 配置中的 gpu 节点组具有文档中描述的污点。
推荐阅读
- r - 为什么我的正则表达式字符串整体不匹配,而整体的单个组件匹配?
- github - 如何为 AsciiDoc 或 reStructuredText 中的定义(标记)列表生成锚 ID?
- python-3.x - 我在 Windows 10 中运行 Tensorflow-gpu 时遇到问题
- python - 有谁知道我如何在 pygame 上的某个坐标处制作我的图像?
- flutter - Flutter Provider 的方法不能从类中调用
- java - 字符串资源不会在 API 21 的运行时翻译 - Android Studio
- c# - 一次性循环的必要性
- python - 在不知道列数的情况下组合数据框
- javascript - 无法将类添加到 img 标签
- git - 如何将 Gerrit 变更移动到不同的分支?