【问题标题】:How to serve AI models in a multi-tenant environment in scale?如何在多租户环境中大规模服务 AI 模型?
【发布时间】:2020-11-02 00:33:03
【问题描述】:

我有一个服务器集群,每个服务器获取实时身份验证事件作为请求,并根据 S3 中的 AI 模型返回传入事件的风险评分。

此集群为多个客户提供服务。每个客户在 S3 中都有自己的 AI 模型。 S3 大小的每个 AI 模型文件大小约为 50MB。

问题:

假设这个集群由 10 台服务器组成,它为 20 个客户提供服务。 S3中分别有20个AI模型。

在一个简单的解决方案中,集群中的每台服务器最终可能会将所有 20 个模型从 S3 加载到服务器内存中。 20(集群中的服务器)*50MB(S3 中的模型大小)= 1GB。 下载模型并加载到内存需要很长时间,并且内存量受限于服务器的内存容量。 当然 - 这些问题随着规模的扩大而变得更大。

那么我有哪些选择? 我知道有开箱即用的产品用于模型生命周期管理,例如:MlFlow、KubeFlow、... 这些产品能解决我提出的问题吗?

也许使用 Redis 作为缓存层?

也许将 Redis 与 MlFlow 和 KubeFlow 结合使用作为缓存层?

还有其他解决方案吗?

限制: 我不能在该集群中的服务器之间进行粘性会话,因此我无法确保同一客户的所有请求最终都会在同一台服务器中结束。

【问题讨论】:

    标签: artificial-intelligence scalability mlflow kubeflow


    【解决方案1】:

    据我了解您的问题,我会为每个模型使用单独的服务服务器。因此,您将拥有 20 个模型服务服务器,其中仅加载 50MB 模型数据,并且该服务器将为一个模型服务。您还需要有 1 个服务器来存储模型元数据,它负责将传入请求发送到相关的模型服务服务器。此元数据将包含“客户与模型服务服务器端点”的信息。

    本质上,Kubeflow 将上述解决方案作为一个包提供,并且它具有高度可扩展性,因为它使用 Kubernetes 进行编排。例如,有一天如果您想添加新客户,您可以触发 Kubeflow 管道来训练您的模型,将其保存到 S3,在 Kubeflow 集群中部署一个单独的模型服务器并更新元数据。 Kubeflow 使用其管道方法提供自动化,并使用 Kubernetes 提供可扩展性。

    在我看来,目前 Kubeflow 的缺点是社区不大,产品一直在改进。

    我之前没有使用过 MlFlow,所以我无法详细说明。

    【讨论】:

      【解决方案2】:

      据我了解您的问题,任何模型服务库/框架都无法解决此问题。获取风险评分请求的服务器实例必须加载相应的模型。

      要解决这个问题,您应该根据租户向特定服务器实例请求。

      “部署标记”模式可以在这种情况下为您提供帮助。详情请见https://docs.microsoft.com/en-us/azure/architecture/patterns/deployment-stamp

      作为前门(参见模式),NGINX 或 Spring Cloud Gateway 可能是一个很好的解决方案。只需查看请求标头(授权标头)即可获取租户/用户并确定合适的服务器实例。

      【讨论】:

        猜你喜欢
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2011-08-16
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        • 2011-12-15
        相关资源
        最近更新 更多