在一个端点后的一个容器中托管多个模型 - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在一个端点后的一个容器中托管多个模型

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

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

图中显示多模型端点如何托管模型以及单模型端点如何托管模型。

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

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

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

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

你不能在 Amazon Elastic Inference 中使用 multi-model-enabled 容器。

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

支持的算法、框架和实例

有关可用于多模型端点的算法、框架和实例类型的信息,请参阅以下各部分。

使用 CPU 支持的实例的多模型端点所支持的算法、框架和实例

以下算法和框架的推理容器支持多模型端点:

要使用任何其他框架或算法,请使用 SageMaker 推理工具包构建支持多模型端点的容器。有关信息,请参阅 为 SageMaker 多模型端点构建自己的容器

多模型端点支持所有 CPU 实例类型。

使用 GPU 支持的实例的多模型端点所支持的算法、框架和实例

SageMaker Triton In ference 服务器支持在多模型端点上托管多个 GPU 支持的模型。它支持所有主要的推理框架,例如 NVIDIA® Tensorrt™、 PyTorch MxNet、Python、ONNX、xgBoost、scikit-learn、OpenVino、自定义 C++ 等。 RandomForest

要使用任何其他框架或算法,可以使用适用于 Python 或 C++ 的 Triton 后端来编写模型逻辑并提供任何自定义模型。服务器准备就绪后,可以开始在一个端点后部署数以百计的深度学习模型。

多模型端点支持下列 GPU 实例类型。

实例系列 实例类型 vCPU 每个 vCPU 的内存 GiB 数量 GPU GPU 内存

p2

ml.p2.xlarge

4

15.25

1

12

p3

ml.p3.2xlarge

8

7.62

1

16

g5

ml.g5.xlarge

4

4

1

24

g5

ml.g5.2xlarge

8

4

1

24

g5

ml.g5.4xlarge

16

4

1

24

g5

ml.g5.8xlarge

32

4

1

24

g5

ml.g5.16xlarge

64

4

1

24

g4dn

ml.g4dn.xlarge

4

4

1

16

g4dn

ml.g4dn.2xlarge

8

4

1

16

g4dn

ml.g4dn.4xlarge

16

4

1

16

g4dn

ml.g4dn.8xlarge

32

4

1

16

g4dn

ml.g4dn.16xlarge

64

4

1

16

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

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

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

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

多模型端点的工作原理

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

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

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

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

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

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

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

注意

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

设置 SageMaker 多模型端点模型缓存行为

默认情况下,多模型端点会将常用模型缓存在内存(CPU 或 GPU,取决于您拥有 CPU 还是 GPU 支持的实例)和磁盘上,以便在推理时降低延迟。只有在容器的内存或磁盘空间不足以容纳新的目标模型时,才会从磁盘上卸载和/或删除缓存的模型。

您可以更改多模型端点的缓存行为,并通过在调用 create_model 时设置参数 ModelCacheSetting 来明确启用或禁用模型缓存。

对于不会通过模型缓存受益的使用案例,我们建议将 ModelCacheSetting 参数的值设置为 Disabled。例如,当需要从端点提供大量模型,但每个模型只被调用一次(或很少被调用)时。对于此类使用案例,请将 ModelCacheSetting 参数的值设置为 Disabled,允许为 invoke_endpoint 请求使用更高的每秒交易量 (TPS)(与默认缓存模式相比)。在这些用例中,更高的 TPS 是因为在invoke_endpoint请求之后 SageMaker 会出现以下情况:

  • 从内存中异步卸载模型,并在调用模型后立即将其从磁盘中删除。

  • 为在推理容器中下载和加载模型提供更高的并发度。对于 CPU 和 GPU 支持的端点,并发度是容器实例的 vCPU 数量的一个相关因素。

有关为多模型终端节点选择 SageMaker ML 实例类型的指南,请参阅多模型端点部署的实例建议

多模型端点部署的实例建议

为多模型终端节点选择 SageMaker ML 实例类型时,需要考虑以下几点:

  • 为需要服务的所有模型预置充足的 Amazon Elastic Block Store (Amazon EBS) 容量。

  • 平衡性能(最大限度地减少冷启动)和成本(不要过度预配置实例容量)。有关终端节点和多模型终端节点 SageMaker 的每种实例类型所连接的存储卷大小的信息,请参阅托管实例存储卷

  • 对于配置为以 MultiModel 模式运行的容器,为其实例预置的存储卷比默认 SingleModel 模式时更大。这样,与 SingleModel 模式相比,可以在实例存储卷上缓存更多模型。

选择 SageMaker ML 实例类型时,请考虑以下因素:

  • 目前,所有 CPU 实例类型和单 GPU 实例类型都支持多模型端点。

  • 要为在多模型端点后托管的模型进行流量分配(访问模式)并确定模型数量(实例上可加载到内存中的模型数),请记住以下信息。

    • 将实例上的内存大小视为待加载模型的缓存空间,将 vCPU 的数量视为对所加载模型执行推理的并发限制(假设调用模型与 CPU 绑定)。

    • 对于 CPU 支持的实例,vCPU 数量会影响每个实例的最大并发调用次数(假设调用模型与 CPU 绑定)。如果 vCPU 数量较多,您就可以同时调用更多独特的模型。

    • 对于 GPU 支持的实例,更大的实例和 GPU 内存使您可以加载更多模型,并准备好响应推理请求。

    • 对于 CPU 和 GPU 支持的实例,都请提供一定的“松弛”内存以便卸载未使用的模型,特别是具有多个实例的多模型端点。如果实例或可用区发生故障,这些实例上的模型将被重新路由到端点后的其他实例。

  • 确定容忍的加载/下载时间:

    • d 实例类型系列(如 m5d、c5d 或 r5d)和 g5s 附带一个 NVMe(非易失性存储规范)SSD,它具有较高的 I/O 性能,并且可以减少将模型下载到存储卷以及容器从存储卷加载模型所需的时间。

    • 由于 d 和 g5 实例类型附带 NVMe 固态硬盘存储,因此 SageMaker 不会将 Amazon EBS 存储卷附加到托管多模型终端节点的这些 ML 计算实例。当模型大小相似且同质(也即,它们具有相似的推理延迟和资源要求)时,自动扩缩的效果最佳。

您还可以使用以下指南来帮助优化多模型端点上的模型加载:

选择无法在内存中容纳所有目标模型的实例类型

在某些情况下,您可以选择一种无法同时在内存中容纳所有目标模型的实例类型,从而降低成本。 SageMaker 当模型内存不足时动态卸载模型,以便为新的目标模型腾出空间。对于请求频率不高的模型,您可以牺牲动态加载延迟。在延迟需求更严格的情况下,您可以选择更大的实例类型或更多实例。提前投入时间进行性能测试和分析,可以帮助您成功地进行生产部署。

评估您的模型缓存命中率

Amazon CloudWatch 指标可以帮助您评估您的模型。有关可用于多模型端点的指标的更多信息,请参阅CloudWatch 多模型端点部署指标

您可以使用 ModelCacheHit 指标的 Average 统计数据来监控已加载模型的请求比率。您可以使用 ModelUnloadingTime 指标的 SampleCount 统计数据来监控在一段时间内发送到容器的卸载请求数。如果模型卸载频率过高(颠簸指示器,由于工作模型集的缓存空间不足,因此将卸载并重新加载模型),请考虑使用具有更多内存的更大实例类型,或者增加多模型端点后的实例数。对于具有多个实例的多模型端点,请注意可以在多个实例上加载一个模型。