使用 Amazon SageMaker Elastic Inference (EI) - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon SageMaker Elastic Inference (EI)

此功能在中国区域中不可用。

从 2023 年 4 月 15 日起, Amazon 将不会让新客户加入 Amazon Elastic Inference (EI),并将帮助现有客户将其工作负载迁移到价格和性能更高的选项。2023 年 4 月 15 日之后,新客户将无法在亚马逊、亚马逊 ECS 或亚马逊 EC2 中使用亚马逊 SageMaker EI 加速器启动实例。

机器学习 (ML) 以低成本的付费 as-you-go 使用模式提供最全面的机器学习服务和基础架构,可 Amazon 帮助您更快地进行创新。 Amazon 持续为机器学习推理工作负载提供性能更好、成本更低的基础架构。 Amazon Amazon Elastic Inference (EI) 于 2018 年推出,使客户能够将低成本 GPU 驱动的加速附加到亚马逊 EC2 SageMaker 、亚马逊实例或亚马逊弹性容器服务 (ECS) 任务,与基于 GPU 的独立实例(例如亚马逊 EC2 p4d 和 Amazon EC2 G5)相比,运行深度学习推理的成本最多可降低75%。2019年,亚马逊 Amazon 推出了 Amazon Inferentia,这是亚马逊的首款定制芯片,旨在通过在云端提供高性能推理来加速深度学习工作负载。与当前一代基于 GPU 的同类亚马逊 EC2 实例相比,基于 Amazon Inferentia 芯片的 Amazon EC2 Inf1 实例的吞吐量提高了 2.3 倍,每次推断的成本最多可降低 70%。随着 Amazon Inferentia 和 Amazon EC2 G5 实例等新的加速计算选项的推出,使用 Amazon EI 将部分 GPU 连接到 CPU 主机实例的好处已经减弱。例如,在 Amazon EI 上托管模型的客户迁移到 ml.inf1.xlarge 实例后,可以节省高达 56% 的成本,并将性能提高 2 倍。

客户可以使用 Amazon SageMaker Inference 推荐器来帮助他们选择 Amazon EI 的最佳替代实例来部署机器学习模型。

常见问题

  1. 为什么亚马逊鼓励客户将工作负载从 Amazon Elastic Inference (EI) 转移到推断等 Amazon 较新的硬件加速选项?

    借助用于Amazon 推理工作负载的 Inferenti a 等新的硬件加速器选项,客户可以以比 Amazon EI 低得多的价格获得更好的性能。 Amazon Inferentia旨在在云端提供高性能推理,降低推理的总成本,并使开发人员可以轻松地将机器学习集成到其业务应用程序中。为了让客户能够从此类新一代硬件加速器中受益,在 2023 年 4 月 15 日之后,我们不会为新客户采用 Amazon EI。

  2. 停止让新客户加入 Amazon Elastic Inference (EI) 的举动会影响哪些 Amazon 服务?

    此公告将影响附加到任何亚马逊 EC2、亚马逊 SageMaker 实例或亚马逊弹性容器服务 (ECS) 任务的 Amazon EI 加速器。在亚马逊 SageMaker,这适用于使用 Amazon EI 加速器的终端节点和笔记本电脑内核。

  3. 在 2023 年 4 月 15 日之后,我能否创建新的 Amazon Elastic Inference (EI) 加速器?

    不可以,如果您是新客户,并且在过去 30 天内没有使用过 Amazon EI,那么在 2023 年 4 月 15 日之后,您将无法在自己的 Amazon 账户中创建新的亚马逊 EI 实例。但是,如果您在过去 30 天内至少使用过一次 Amazon EI 加速器,则可以将新 Amazon EI 加速器连接到您的实例。

  4. 如何评估我当前 Amazon SageMaker 推理终端节点的替代实例选项?

    Amazon SageMaker Inference Recommerder 可以帮助您确定经济实惠的部署,将现有工作负载从 Amazon Elastic Inference (EI) 迁移到支持的相应机器学习实例。 SageMaker

  5. 如何更改我在 Amazon 中现有终端节点的实例类型 SageMaker?

    您可以通过执行以下操作来更改现有端点的实例类型:

    1. 首先,创建一个使用新 EndpointConfig实例类型的新实例。如果您有自动扩缩策略,请删除现有的自动扩缩策略

    2. UpdateEndpoint在指定您新创建的同时致电 EndpointConfig。

    3. 等待您的端点将状态更改为 InService。这将花费大约 10-15 分钟。

    4. 最后,如果您需要为新终端节点自动缩放,请为这个新终端节点创建新的自动缩放策略,然后。 ProductionVariant

  6. 如何使用 Amazon Elastic Inference (EI) 更改现有亚马逊 SageMaker 笔记本实例的实例类型?

    在 SageMaker 控制台中选择笔记本实例,然后选择要更新的笔记本实例。确保笔记本实例处于 Stopped 状态。最后,您可以选择编辑并更改您的实例类型。确保在您的笔记本实例启动时,为新实例选择正确的内核。

  7. 是否有特定的实例类型可以很好地替代 Amazon Elastic Inference (EI)?

    每个机器学习工作负载都是独一无二的。我们建议使用 Amazon SageMaker Inference Recomperder 来帮助您确定适合您的机器学习工作负载、性能要求和预算的实例类型。Inferentia,具体而言即 Amazoninf1.xlarge,是适合 Amazon EI 客户的最佳高性能低成本替代方案。

从 Amazon Elastic Inference 迁移到其他实例

以下信息可以帮助您将 SageMaker托管的终端节点从使用 Amazon Elastic Inference 加速器的实例迁移到其他实例。建议因您的框架而异。

PyTorch

如果您要从中迁移 PyTorch,请遵循以下指南。

1。选择合适的实例类型

每个机器学习工作负载都是独一无二的。我们建议使用 Amazon SageMaker Inference Recomperder 来帮助您确定适合您的机器学习工作负载、性能要求和预算的实例类型。 Amazon 具体而言inf1.xlarge,推断是亚马逊 Elastic Inference 客户的最佳高性能和低成本替代方案。

在我们使用 Inference Recommender 进行的负载测试中,g4dn.xlarge 实例的性能要好于连接了 eia.2largem5.large 实例。使用 Amazon Elastic Inference,您必须为连接加速器的 ML 实例支付额外费用。亚马逊 Elastic Inference 也仅支持 PyTorch 1.5 和 2.3。 TensorFlow 如果您迁移到ml.g4dn实例,则可以使用最新版本的 PyTorch 1.11 和 TensorFlow 2.9。此外,ml.g4dn Amazon 推理在所有 Amazon 区域都可用,而 Amazon Elastic Inference 仅在 6 个区域可用。对于大多数 ML 推理工作负载, Amazon Inferentia 和 ml.g4dn 都能以更低的价格提供更好的性能。

2。修改 inference.py

修改您的 inference.py 文件以删除任何 Elastic Inference 专门要求的更改,并使用默认处理程序。根据不同的用户案例,您可能有不同的输入和输出处理程序,但您必须完成的主要更改位于模型加载处理函数 model_fnpredict_fn 中。移除特定于 Elastic Inference 的预测处理程序 predict_fn,并将模型加载处理程序 model_fn 恢复为默认格式。以下示例说明示如何执行该操作,并注释掉了您应从 inference.py 中删除的部分:

from __future__ import print_function import os import torch import torch.nn as nn import torch.nn.functional as F import numpy as np def model_fn(model_dir, context): model = {customer_model} # if torch.__version__ in VERSIONS_USE_NEW_API: # import torcheia # loaded_model = loaded_model.eval() # loaded_model = torcheia.jit.attach_eia(loaded_model, 0) with open(os.path.join(model_dir, 'model.pth'), 'rb') as f: model.load_state_dict(torch.load(f)) return model # def predict_fn(input_data, model): # logger.info( # "Performing EIA inference with Torch JIT context with input of size {}".format( # input_data.shape # ) # ) # device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # input_data = input_data.to(device) # with torch.no_grad(): # if torch.__version__ in VERSIONS_USE_NEW_API: # import torcheia # # torch._C._jit_set_profiling_executor(False) # with torch.jit.optimized_execution(True): # return model.forward(input_data) # else: # with torch.jit.optimized_execution(True, {"target_device": "eia:0"}): # return model(input_data) def predict_fn(input_data, model): return model(input_data)

3。创建模型

创建一个新模型,指向已修改的 inference.py 文件。您可以将 inference.py 文件保存在本地并指向该文件,方法是指定 source_direntry_point,或者通过 tar 将 inference.py 文件放入模型 tarball 中。以下示例展示了前一种情况:

from sagemaker.pytorch import PyTorchModel pytorch = PyTorchModel( model_data={model_data_url}, role=role, entry_point="inference.py", source_dir="code", framework_version="1.5.1", py_version="py3", sagemaker_session=sagemaker_session, )

4。将模型部署到端点并调用它

进行上述更改后,您可以使用以下选项之一部署模型。

选项 1:从头开始部署

您可以使用加速计算类别中的推荐实例(例如 G4)将模型部署到新的端点。

predictor = pytorch.deploy( ... # instance_type = "ml.c5.xlarge", instance_type="ml.g4dn.2xlarge", ... response = predictor.predict(payload)

选项 2:更新现有的端点

完成以下步骤以更新您现有的端点:

  1. 调用 CreateEndpointConfig 以创建一个新 EndpointConfig,使用新的实例类型。如果您有自动扩缩策略,请删除现有的自动扩缩策略。

    endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, # The name of new created model "InstanceType": instance_type, # Specify the right-sized instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ] )
  2. 调用 UpdateEndpoint 并指定您新创建的 EndpointConfig

    endpoint_config_response = sagemaker_client.update_endpoint( EndpointConfigName=endpoint_config_name, # The name of the new endpoint config just created EndpointName=endpoint_name # The name of the existing endpoint you want to update )
  3. 等待您的端点将状态更改为 InService。这需要大约 10-15 分钟。

  4. 最后,如果您需要为新端点实现自动扩缩,请为这个新端点和 ProductionVariant 创建新的自动扩缩策略。

TensorFlow

如果您要从中迁移 TensorFlow,请遵循以下指南。

1。选择合适的实例类型

请参阅 1. 在该PyTorch 部分中选择正确的实例类型指南。

2。将模型部署到端点并调用它

您可以使用以下选项之一来部署模型。

选项 1:从头开始部署

您可以通过将模型部署到新端点来从 Elastic Inference 迁移,方法是删除 accelerator_type 字段并指定加速计算类别中大小合适的实例类型,例如 G4。在以下示例中,注释掉的行会使您进行部署而不使用 Elastic Inference 加速器。

predictor = tensorflow_model.deploy( ... instance_type="ml.g4dn.2xlarge" # instance_type="ml.c5.xlarge", # accelerator_type="ml.eia1.medium" ... )

选项 2:更新现有的端点

请参阅选项 2. 更新本PyTorch 节步骤 4 中的现有终端节点指南。

MXNet

如果您要从 MXNet 迁移,请使用以下指南。

1。选择合适的实例类型

请参阅 1. 在该PyTorch 部分中选择正确的实例类型指南。

2。将模型部署到端点并调用它

您可以使用以下选项之一来部署模型。

选项 1:从头开始部署

您可以通过将模型部署到新端点来从 Elastic Inference 迁移,方法是删除 accelerator_type 字段并指定加速计算类别中大小合适的实例类型,例如 G4。在以下示例中,注释掉的行会使您进行部署而不使用 Elastic Inference 加速器。

predictor = mxnet_model.deploy( ... # instance_type="ml.c5.xlarge", instance_type="ml.g4dn.2xlarge" ... )

选项 2:更新现有的端点

请参阅本节步骤 4 中的 “选项 2:更新现有端点指南 PyTorch ”

选择 EI 加速器类型

在为托管模型选择加速器类型时,请考虑以下因素:

  • 模型、输入张量和批量大小影响您需要的加速器内存数量。在开始时,使用提供的内存至少与您训练模型的文件大小相当的加速器类型。一个因素是模型在运行时使用的内存可能比文件大小大得多。

  • 对 CPU 计算资源、主系统内存以及基于 GPU 的加速和加速器内存的需求因不同类型的深度学习模型而异。应用程序的延迟和吞吐量需求也会确定您需要的计算和加速的数量。全面测试不同实例类型和 EI 加速器大小的配置,确保选择最适合您应用程序性能需求的配置。

有关如何选择 EI 加速器的更多信息,请参阅:

在 SageMaker 笔记本实例中使用 EI

通常,在将机器学习模型部署到生产环境之前,先在 SageMaker 笔记本中构建和测试这些模型。在创建笔记本实例时,您可以将 EI 附加到笔记本实例。您可以使用 mxNet 支持的本地模式以及 Amaz on Pyth SageMaker on SDK 中的 PyTorch 估算器和模型来 TensorFlow测试推理性能,从而设置在笔记本实例上本地托管的终端节点。笔记本实例目前不支持启用 Elast PyTorch ic Inference。有关如何将 EI 连接到笔记本实例并设置本地端点用于推理的说明,请参阅将 EI 附加到笔记本实例。还有支持 Elastic 推理的 SageMaker Notebook Jupyter 内核,适用于支持 Elastic 推理的版本和 Apache MXnet。 TensorFlow 有关使用 SageMaker 笔记本实例的信息,请参阅使用 Amazon SageMaker 笔记本实例

在托管端点上使用 EI

当您准备好将模型部署到生产环境以提供推断时,可以创建一个 SageMaker 托管端点。您可以将 EI 附加到其中托管了端点的实例,用于在提供推理时提升其性能。有关如何将 EI 附加到托管端点实例的说明,请参阅在亚马逊 SageMaker 托管的终端节点上使用 EI

支持 EI 的框架

Amazon Elastic Inference 专为与 Apache MXNet 或机器学习框架的 Amazon TensorFlow增强版本一起使用而设计。 PyTorch 当您使用 Amaz SageMaker on Python SDK 时,这些增强版本的框架会自动内置到容器中,或者您可以将它们作为二进制文件下载并导入自己的 Docker 容器中。

你可以将支持 EI 的 TensorFlow 二进制文件从公共 amazonei-tensorflow Amaz on S3 存储桶下载到提供服务的容器中。 TensorFlow 有关构建使用支持 EI 的版本的容器的更多信息,请参阅中的 Amazon Elastic In TensorFlow ference。 TensorFlow SageMaker

您可以将启用了 EI 的 MXNet 二进制文件从公有 amazonei-apachemxnet Amazon S3 存储桶下载到 MXNet 服务容器。有关构建使用支持 EI 的 MXnet 版本的容器的更多信息,请参阅带有 MXNet 的 Amazon E last ic Inference。 SageMaker

您可以下载启用 Elastic Inference 的二进制文件。 PyTorch有关构建使用支持 EI 的版本的容器的更多信息,请参阅中的 Amazon Elastic In PyTorch ference。 PyTorch SageMaker

要在托管端点中使用 Elastic Inference,您可以根据需要选择以下任一框架。

如果您需要创建一个自定义容器来部署复杂的模型,并且需要对 SageMaker 预先构建的容器不支持的框架进行扩展,请使用适用于 Python 的低级 Amazon SDK(Bot o 3)。

将 EI 与 SageMaker 内置算法一起使用

目前,图像分类 – MXNet对象检测 – MXNet内置算法支持 EI。有关将图像分类算法与 EI 结合使用的示例,请参阅端到端多类别图像分类示例

EI 示例笔记本

以下示例笔记本提供了在中使用 EI 的示例 SageMaker: