多模型端点 - Amazon SageMaker

多模型端点

多模型端点提供了经济高效的可扩展解决方案,可用于部署数量非常多的模型。它们使用相同的资源实例集和共享的服务容器来托管您的所有模型。与使用单模型端点相比,这可以提高端点利用率,从而降低托管成本。还可以减少部署开销,这是因为 Amazon SageMaker 会管理在内存中加载模型,并根据到端点的流量模式扩展它们。

下图显示多模型端点与单模型端点相比的工作原理。

此图显示了多模型端点与单模型端点如何托管模型。

多模型端点非常适合在共享服务容器上托管使用相同机器学习框架的大量模型。如果您的模型中包括经常访问和不经常访问的模型,则多模型端点可以在使用更少资源并节约更高成本的同时高效地为对应流量提供服务。您的应用程序应容忍在调用不常使用的模型时偶尔出现的、与冷启动相关的延迟损失。

多模型端点支持托管 CPU 和 GPU 支持的模型。通过使用 GPU 支持的模型,您可以通过提高端点及其底层加速型计算实例的使用率来降低模型部署成本。

多模型端点还可在模型之间实现内存资源的时间共享。当模型的大小和调用延迟非常相似时,这种方法效果最佳。在这种情况下,多模型端点可以有效地在所有模型中使用实例。如果模型具有明显较高的每秒事务数 (TPS) 或延迟要求,我们建议在专用端点上托管这些模型。

您可以使用具有以下特征的多模型端点:

可以使用 AWS SDK for Python (Boto) 或 SageMaker 控制台创建多模型端点。对于 CPU 支持的多模型端点,可以通过集成多模型服务器库来使用自定义构建的容器创建端点。

多模型端点的工作原理

SageMaker 在容器内存中管理托管在多模型端点上的模型的生命周期。SageMaker 在您调用模型时动态地加载和缓存它们,而不是在创建端点时将所有模型从 Amazon S3 存储桶下载到容器中。当 SageMaker 收到对特定模型的调用请求时,它将执行以下操作:

  1. 将请求路由到端点后面的实例。

  2. 将模型从 S3 存储桶下载到该实例的存储卷中。

  3. 将模型加载到该加速计算实例上的容器内存(CPU 或 GPU,具体取决于您拥有 CPU 还是 GPU 支持的实例)。如果模型已加载到容器内存中,则调用速度会更快,因为 SageMaker 不需要下载和加载模型。

SageMaker 继续将对模型的请求路由到已加载了模型的实例。但如果模型收到多个调用请求,并且存在多模型端点的其他实例,则 SageMaker 会将部分请求路由到另一实例以调节流量。如果尚未在第二个实例上加载模型,则模型将下载到该实例的存储卷中,并加载到容器的内存中。

当实例的内存利用率较高,并且 SageMaker 需要将另一个模型加载到内存中时,它会从该实例的容器中卸载未使用的模型,以确保有足够的内存来加载模型。卸载的模型将保留在实例的存储卷上,并且稍后可加载到容器的内存中,而无需再次从 S3 存储桶进行下载。如果实例的存储卷达到其容量,则 SageMaker 会从存储卷中删除所有未使用的模型。

要删除模型,请停止发送请求并将其从 S3 存储桶中删除。SageMaker 在服务容器中提供多模型端点功能。在多模型端点中添加和删除模型不需要更新端点本身。要添加一个模型,请将该模型上传到 S3 存储桶并调用它。无需更改代码即可使用它。

注意

更新多模型端点时,由于多模型端点中的智能路由会适应您的流量模式,因此端点上的初始调用请求可能会遇到更高的延迟。但在它了解您的流量模式后,您就会体验到最常用模型的延迟较低。由于模型是动态加载到实例的,因此不常使用的模型可能会发生一定的冷启动延迟。

用于多模型端点的示例笔记本

要了解有关如何使用多模型端点的更多信息,您可以参阅以下示例笔记本:

有关如何创建和访问可用于在 SageMaker 中运行前期示例的 Jupyter 笔记本实例的说明,请参阅 Amazon SageMaker 笔记本实例。创建并打开笔记本实例之后,请选择 SageMaker 示例选项卡以查看所有 SageMaker 示例的列表。多模型端点笔记本位于高级功能部分。要打开笔记本,请选择其使用选项卡,然后选择创建副本

有关多模型端点使用案例的更多信息,请参阅以下博客和资源: