部署模型进行实时推理 - Amazon SageMaker

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

部署模型进行实时推理

重要

允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。需要向资源添加标签的权限,因为 Studio 和 Studio Classic 会自动标记他们创建的任何资源。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记,则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息,请参阅 提供为资源添加标签 SageMaker的权限

AWS 适用于亚马逊的托管政策 SageMaker授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

使用 SageMaker 托管服务部署模型有多种选择。您可以使用 SageMaker Studio 以交互方式部署模型。或者,你可以使用 SDK(例如 Python AWS SDK 或 SageMaker Python SDK for Boto3),以编程方式部署模型。您也可以使用进行部署 AWS CLI。

开始前的准备工作

在部署 SageMaker 模型之前,请找到并记下以下内容:

  • 您的 AWS 区域 Amazon S3 存储桶所在的位置

  • 存储模型构件的 Amazon S3 URI 路径

  • 的 IAM 角色 SageMaker

  • 包含推理代码的自定义镜像的 Docker Amazon ECR URI 注册表路径,或者支持和支持的内置 Docker 镜像的框架和版本 AWS

有关每个地图中 AWS 服务 可用的列表 AWS 区域,请参阅区域地图和边缘网络。有关如何创建 IAM 角色的信息,请参阅创建 IAM 角色

重要

存储模型构件的 Amazon S3 存储桶必须与您正在创建的模型 AWS 区域 相同。

与多个模型共享资源利用率

您可以使用 Amazon 将一个或多个模型部署到终端节点 SageMaker。当多个模型共享一个终端节点时,它们会共同使用托管在那里的资源,例如机器学习计算实例、CPU 和加速器。将多个模型部署到一个端点的最灵活方法是将每个模型定义为推理组件

推理组件

推理组件是一个 SageMaker 托管对象,可用于将模型部署到终端节点。在推理组件设置中,您可以指定模型、端点以及模型如何利用端点托管的资源。要指定模型,可以指定 SageMaker 模型对象,也可以直接指定模型工件和图像。

在设置中,您可以通过定制向模型分配所需的 CPU 内核、加速器和内存的方式来优化资源利用率。您可以将多个推理组件部署到一个终端节点,其中每个推理组件都包含一个模型以及该模型所需的资源利用率。

部署推理组件后,您可以在 SageMaker API 中使用 InvokeEndpoint 操作时直接调用关联的模型。

推理组件具有以下优点:

弹性

推理组件将托管模型的详细信息与端点本身分离。这样可以更灵活地控制模型的托管和使用端点提供服务的方式。您可以在同一个基础架构上托管多个模型,也可以根据需要在端点中添加或删除模型。您可以单独更新每个模型。

可扩展性

您可以指定要托管每个模型的副本数量,也可以设置最小副本数,以确保模型加载的数量与满足请求所需的数量相同。您可以将任何推理组件副本缩小到零,这为另一个副本腾出空间进行扩展。

SageMaker 使用以下方法部署模型时,将其打包为推理组件:

  • SageMaker 经典工作室。

  • 用于部署模型对象的 SageMaker Python SDK(将终端节点类型设置为其中EndpointType.INFERENCE_COMPONENT_BASED)。

  • 用于定义部署 AWS SDK for Python (Boto3) 到终端节点的InferenceComponent对象。

使用 SageMaker Studio 部署模型

完成以下步骤,通过 SageMaker Studio 以交互方式创建和部署模型。有关 Studio 的更多信息,请参阅 Studio 文档。有关各种部署场景的更多演练,请参阅博客 Package 并使用 Amazon 轻松部署经典机器学习模型和 LLM SageMaker — 第 2 部分

准备您的工件和权限

在 SageMaker Studio 中创建模型之前,请先完成本节。

您可以通过两种方式在 Studio 中携带工件和创建模型:

  1. 您可以带上预先打包的tar.gz存档,其中应包括您的模型工件、任何自定义推理代码以及文件中列出的任何依赖项。requirements.txt

  2. SageMaker 可以为你打包你的神器。您只需要将原始模型工件和任何依赖项带到requirements.txt文件中, SageMaker 就可以为您提供默认的推理代码(或者您可以使用自己的自定义推理代码覆盖默认代码)。 SageMaker以下框架支持此选项: PyTorch,xgBoost。

除了带上您的模型、您的 AWS Identity and Access Management (IAM) 角色和 Docker 容器(或 SageMaker 具有预构建容器的所需框架和版本)外,您还必须授予通过 SageMaker Studio 创建和部署模型的权限。

您应该将AmazonSageMakerFull访问策略附加到您的 IAM 角色,以便您可以访问 SageMaker 和其他相关服务。要在 Studio 中查看实例类型的价格,您还必须附加AWS PriceListServiceFull访问策略(或者如果您不想附加整个策略,更具体地说,就是pricing:GetProducts操作)。

如果您在创建模型时选择上传模型项目(或上传示例负载文件以获取推理建议),则必须创建 Amazon S3 存储桶。存储桶名称必须以单词SageMaker为前缀。也可以使用其他大写 SageMaker 形式:Sagemaker或。sagemaker

我们建议您使用存储桶命名惯例sagemaker-{Region}-{accountID}。此存储桶用于存储您上传的项目。

创建存储桶后,将以下 CORS(跨源资源共享)策略附加到存储桶:

[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]

您可以使用以下任何一种方法将 CORS 策略附加到 Amazon S3 存储桶:

  • 通过 Amazon S3 控制台中的编辑跨源资源共享 (CORS) 页面

  • 使用 Amazon S3 API PutBucketC ors

  • 使用 put-bucket-cors AWS CLI 命令:

    aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."

创建可部署模型

在此步骤中,您将 SageMaker 通过提供构件以及其他规范(例如所需的容器和框架、任何自定义推理代码和网络设置)来创建模型的可部署版本。

通过执行以下操作在 SageMaker Studio 中创建可部署模型:

  1. 打开 SageMaker Studio 应用程序。

  2. 在左侧导航窗格中,选择 模型

  3. 选择可部署模型选项卡。

  4. 可部署模型页面上,选择创建

  5. 创建可部署模型页面上,在模型名称字段中,输入模型的名称。

在 “创建可部署模型” 页面上还有几个部分可供您填写。

容器定义部分如下图所示:

在 Studio 中创建模型的 “容器定义” 部分的屏幕截图。
对于 “容器定义” 部分,请执行以下操作:
  1. 对于容器类型,如果您想使用 SageMaker 托管容器,请选择预建容器;如果您有自己的容器,请选择自带容器。

  2. 如果您选择了预建容器,请选择要使用的容器框架、框架版本硬件类型

  3. 如果您选择自带容器,请输入 Amazon ECR 路径作为容器映像的 ECR 路径

然后,填写 “Ar t ifacts” 部分,如下图所示:

在 Studio 中创建模型的 “工件” 部分的屏幕截图。
对于 “工件” 部分,请执行以下操作:
  1. 如果你使用的是 SageMaker 支持打包模型工件(PyTorch 或 XGBoost)的框架之一,那么对于构件,你可以选择上传工件选项。使用此选项,您可以简单地指定原始模型工件、您拥有的任何自定义推理代码以及 requirements.txt 文件,然后 SageMaker 为您打包存档。执行以下操作:

    1. 对于构件,请选择上传构件以继续提供您的文件。否则,如果您已经有包含模型文件、推理代码和requirements.txt文件的tar.gz档案,请选择 Input S3 URI 到预打包的项目。

    2. 如果您选择上传项目,则对于 S3 存储桶,请输入 Amazon S3 路径,指 SageMaker 向在为您打包项目后要存储的存储桶。然后,完成以下步骤。

    3. 对于上传模型工件,请上传您的模型文件。

    4. 对于推理代码,如果您想使用 SageMaker 提供推理服务的默认代码,请选择使用默认推理代码。否则,请选择上传自定义推理代码以使用您自己的推理代码。

    5. 对于 Upload requirements.txt,请上传一个列出您要在运行时安装的所有依赖项的文本文件。

  2. 如果您使用的框架不 SageMaker 支持打包模型工件,Studio 会向您显示预打包的构件选项,并且您必须提供所有已打包为tar.gz存档的构件。执行以下操作:

    1. 对于预打包的项目,如果您已将tar.gz档案上传到 Amazon S3,请为预打包的模型工件选择输入 S3 URI。如果您想直接将存档上传到,请选择上传预先打包的模型工件。 SageMaker

    2. 如果您为预打包的模型项目选择了输入 S3 URI,请输入 S3 URI 存档的 Amazon S 3 路径。否则,请从本地计算机上选择并上传档案。

下一部分是 “安全”,它看起来像以下屏幕截图:

在 Studio 中创建模型的 “安全” 部分的屏幕截图。
对于 “安全” 部分,请执行以下操作:
  1. 对于 IAM 角色,请输入 IAM 角色的 ARN。

  2. (可选)对于虚拟私有云 (VPC) P rivate Cloud,您可以选择一个 Amazon VPC 来存储您的模型配置和项目。

  3. (可选)如果您想限制容器的互联网访问,请打开网络隔离开关。

最后,您可以选择填写 “高级选项” 部分,如下图所示:

用于在 Studio 中创建模型的高级选项部分的屏幕截图。
(可选)对于 “高级选项” 部分,请执行以下操作:
  1. 如果您想在模型创建后对其运行 Amazon SageMaker Inference 推荐器作业,请打开自定义实例推荐开关。推理推荐器是一项功能,可为您提供推荐的实例类型,以优化推理性能和成本。在准备部署模型时,您可以查看这些实例建议。

  2. 添加环境变量中,输入容器的环境变量作为键值对。

  3. 对于标签,将任何标签作为键值对输入。

  4. 完成模型和容器配置后,选择创建可部署模型

现在 SageMaker Studio 中应该有一个可以部署的模型。

部署模型

最后,将您在上一步中配置的模型部署到 HTTPS 终端节点。您可以将单个模型或多个模型部署到端点。

模型和端点兼容性

在将模型部署到端点之前,模型和端点必须通过以下设置具有相同的值来兼容:

  • IAM 角色

  • Amazon VPC,包括其子网和安全组

  • 网络隔离(启用或禁用)

Studio 禁止您通过以下方式将模型部署到不兼容的端点:

  • 如果您尝试将模型部署到新的终端节点, SageMaker 请使用兼容的初始设置配置该端点。如果您通过更改这些设置而破坏兼容性,Studio 会显示警报并阻止您的部署。

  • 如果您尝试部署到现有终端节点,但该终端节点不兼容,Studio 会显示警报并阻止您的部署。

  • 如果您尝试向部署中添加多个模型,Studio 会阻止您部署彼此不兼容的模型。

当 Studio 显示有关型号和端点不兼容的警报时,您可以在警报中选择查看详细信息以查看哪些设置不兼容。

部署模型的一种方法是在 Studio 中执行以下操作:

  1. 打开 SageMaker Studio 应用程序。

  2. 在左侧导航窗格中,选择 模型

  3. 模型页面上,从模型列表中选择一个或多个 SageMaker 模型。

  4. 选择部署

  5. 对于端点名称,打开下拉菜单。您可以选择现有端点,也可以创建部署模型的新端点。

  6. 对于实例类型,选择要用于终端节点的实例类型。如果您之前为模型运行过推理推荐器作业,则推荐的实例类型将显示在 “推荐” 标题下的列表中。否则,您将看到一些可能适合您的模型的潜在实例

    的实例类型兼容性 JumpStart

    如果您正在部署 JumpStart 模型,Studio 仅显示该模型支持的实例类型。

  7. 初始实例数中,输入您要为终端节点配置的初始实例数。

  8. 对于最大实例数,请指定终端节点在向上扩展以适应流量增加时可以配置的最大实例数。

  9. 如果您要部署的模型是模型中心中最常用的 JumpStart LLM 之一,则在实例类型和实例计数字段之后会显示替代配置选项。

    对于最受欢迎的 JumpStart LLM, AWS 有预先基准测试的实例类型,可以针对成本或性能进行优化。这些数据可以帮助您决定使用哪种实例类型来部署 LLM。选择 “备用配置”,打开一个包含预先基准测试数据的对话框。面板如下图所示:

    “备用配置” 框的屏幕截图

    在 “备用配置” 框中,执行以下操作:

    1. 选择一个实例类型。您可以选择 “每小时成本” 或 “最佳性能”,查看针对指定型号优化成本或性能的实例类型。您也可以选择 “其他支持的实例”,查看与该 JumpStart 模型兼容的其他实例类型的列表。请注意,在此处选择实例类型会覆盖先前在步骤 6 中指定的任何实例选择。

    2. (可选)打开 “自定义所选配置” 开关以指定最大总令牌数(您要允许的最大令牌数,即您的输入令牌和模型生成的输出的总和)、最大输入令牌长度(允许每个请求输入的最大令牌数)和最大并发请求数(模型一次可以处理的最大请求数)。

    3. 选择选择以确认您的实例类型和配置设置。

  10. 模型字段应该已经填充了您正在部署的一个或多个模型的名称。您可以选择添加模型以向部署中添加更多模型。对于您添加的每个模型,请填写以下字段:

    1. 在 “CPU 核心数” 中,输入您要专用于模型使用的 CPU 内核。

    2. 在 “最小副本数” 中,输入您希望在任何给定时间在端点上托管的最小模型副本数。

    3. 最小 CPU 内存 (MB) 中,输入模型所需的最小内存量(以 MB 为单位)。

    4. 在 “最大 CPU 内存 (MB)” 中,输入您希望允许模型使用的最大内存量(以 MB 为单位)。

  11. (可选)对于 “高级” 选项,请执行以下操作:

    1. 对于 IAM 角色,请使用默认 SageMaker IAM 执行角色或指定您自己的具有所需权限的角色。请注意,此 IAM 角色必须与您在创建可部署模型时指定的角色相同。

    2. 对于虚拟私有云 (VPC),您可以指定要在其中托管终端节点的 VPC。

    3. 对于加密 KMS 密 AWS KMS 钥,选择一个密钥来加密连接到托管终端节点的 ML 计算实例的存储卷上的数据。

    4. 打开 “启用网络隔离” 开关,以限制容器的互联网访问。

    5. 超时配置中,在模型数据下载超时(秒)容器启动运行状况检查超时(秒)字段中输入值。这些值分别决定了 SageMaker 允许将模型下载到容器和启动容器的最长时间。

    6. 对于标签,将任何标签作为键值对输入。

    注意

    SageMaker 使用与您正在部署的模型兼容的初始值配置 IAM 角色、VPC 和网络隔离设置。如果您通过更改这些设置而破坏兼容性,Studio 会显示警报并阻止您的部署。

配置完选项后,该页面应如以下屏幕截图所示。

Studio 中部署模型页面的屏幕截图。

配置部署后,选择 Deploy 以创建终端节点并部署您的模型。

使用 Python 软件开发工具包部署模型

使用 SageMaker Python SDK,您可以通过两种方式构建模型。第一种方法是从ModelModelBuilder类中创建模型对象。如果您使用Model类来创建Model对象,则需要指定模型包或推理代码(取决于您的模型服务器)、用于处理客户端和服务器之间数据的序列化和反序列化的脚本,以及要上传到 Amazon S3 以供使用的任何依赖项。构建模型的第二种方法是使用您ModelBuilder为其提供模型工件或推理代码的模型。 ModelBuilder自动捕获您的依赖关系,推断所需的序列化和反序列化函数,并打包依赖关系以创建对象。Model有关 ModelBuilder 的更多信息,请参阅使用 Amazon SageMaker 创建模型 ModelBuilder

以下部分介绍了创建模型和部署模型对象的两种方法。

设置

以下示例为模型部署过程做准备。他们导入必要的库并定义用于定位模型工件的 S3 URL。

SageMaker Python SDK
例 导入语句

以下示例从 SageMaker Python SDK、Python SDK (Boto3) 和 Python 标准库中导入模块。这些模块提供了帮助您部署模型的有用方法,接下来的其余示例将使用它们。

import boto3 from datetime import datetime from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements from sagemaker.predictor import Predictor from sagemaker.enums import EndpointType from sagemaker.model import Model from sagemaker.session import Session
boto3 inference components
例 导入语句

以下示例从适用于 Python 的软件开发工具包 (Boto3) 和 Python 标准库中导入模块。这些模块提供了帮助您部署模型的有用方法,接下来的其余示例将使用它们。

import boto3 import botocore import sys import time
boto3 models (without inference components)
例 导入语句

以下示例从适用于 Python 的软件开发工具包 (Boto3) 和 Python 标准库中导入模块。这些模块提供了帮助您部署模型的有用方法,接下来的其余示例将使用它们。

import boto3 import botocore import datetime from time import gmtime, strftime
例 模型工件网址

以下代码构建了一个示例 Amazon S3 网址。该 URL 可在 Amazon S3 存储桶中找到预训练模型的模型构件。

# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "DOC-EXAMPLE-BUCKET" # The directory within your S3 bucket your model is stored in: bucket_prefix = "sagemaker/model/path" # The file name of your model artifact: model_filename = "my-model-artifact.tar.gz" # Relative S3 path: model_s3_key = f"{bucket_prefix}/"+model_filename # Combine bucket name, model file name, and relate S3 path to create S3 model URL: model_url = f"s3://{s3_bucket}/{model_s3_key}"

完整的 Amazon S3 网址存储在变量中model_url,该变量将在以下示例中使用。

概述

您可以通过多种方式使用 SageMaker Python SDK 或适用于 Python 的 SDK (Boto3) 部署模型。以下各节总结了您为几种可能的方法所完成的步骤。以下示例演示了这些步骤。

SageMaker Python SDK

使用 SageMaker Python SDK,您可以通过以下任一方式构建模型:

  • Model类中创建模型对象 — 您必须指定模型包或推理代码(取决于您的模型服务器)、用于处理客户端和服务器之间数据的序列化和反序列化的脚本,以及要上传到 Amazon S3 以供使用的任何依赖项。

  • ModelBuilder类中创建模型对象 — 您提供模型工件或推理代码,并ModelBuilder自动捕获依赖关系,推断所需的序列化和反序列化函数,并打包依赖关系以创建对象。Model

    有关 ModelBuilder 的更多信息,请参阅使用 Amazon SageMaker 创建模型 ModelBuilder。您还可以查看博客 Pack age,通过第 1 部分轻松部署经典机器学习模型和 LLM,了解更多信息。 SageMaker

以下示例描述了创建模型和部署模型对象的两种方法。要以这些方式部署模型,请完成以下步骤:

  1. 使用ResourceRequirements对象定义要分配给模型的端点资源。

  2. ModelModelBuilder类中创建模型对象。该ResourceRequirements对象在模型设置中指定。

  3. 使用Model对象的deploy方法将模型部署到端点。

boto3 inference components

以下示例演示如何将模型分配给推理组件,然后将推理组件部署到端点。要以这种方式部署模型,请完成以下步骤:

  1. (可选)使用create_model方法创建 SageMaker 模型对象。

  2. 通过创建终端节点配置对象来指定终端节点的设置。要创建一个,请使用create_endpoint_config方法。

  3. 使用create_endpoint方法创建您的终端节点,并在您的请求中提供您创建的终端节点配置。

  4. 使用create_inference_component方法创建推理组件。在设置中,您可以通过执行以下任一操作来指定模型:

    • 指定 SageMaker 模型对象

    • 指定模型图片 URI 和 S3 网址

    您还可以为模型分配端点资源。通过创建推理组件,您可以将模型部署到终端节点。您可以通过创建多个推理组件(每个模型一个)将多个模型部署到一个终端节点。

boto3 models (without inference components)

以下示例演示如何创建模型对象,然后将模型部署到端点。要以这种方式部署模型,请完成以下步骤:

  1. 使用create_model方法创建 SageMaker 模型。

  2. 通过创建终端节点配置对象来指定终端节点的设置。要创建一个,请使用create_endpoint_config方法。在端点配置中,您可以将模型对象分配给生产变体。

  3. 使用create_endpoint方法创建您的终端节点。在您的请求中,提供您创建的终端节点配置。

    创建终端节点时,配置 SageMaker 终端节点资源,然后它会将模型部署到终端节点。

配置

以下示例配置将模型部署到终端节点所需的资源。

SageMaker Python SDK

以下示例将端点资源分配给带有ResourceRequirements对象的模型。这些资源包括 CPU 内核、加速器和内存。然后,该示例从Model类中创建一个模型对象。或者,您可以通过实例化ModelBuilder类并运行来创建模型对象,build该方法也显示在示例中。 ModelBuilder为模型打包提供了统一的接口,在本例中,它为大型模型部署准备模型。该示例用于构建 Hu ModelBuilder gging Face 模型。(您也可以传递 JumpStart 模型)。构建模型后,可以在模型对象中指定资源需求。在下一步中,您将使用此对象将模型部署到端点。

resources = ResourceRequirements( requests = { "num_cpus": 2, # Number of CPU cores required: "num_accelerators": 1, # Number of accelerators required "memory": 8192, # Minimum memory required in Mb (required) "copies": 1, }, limits = {}, ) now = datetime.now() dt_string = now.strftime("%d-%m-%Y-%H-%M-%S") model_name = "my-sm-model"+dt_string # build your model with Model class model = Model( name = "model-name", image_uri = "image-uri", model_data = model_url, role = "arn:aws:iam::111122223333:role/service-role/role-name", resources = resources, predictor_cls = Predictor, ) # Alternate mechanism using ModelBuilder # uncomment the following section to use ModelBuilder /* model_builder = ModelBuilder( model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf" schema_builder=SchemaBuilder(sample_input,sample_output), env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" } ) # build your Model object model = model_builder.build() # create a unique name from string 'mb-inference-component' model.model_name = unique_name_from_base("mb-inference-component") # assign resources to your model model.resources = resources */
boto3 inference components

以下示例使用create_endpoint_config方法配置终端节点。在创建端点时,您可以将此配置分配给该端点。在配置中,您可以定义一个或多个生产变体。对于每种变体,您可以选择希望 Amazon 预配置 SageMaker 的实例类型,也可以启用托管实例扩展。

endpoint_config_name = "endpoint-config-name" endpoint_name = "endpoint-name" inference_component_name = "inference-component-name" variant_name = "variant-name" sagemaker_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", ProductionVariants = [ { "VariantName": variant_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1, "ManagedInstanceScaling": { "Status": "ENABLED", "MinInstanceCount": 1, "MaxInstanceCount": 2, }, } ], )
boto3 models (without inference components)
例 模型定义

以下示例使用中的create_model方法定义 SageMaker 模型 AWS SDK for Python (Boto3)。

model_name = "model-name" create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name", PrimaryContainer = { "Image": "image-uri", "ModelDataUrl": model_url, } )

此示例指定了以下内容:

  • ModelName:模型的名称(在此示例中,存储在名为 model_name 的字符串变量中)。

  • ExecutionRoleArn:亚马逊 SageMaker 可以代入的 IAM 角色的亚马逊资源名称 (ARN),用于访问模型工件和 Docker 镜像,以便在 ML 计算实例上部署或批量转换任务。

  • PrimaryContainer:主 Docker 映像的位置,其中包含推理代码、关联构件和自定义环境映射,供推理代码在部署模型进行预测时使用。

例 终端节点配置

以下示例使用create_endpoint_config方法配置终端节点。Amazon SageMaker 使用此配置来部署模型。在配置中,您可以确定使用create_model方法创建的一个或多个模型,用于部署您希望 Amazon 预置 SageMaker 的资源。

endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName = "endpoint-config-name", # List of ProductionVariant objects, one for each model that you want to host at this endpoint: ProductionVariants = [ { "VariantName": "variant-name", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 # Number of instances to launch initially. } ] )

此示例为该ProductionVariants字段指定了以下键:

部署

以下示例将模型部署到端点。

SageMaker Python SDK

以下示例使用模型对象的deploy方法将模型部署到实时 HTTPS 端点。如果您为模型创建和部署的resources参数指定值,则优先使用您为部署指定的资源。

predictor = model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, resources = resources, )

对于该instance_type字段,该示例指定了模型的 Amazon EC2 实例类型的名称。对于该initial_instance_count字段,它指定要在其上运行终端节点的初始实例数。

以下代码示例演示了另一种情况,即您将模型部署到端点,然后将另一个模型部署到同一端点。在这种情况下,必须为两个模型的deploy方法提供相同的端点名称。

# Deploy the model to inference-component-based endpoint falcon_predictor = falcon_model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" resources = resources, ) # Deploy another model to the same inference-component-based endpoint llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, endpoint_name = "<endpoint_name>" # same endpoint name as for falcon model )
boto3 inference components

完成终端节点配置后,使用 create_endpoint 方法创建您的终端节点。终端节点名称 AWS 区域 在您的 AWS 账户中必须是唯一的。

以下示例使用请求中指定的终端节点配置创建终端节点。Amazon SageMaker 使用终端节点来配置资源。

sagemaker_client.create_endpoint( EndpointName = endpoint_name, EndpointConfigName = endpoint_config_name, )

创建终端节点后,您可以通过创建推理组件向其部署一个或多个模型。以下示例使用create_inference_component方法创建一个。

sagemaker_client.create_inference_component( InferenceComponentName = inference_component_name, EndpointName = endpoint_name, VariantName = variant_name, Specification = { "Container": { "Image": "image-uri", "ArtifactUrl": model_url, }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }, RuntimeConfig = {"CopyCount": 2} )
boto3 models (without inference components)
例 部署

向提供端点配置 SageMaker。该服务会启动机器学习计算实例,并按照配置中的规定部署一个或多个模型。

完成模型和端点配置后,使用 create_endpoint 方法创建您的终端节点。终端节点名称 AWS 区域 在您的 AWS 账户中必须是唯一的。

以下示例使用请求中指定的终端节点配置创建终端节点。Amazon SageMaker 使用终端节点来配置资源和部署模型。

create_endpoint_response = sagemaker_client.create_endpoint( # The endpoint name must be unique within an AWS Region in your AWS account: EndpointName = "endpoint-name" # The name of the endpoint configuration associated with this endpoint: EndpointConfigName = "endpoint-config-name")

使用部署模型 AWS CLI

您可以使用将模型部署到终端节点 AWS CLI。

概述

使用部署模型时 AWS CLI,无论是否使用推理组件,都可以部署模型。以下各节总结了您为这两种方法运行的命令。以下示例演示了这些命令。

With inference components

要部署带有推理组件的模型,请执行以下操作:

  1. (可选)使用create-model命令创建模型。

  2. 通过创建终端节点配置来指定终端节点的设置。要创建一个,请运行create-endpoint-config命令。

  3. 使用create-endpoint命令创建您的终端节点。在命令正文中,指定您创建的端点配置。

  4. 使用create-inference-component命令创建推理组件。在设置中,您可以通过执行以下任一操作来指定模型:

    • 指定 SageMaker 模型对象

    • 指定模型图片 URI 和 S3 网址

    您还可以为模型分配端点资源。通过创建推理组件,您可以将模型部署到终端节点。您可以通过创建多个推理组件(每个模型一个)将多个模型部署到一个终端节点。

Without inference components

要在不使用推理组件的情况下部署模型,请执行以下操作:

  1. 使用create-model命令创建 SageMaker 模型。

  2. 通过创建终端节点配置对象来指定终端节点的设置。要创建一个,请使用create-endpoint-config命令。在端点配置中,您可以将模型对象分配给生产变体。

  3. 使用create-endpoint命令创建您的终端节点。在命令正文中,指定您创建的端点配置。

    创建终端节点时,配置 SageMaker 终端节点资源,然后它会将模型部署到终端节点。

配置

以下示例配置将模型部署到终端节点所需的资源。

With inference components
例 create-endpoint-config 命令

以下示例使用 create-endpoint-config 命令创建端点配置。

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\ --production-variants file://production-variants.json

在此示例中,该文件使用以下 JSON production-variants.json 定义了生产变体:

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }
Without inference components
例 创建模型命令

以下示例使用 create-model 命令创建模型

aws sagemaker create-model \ --model-name model-name \ --execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \ --primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name" }
例 create-endpoint-config 命令

以下示例使用 create-endpoint-config 命令创建端点配置。

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --production-variants file://production-variants.json

在此示例中,该文件使用以下 JSON production-variants.json 定义了生产变体:

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }

部署

以下示例将模型部署到端点。

With inference components
例 创建端点命令

以下示例使用 create-endpoint 命令创建终端节点

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }
例 create-inference-component 命令

以下示例使用 create-inference-component 命令创建推理组件。

aws sagemaker create-inference-component \ --inference-component-name inference-component-name \ --endpoint-name endpoint-name \ --variant-name variant-name \ --specification file://specification.json \ --runtime-config "{\"CopyCount\": 2}"

在此示例中,该文件使用以下 JSON specification.json 定义容器和计算资源:

{ "Container": { "Image": "image-uri", "ArtifactUrl": "model-s3-url" }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name" }
Without inference components
例 创建端点命令

以下示例使用 create-endpoint 命令创建终端节点

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

如果命令成功,则会使用您 AWS CLI 创建的资源的 ARN 进行响应。

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }