如何部署可在GKE中的GPU上运行的动态可扩展AI服务?

时间:2019-02-25 13:47:15

标签: google-kubernetes-engine

我目前正在为我的应用程序部署后端服务API(当然要在python和flask环境中运行tensorflow模型,并带有GPU),该API需要具有可扩展性,以便我可以同时说1000个请求。

该模型需要为每个请求运行15秒,这相对较慢,并且我需要为每个请求满足firebaseapp的超时限制。问题是我想在google-kubernetes-engine中部署这个东西,但是我不知道如何部署我的映像,以便每个pod(运行一个映像)仅在一个gpu节点中运行(反之亦然)并且每个请求都定向到一个可用的容器,这意味着没有两个请求都定向到相同的容器。

我知道有一个名为Daemonset https://cloud.google.com/kubernetes-engine/docs/concepts/daemonset的东西,但是我不确定这是否适合我的需求。另一个问题是,是否可以按请求(或按Pod可用性)扩展Pod / gpu节点?例如,如果当前只有一个节点运行一个Pod,则可以服务第一个传入请求,如果第二个请求进入,则需要生成第二个Pod / gpu节点来服务该请求。什么是流量导向机制?是Ingress服务吗?如何在流量引导机制中检测pod的可用性?总结起来,这是三个问题:1.如何将每个请求定向到每个不同的Pod? 2.如何在一个GPU节点中仅运行一个Pod? 3.如何扩展(可能是一个Daemonset?)并快速扩展,以便可以在30秒内满足每个请求?

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用Container-native load balancing来定位广告连播并平均分配流量。

  2. 请查看Pod anti-affinity,其思想是,如果该节点X已经在运行一个或多个满足规则的Pod,则该Pod不应在节点X中运行。

  3. 对于自动缩放,我将使用HPA(水平的pod自动缩放器),以便pod可以根据要监视的指标进行缩放。