使用 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 日之后,新客户将无法在 Amazon SageMaker、Amazon ECS 或 Amazon EC2 中使用 Amazon EI 加速器启动实例。但是,在过去 30 天内至少使用过一次 Amazon EI 的客户将视为当前客户,可继续使用该服务。

Amazon 上的机器学习 (ML) 以低成本、按实际使用量付费的使用模式,提供最全面的 ML 服务和基础设施组合,帮助您更快地创新。Amazon 持续为 ML 推理工作负载提供性能更好、成本更低的基础设施。Amazon 在 2018 年推出了 Amazon Elastic Inference (EI),使客户能够将低成本 GPU 驱动的加速附加到 Amazon EC2、Amazon SageMaker 实例或 Amazon Elastic Container Service (ECS) 任务,与基于 GPU 的独立实例(例如 Amazon EC2 P4d 和 Amazon EC2 G5)相比,运行深度学习推理的成本降低高达 75%。2019 年,Amazon 推出了 Amazon Inferentia,这是 Amazon 的首款定制硅芯片,设计用于在云端提供高性能推理,来加快深度学习工作负载的速度。与当前一代基于 GPU 的同类 Amazon 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 Recommender 帮助他们选择 Amazon EI 的最佳替代实例来部署 ML 模型。

常见问题

  1. 为什么 Amazon 鼓励客户将工作负载从 Amazon Elastic Inference (EI) 转移到 Amazon Inferentia 之类的全新硬件加速选项?

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

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

    本公告将影响附加到任何 Amazon EC2、Amazon SageMaker 实例或 Amazon Elastic Container Service (ECS) 任务的 Amazon EI 加速器。在 Amazon SageMaker 中,这适用于使用 Amazon EI 加速器的端点和笔记本内核。

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

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

  4. 我们目前在使用 Amazon Elastic Inference (EI) 加速器。2023 年 4 月 15 日之后还能继续使用它们吗?

    可以,您能够使用 Amazon EI 加速器。我们建议您尽早将当前在 Amazon EI 上运行的 ML Inference 工作负载迁移到其他硬件加速器选项。

  5. 如何评估我当前的 Amazon SageMaker Inference 端点的替代实例选项?

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

  6. 如何在 Amazon SageMaker 中更改现有端点的实例类型?

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

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

    2. 在指定新创建的 EndpointConfig 时调用 UpdateEndpoint

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

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

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

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

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

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

从 Amazon Elastic Inference 迁移到其他实例

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

PyTorch

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

1. 选择合适的实例类型

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

在我们使用 Inference Recommender 进行的负载测试中,g4dn.xlarge 实例的性能要好于连接了 eia.2largem5.large 实例。使用 Amazon Elastic Inference,您必须为连接加速器的 ML 实例支付额外费用。Amazon Elastic Inference 还只支持 PyTorch 1.5 和 TensorFlow 2.3。如果您迁移到 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:更新现有的端点

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

选择 EI 加速器类型

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

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

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

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

在 SageMaker 笔记本实例中使用 EI

通常情况下,您首先在 SageMaker 笔记本中构建和测试机器学习模型,然后部署模型用于生产。在创建笔记本实例时,您可以将 EI 附加到笔记本实例。您可以通过使用 Amazon SageMaker Python SDK 中 TensorFlow、MXNet 和 PyTorch 估算器和模型支持的本地模式,设置本地托管在笔记本实例上的端点,用于测试推理性能。笔记本实例上目前不支持启用 Elastic Inference 的 PyTorch。有关如何将 EI 连接到笔记本实例并设置本地端点用于推理的说明,请参阅将 EI 附加到笔记本实例。针对 TensorFlow 和 Apache MXNet 的启用 Elastic Inference 的版本,也有启用 Elastic Inference 的 SageMaker 笔记本 Jupyter 内核。有关使用 SageMaker 笔记本实例的信息,请参阅使用 Amazon SageMaker 笔记本实例

在托管端点上使用 EI

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

支持 EI 的框架

Amazon Elastic Inference 设计用于 TensorFlow、Apache MXNet 或 PyTorch 机器学习框架的 Amazon 增强版本。这些框架的增强版本在您使用 Amazon SageMaker Python 开发工具包时自动构建到容器中,或者您可以将其作为二进制文件下载并导入到自己的 Docker 容器中。

您可以将启用了 EI 的 TensorFlow 二进制文件从公有 amazonei-tensorflow Amazon S3 存储桶下载到 TensorFlow 服务容器。有关构建容器(使用启用了 EI 的 TensorFlow 版本)的更多信息,请参阅 SageMaker 中具有 TensorFlow 的 Amazon Elastic Inference

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

您可以下载适用于 PyTorch 的启用 Elastic Inference 的二进制文件。有关构建容器(使用启用了 EI 的 PyTorch 版本)的更多信息,请参阅 SageMaker 中具有 PyTorch 的 Amazon Elastic Inference

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

如果您需要创建一个自定义容器来部署复杂的模型,并且此模型需要扩展到 SageMaker 预构建容器不支持的框架,请使用低级 Amazon SDK for Python (Boto 3)

将 EI 与 SageMaker 内置算法结合使用

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

EI 示例笔记本

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