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

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

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

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

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

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

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

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

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

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

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

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

支持的算法、框架和实例

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

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

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

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

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

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

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

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

多模型终端节点支持以下GPU实例类型:

实例系列 实例类型 vCPUs 每 v 有 GiB 的内存 CPU GPUs 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 示例的列表。多型号终端笔记本电脑位于该ADVANCEDFUNCTIONALITY部分。要打开笔记本,请选择其使用选项卡,然后选择创建副本

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

多模型端点的工作原理

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

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

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

  3. 将模型加载到该加速计算实例上的容器内存(CPUCPU或者GPU,取决于您是否拥有或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支持的端点,并发性是容器实例数量的一个因素。 vCPUs

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

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

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

  • 为需要提供的所有型号配置足够的亚马逊弹性区块存储 (AmazonEBS) 容量。

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

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

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

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

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

    • 将实例上的内存量想象成要加载的模型的缓存空间,将的数量 vCPUs 视为对加载的模型进行推断的并发限制(假设调用模型是绑定的)。CPU

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

    • 对于GPU支持的实例,更高的实例和GPU内存量使您能够加载更多模型并准备好处理推理请求。

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

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

    • d 实例类型系列(例如 m5d、c5d 或 r5d)和 g5s 都带有NVMe(非易失性存储器 express)SSD,可提供高的 I/O 性能,并且可以缩短将模型下载到存储卷以及容器从存储卷加载模型所需的时间。

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

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

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

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

评估您的模型缓存命中率

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

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