我正在使用Argo和KFServing与Amazon EKS (Kubernetes)建立一个推论服务。重要的是要知道,我们的团队在每个环境中都有一个EKS集群,这意味着我们的集群中可能有多个我们无法控制的应用程序。
这是我们到目前为止设置的
- 我们将一个docker映像推送到Amazon ECR,其中包含我们训练和部署模型的逻辑
- 我们使用
argo
提交在#1中开始培训的工作流程。当将argo安装到kubernetes集群中时,我们注意到它的组件有时会分配给GPU节点。 - 我们也在使用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,你需要在你的培训/部署部署的规范中使用nodeSelector
和tolerations
分配它,在这里看到一个很好的例子。
如果你的模型是CV/NLP(许多矩阵乘法),你可能想要有推理服务在这种情况下,你需要在它的规格中请求它,如这里所述。
我们是否只需要分配我们的argo工作流pod并击退休息吗?
是,如果你的推理服务不需要GPU。
GPU节点内是否需要其他kfservice组件才能正常工作?
不,唯一的kserver组件是kfserving-controller
,不需要gpu,因为它只是为您的推理服务编排本地资源的创建。
如果在你的gpu节点组中运行了推理服务,而没有在规范中请求gpu,这意味着该节点组没有配置为具有NoSchedule
的污染效果。请确保eksctl配置中的gpu节点组具有文档中描述的污名。