开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。

开始在 Amazon SageMaker 上部署实时模型

亚马逊SageMaker 是一项完全托管的服务,使每个开发人员和数据科学家都能够快速构建、训练和大规模部署机器学习 (ML) 模型。 ML是在推理中实现的。 SageMaker 提供四种推理选项:

  1. 实时推理
  2. 无服务器推理
  3. 异步推理
  4. 批量转换

这四个选项可大致分为在线推理选项和批量推理选项。在在线推理中,请求预计在到达时得到处理,并且使用应用程序期望在处理每个请求后得到响应。这可以同步发生(实时推理、无服务器)或异步发生(异步推理)。在同步模式中,消费应用程序被阻止并且在收到响应之前无法继续。这些工作负载往往是实时应用程序,例如在线信用卡欺诈检测,其中响应预计为毫秒到秒的量级,并且请求负载很小(几 MB)。在异步模式中,应用程序体验不会被阻止(例如,通过移动应用程序提交保险索赔),并且通常需要更大的有效负载大小和/或更长的处理时间。在离线推理中,推理请求的聚合(批次)被一起处理,只有在整个批次处理完毕后才提供响应。通常,这些工作负载对延迟不敏感,涉及大量(多个 GB)数据,并且按固定节奏进行安排(例如,在一天结束时对安全摄像机镜头运行对象检测或在早上处理工资单数据)。月底)。

在光秃秃的骨头上, SageMaker 实时推理 由模型、您正在使用的框架/容器以及支持您部署的端点的基础设施/实例组成。在这篇文章中,我们将探讨如何创建和调用单一模型端点。

选择模型部署选项

选择正确的推理类型可能很困难,以下简单指南可以为您提供帮助。这不是严格的流程图,因此如果您发现其他选项更适合您,请随意使用它们。特别是,当您的延迟较低且一致(毫秒或秒的量级)且吞吐量敏感的工作负载时,实时推理是托管模型的绝佳选择。您可以在配置的同时控制端点后面的实例类型和计数 自动缩放 处理流量的策略。您还可以使用其他两个 SageMaker Inference 选项来创建端点。异步推理是指当您具有较大的有效负载大小和接近实时的延迟带宽时。这是一个不错的选择,特别是对于预处理时间较长的 NLP 和计算机视觉模型。当您的流量间歇性且不想管理基础设施扩展时,无服务器推理是一个不错的选择。无论您选择何种推理类型,创建端点的方法都保持不变。在这篇文章中,我们将重点关注创建基于实例的实时端点,但您可以根据您的用例轻松地将其调整为其他任何推理选项。最后,批量推理是离线进行的,因此您可以提供一组想要从中进行推理的数据,我们将运行它。这同样是基于实例的,因此您可以为您的工作负载选择最佳实例。由于没有启动和运行的端点,您只需为作业的持续时间付费。它适合处理千兆字节的数据,作业持续时间可能长达数天。有一些内置功能可以使结构化数据的处理变得更加容易,并且可以进行优化以自动分发结构化数据。一些示例用例包括倾向建模、预测性维护和流失预测。所有这些都可以批量离线进行,因为它不必对特定事件做出反应。

在 SageMaker Endpoints 上托管模型

关键在于,SageMaker 实时端点由模型和您选择用来支持端点的基础设施组成。 SageMaker 使用容器来托管模型,这意味着您需要一个容器来为您提供的每个模型使用的框架正确设置环境。例如,如果您正在使用 Sklearn 模型,则必须在正确设置 Sklearn 的容器中传递模型脚本/数据。幸运的是,SageMaker 提供了 管理图像 适用于流行的框架,例如 TensorFlow、PyTorch、Sklearn 和 HuggingFace。您可以使用高级检索和利用这些图像 SageMaker Python 开发工具包 并将模型脚本和数据注入到这些容器中。如果 SageMaker 没有受支持的容器,您也可以 构建您自己的容器 并推送您自己的自定义映像,安装模型所需的依赖项。

SageMaker 支持训练模型和预训练模型。在上一段中,当我们谈论模型脚本/数据时,我们正在引用这个问题。您可以在容器上安装脚本,或者如果您有预先训练的模型工件(例如,`模型.joblib` 对于 SKLearn),然后您可以将其与您的图像一起提供给 SageMaker。要了解 SageMaker Inference,您将在端点创建过程中创建三个主要实体:

  1. SageMaker 模型实体 – 您可以在此处传入经过训练的模型数据/模型脚本以及您正在使用的图像,无论它是由 AWS 所有还是由您构建。
  2. 端点配置创建 – 您可以在此处定义基础架构,这意味着您可以选择实例类型、数量等。
  3. 端点创建 – 这是托管您调用以获取响应的模型的 REST 端点。让我们看看如何利用托管 SageMaker 映像和您自己的定制映像来部署终端节点。

实时端点要求

  1. 在创建端点之前,您必须了解要托管什么类型的模型。如果它是框架模型,例如 TensorFlow、PyTorch 或 MXNet,那么您可以使用其中之一 预构建框架图像.
    如果它是自定义模型,或者您希望完全灵活地创建 SageMaker 将运行以进行推理的容器,那么您可以构建自己的容器。

SageMaker端点 是由一个 SageMaker 模型 端点配置。
如果您使用 Boto3,那么您将创建这两个对象。否则,如果您使用 SageMaker Python SDK,那么当您使用 SageMaker Python SDK 时,系统会代表您创建端点配置。 .deploy(..) 功能。

SageMaker 实体:

  • SageMaker 模型:
    • 包含推理图像的详细信息、模型伪影的位置 亚马逊简单存储服务 (Amazon S3), 网络配置,以及 AWS身份和访问管理(IAM) 端点使用的角色。
      • SageMaker 要求将您的模型工件压缩为 .tar.gz 文件。 SageMaker 自动提取此内容 .tar.gz 归档到 /opt/ml/model/ 容器中的目录。如果您使用框架容器之一,例如 TensorFlow、PyTorch 或 MXNet,则该容器预计您的 TAR 结构如下:
        • TensorFlow
          model.tar.gz/
          |--[model_version_number]/
          |--variables
          |--saved_model.pb
          code/
          |--inference.py
          |--requirements.txt

        • PyTorch
          model.tar.gz/
          |- model.pth
          |- code/
          |- inference.py
          |- requirements.txt # only for versions 1.3.1 and higher

        • MX网
          model.tar.gz/
          |- model-symbol.json
          |- model-shapes.json
          |- model-0000.params
          |- code/
              |- inference.py
              |- requirements.txt # only for versions 1.6.0 and higher

        • 斯克莱恩
          model.tar.gz/
          |- model.joblib
          | code/ 
          |- inference.py

      • 当使用框架图像时,我们可以提供自定义入口点脚本,在其中我们可以实现我们自己的预处理和后处理。在我们的例子中,推理脚本打包在 /code 目录下的 model.tar.gz 中。
    • 端点配置
      • 包含将 SageMaker 模型部署到端点所需的基础设施信息。
      • 例如,此处指定我们创建的 SageMaker 模型以及实例类型和初始实例计数。

框架和 BYOC

    • 检索 SageMaker 图像
      • 这部分并不总是必需的,并且由 SageMaker Python SDK 通过估算器抽象出来。但是,如果您希望能够检索 SageMaker 托管映像并对其进行扩展,那么您可以通过 SDK 获取可用的映像。以下是检索 TF 2.2 图像进行推理的示例。
        import sagemaker
        tf_image = sagemaker.image_uris.retreive(framework="tensorflow", region="us-east-1",
        image_scope = "inference", version = "2.2", instance_type = "ml.c5.xlarge)
        print(tf_image)

    • 框架
      • 如果您想要部署框架模型,例如 TensorFlow、PyTorch 或 MXNet,那么您所需要的只是模型工件。
      • 请参阅直接从模型工件部署模型的文档 TensorFlow, PyTorchMX网.
    • 在 1P 和 BYOC 之间进行选择
      • SageMaker SDK 还抽象处理图像输出,正如您在前面的框架部分中看到的那样。它具有适用于 Sklearn、TensorFlow 和 PyTorch 的现成估计器,可以根据您选择的版本自动为您选择图像。然后你可以通过传入训练/推理脚本 脚本模式 进入这些估计器。
        from sagemaker.pytorch import PyTorch #PyTorch Estimator within SageMaker SDK
        estimator_parameters = {"entry_point": "train_deploy_pytorch_without_dependencies.py",
        "source_dir": "pytorch_script","instance_type": train_instance_type,
        "instance_count": 1,"hyperparameters": hyperparameters,
        "role": role,"base_job_name": "pytorch-model","framework_version": "1.5",
        "py_version": "py3",}
        
        ## Model Training
        estimator = PyTorch(**estimator_parameters)estimator.fit(inputs)
        
        ## Deploy Trained model
        pytorch_predictor = estimator.deploy(initial_instance_count=1, instance_type="ml.m5.xlarge", endpoint_name=pytorch_endpoint_name)

      • SageMaker 并非支持所有包和映像,在这种情况下,您必须 自带容器(BYOC)。这意味着构建一个 Dockerfile 来为您的模型服务设置正确的环境。 Spacy NLP 模块就是一个例子,该框架没有托管的 SageMaker 容器。因此,您必须提供安装 Spacy 的 Dockerfile。在容器中,您还可以安装模型推理脚本。让我们快速讨论您以自带容器格式提供的组件,因为这些组件在大多数示例中保持一致。
        • “nginx.conf” 是nginx前端的配置文件。您不必编辑此文件,除非您想调整这些部分。
        • “预测器.py” 是实际为您的应用程序实现 Flask Web 服务器和模型代码的程序。您的容器中还可以有其他可在此文件中调用的 Python 文件或函数。
        • “服务” 是容器启动托管时启动的程序。它只是启动 Gunicorn 服务器,该服务器运行在 Predictor.py 中定义的 Flask 应用程序的多个实例。与 nginx.conf 一样,您不必编辑此文件,除非您想要执行进一步的调整。
        • “火车” 是运行容器进行训练时调用的程序。您将修改此程序以实现您的训练算法。如果您引入了像 Spacy 这样的预训练模型或框架,那么您不需要此文件。
        • “wsgi.py” 是一个用于调用 Flask 应用程序的小包装器。您应该能够按原样使用此文件,除非您更改了 Predictor.py 文件的名称。在这种情况下,请确保此处正确映射。
    • 自定义推理脚本
      • SageMaker 框架容器使您能够使用自定义入口点 script/inference.py 灵活地处理请求的前/后处理和模型加载。
      • 请参阅创建自定义 inference.py 脚本的文档 TensorFlow, PyTorchMX网.
    • 定制集装箱

与 SageMaker 端点交互的不同方式

以编程方式使用 SageMaker 的选项有很多,以便您可以调用已部署的模型来进行推理。这 AWS 命令​​行界面 (AWS CLI)、 REST API, AWS CloudFormation, AWS 云开发套件 (AWS CDK),AWS 开发工具包是 AWS 提供的常用工具,并受到其他 AWS 服务的广泛支持。对于 SageMaker,我们还有一个 SageMaker Python SDK。现在,让我们比较创建、调用和管理 SageMaker 端点的不同选项。

此外 SageMaker CLI,您可以通过两种方式通过 SDK 以编程方式与 SageMaker 中的端点进行交互。让我们看看之间的一些区别 SageMaker Python 开发工具包Boto3 Python SDK:

  1. 高级 SageMaker“Python”SDK – 该 SDK 是一个开源库,提供更高级别的抽象,专门用于使用 Python 以编程方式调用 SageMaker API。该 SDK 的优点在于,调用 sagemaker API 非常容易,已经完成了许多繁重的工作,例如同步/异步模式调用 API(有助于避免轮询)、更简单的请求/响应模式、更少的代码以及更多更简单的代码。 SageMaker Python SDK 提供了多个用于使用 SageMaker 的高级抽象。该包旨在简化 SageMaker 上的不同机器学习流程。
  2. 低级 AWS SDK (Boto3 SDK) – 此 SDK 在较低级别工作,允许用户从支持的编程语言中进行选择并以编程方式调用任何 AWS 服务。这不仅特定于 SageMaker,而且普遍适用于所有 AWS 服务。低级 AWS 开发工具包提供各种编程语言版本,例如 .NET、Python、Java、Node.js 等。常用的开发工具包之一是 boto3 python SDK,它在 ML 数据科学家社区中很流行。这个 SDK 的优点是它非常轻量级并且默认安装在 AWS Lambda 运行。此外,您可以使用此开发工具包与 SageMaker 之外的任何 AWS 服务进行交互。

这两个 SDK 都可以用于相同的任务,但在某些情况下,使用一个比另一个更直观。建议使用 SageMaker Python SDK 来轻松测试,而建议将 AWS SDK/Boto3 用于生产用例,以便更好地控制性能。例如,SageMaker 即服务为 Sklearn、PyTorch 和 TensorFlow 等流行框架提供预构建和维护的映像。使用 SageMaker SDK 检索深度学习图像、使用 SageMaker SDK 训练模型特别有用 估计,并使用简单的 API 调用轻松部署模型。可以找到一个展示此操作的示例 此处.

另一方面,有时您可能会使用预先训练的模型或不同的框架。这需要大量的定制,而 SageMaker SDK 并不总是提供这一点。我们需要执行三个重要步骤和相应的 boto3 API 调用来部署端点: 模型创建, 端点配置创建端点创建。前两个实体是通过 SageMaker SDK 和我们支持的框架抽象出来的,但我们可以通过 Boto3 SDK 看到这些细节。可以找到展示使用 Boto3 SDK 创建和管理端点所涉及步骤的广泛示例 此处.

SageMaker 托管的注意事项

SageMaker Real-Time Inference 有两个您可以考虑的主要优化:1/ 性能优化,2/ 成本优化。我们先来看看 性能优化,当我们处理延迟敏感的工作负载时,每一毫秒都至关重要。您可以调整不同的旋钮来优化延迟和吞吐量。在实例级别,您可以使用 推理推荐器,我们的内置负载测试工具,可帮助您选择正确的实例类型并计算您的工作负载。利用正确的计算组合将有助于提高性能和成本。您还可以在容器和框架级别进行调整。
要问自己的问题包括:

  1. 你使用什么框架?
  2. 您的容器中是否有可以调整的环境变量?

一个例子是最大化 SageMaker 容器的 TensorFlow 性能。 容器级优化的另一个例子是 使用 gRPC 而不是在端点后面 REST。最后,您还可以在脚本级别进行优化。您的推理代码是否在某些块上花费了额外的时间?对脚本的每一行进行计时将帮助您捕获代码中的任何瓶颈。

有以下三种查看方式 提高利用率 您的实时端点的:

  1. 多模型端点 (MME)
    • 您可以在单个端点后面托管数千个模型。这非常适合您不需要为每个模型都有专用端点的用例。当模型大小和延迟相似且属于同一 ML 框架时,MME 效果最佳。当您不需要始终调用同一模型时,通常可以使用这些模型。您可以将相应的模型动态加载到 SageMaker 端点上以满足您的请求. 可以找到展示 MME 实际应用的示例 此处。如果您想了解有关在 MME 上托管模型的不同注意事项和最佳实践的更多信息,请参阅帖子 此处.
  2. 多容器端点 (MCE)
    • 您可以考虑在单个端点上托管最多 15 个容器,而不是利用多个端点托管多个容器。这些容器中的每一个都可以直接调用。因此,您可以考虑在单个端点上托管不同框架的不同模型。当容器表现出相似的使用和性能特征时,此选项是最佳选择。可以找到展示 MCE 的示例 此处。如果您想了解有关在 MCE 上托管模型的不同注意事项和最佳实践的更多信息,请参阅帖子 此处.
  3. 串行推理管道 (SIP)
    • 如果您的推理逻辑中有一系列步骤管道,那么您可以使用串行推理管道 (SIP)。 SIP 允许您在单个端点后面将 2-15 个容器链接在一起。当您有预处理和后处理步骤时,SIP 效果很好。如果您想了解有关串行推理管道的设计模式的更多信息,请参阅帖子 此处.

要记住的第二个主要优化是 成本。实时推理是创建 SageMaker 端点的三个选项之一。 SageMaker 端点始终运行,除非被删除。因此,您必须考虑提高端点的利用率,从而提供成本效益。

SageMaker 还提供 储蓄计划。 Savings Plans 可以将您的成本降低高达 64%。这是对一致使用量(美元/小时)的 1 年或 3 年期限承诺。看到这个 链接 了解更多信息。并看到这个 链接 最好地优化 Amazon SageMaker 上的推理成本。

结论

在这篇文章中,我们向您展示了在 SageMaker 上的不同模型托管选项之间进行选择的一些最佳实践。我们讨论了 SageMaker Endpoint 要求,还对比了框架和 BYOC 要求和功能。此外,我们还讨论了利用实时端点在生产中托管 ML 模型的不同方法。以经济有效的方式,并具有高性能。

参见对应的 GitHub存储库 并尝试示例。


关于作者

开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。拉古·拉梅沙 是 Amazon SageMaker 服务团队的一名 ML 解决方案架构师。 他专注于帮助客户大规模构建、部署和迁移 ML 生产工作负载到 SageMaker。 他专攻机器学习、人工智能和计算机视觉领域,并拥有 UT Dallas 的计算机科学硕士学位。 在空闲时间,他喜欢旅行和摄影。

开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。拉姆·维吉拉茹 是 SageMaker 服务团队的 ML 架构师。 他专注于帮助客户在 Amazon SageMaker 上构建和优化他们的 AI/ML 解决方案。 在业余时间,他喜欢旅行和写作。

开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。马克卡普 是 SageMaker 服务团队的 ML 架构师。 他专注于帮助客户大规模设计、部署和管理 ML 工作负载。 在业余时间,他喜欢旅行和探索新的地方。

开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。达瓦尔·帕特尔 是 AWS 的首席机器学习架构师。 他曾与从大型企业到中型初创公司的组织合作,解决与分布式计算和人工智能相关的问题。 他专注于深度学习,包括 NLP 和计算机视觉领域。 他帮助客户在 Amazon SageMaker 上实现高性能模型推理。

开始在 Amazon SageMaker PlatoBlockchain Data Intelligence 上部署实时模型。 垂直搜索。 哎。索拉布·特里坎德 是 Amazon SageMaker Inference 的高级产品经理。 他热衷于与客户合作,并以机器学习民主化的目标为动力。 他专注于与部署复杂的 ML 应用程序、多租户 ML 模型、成本优化以及使深度学习模型的部署更易于访问相关的核心挑战。 在业余时间,Saurabh 喜欢徒步旅行、学习创新技术、关注 TechCrunch 以及与家人共度时光。

时间戳记:

更多来自 AWS机器学习