我们如何正确分配 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 集群,这意味着我们的集群中可以有多个我们无法控制的应用程序。
这是我们目前的设置
- 我们将 docker 图像推送到 Amazon ECR,其中包含我们训练和部署模型的逻辑
- 我们使用
argo
提交在 #1 中开始训练的工作流。在我们的 kubernetes 集群中安装 argo 时,我们注意到它的组件有时会分配给 GPU 节点。
- 我们也在使用 KFServing。 KFServing 允许我们自动上下缩放我们的 GPU,特别是在不使用时缩放到零。 KFServing 中的组件在将它们应用到我们的集群时也会分配给 GPU 节点。
#2 和#3(上图)的当前设置似乎禁止 KFServing 缩小到零的能力。让我们担心的是,在 GPU 中包含这些组件将不允许 GPU 缩小。
哪些pods需要分配给我们的GPU节点?
(选项 1)我们是否只需要分配我们的 argo 工作流 pod 并排斥其余部分?
-- 或--
(选项 2)GPU 节点内是否需要其他 kfserving 组件才能正常工作?
选项 1:我们如何阻止所有 pods 进入我们的 GPU 节点而不是 argo 工作流 pod?提醒一下,我们还有其他我们无法控制的应用程序,因此为每个 pod 添加节点亲和性似乎不现实。
选项 2:当这些 GPU 节点中包含 kfserving 组件时,GPU 节点如何缩放到零?我的印象是缩小意味着缩小节点中没有pods。
tl;博士
您可以使用 taints.
Which pods need to be assigned to our GPU nodes?
pods 个需要 GPU 的作业。
如果您的训练 作业需要 GPU,您需要使用 training/deployment 部署规范中的 nodeSelector
和 tolerations
来分配它, 看一个很好的例子 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.
中描述的污点
我正在使用 Argo 和 KFServing 以及 Amazon EKS (Kubernetes) 设置 InferenceService。重要的是要知道我们的团队每个环境都有一个 EKS 集群,这意味着我们的集群中可以有多个我们无法控制的应用程序。
这是我们目前的设置
- 我们将 docker 图像推送到 Amazon ECR,其中包含我们训练和部署模型的逻辑
- 我们使用
argo
提交在 #1 中开始训练的工作流。在我们的 kubernetes 集群中安装 argo 时,我们注意到它的组件有时会分配给 GPU 节点。 - 我们也在使用 KFServing。 KFServing 允许我们自动上下缩放我们的 GPU,特别是在不使用时缩放到零。 KFServing 中的组件在将它们应用到我们的集群时也会分配给 GPU 节点。
#2 和#3(上图)的当前设置似乎禁止 KFServing 缩小到零的能力。让我们担心的是,在 GPU 中包含这些组件将不允许 GPU 缩小。
哪些pods需要分配给我们的GPU节点?
(选项 1)我们是否只需要分配我们的 argo 工作流 pod 并排斥其余部分?
-- 或--
(选项 2)GPU 节点内是否需要其他 kfserving 组件才能正常工作?
选项 1:我们如何阻止所有 pods 进入我们的 GPU 节点而不是 argo 工作流 pod?提醒一下,我们还有其他我们无法控制的应用程序,因此为每个 pod 添加节点亲和性似乎不现实。
选项 2:当这些 GPU 节点中包含 kfserving 组件时,GPU 节点如何缩放到零?我的印象是缩小意味着缩小节点中没有pods。
tl;博士 您可以使用 taints.
Which pods need to be assigned to our GPU nodes?
pods 个需要 GPU 的作业。
如果您的训练 作业需要 GPU,您需要使用 training/deployment 部署规范中的 nodeSelector
和 tolerations
来分配它, 看一个很好的例子 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.