为实时推理部署模型 - Amazon SageMaker

为实时推理部署模型

重要

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

Amazon SageMaker 的 AWS 托管式策略 授予创建 SageMaker 资源的权限,其中已包含在创建这些资源时添加标签的权限。

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

开始之前

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

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

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

  • SageMaker 的 IAM 角色

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

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

重要

存储模型构件的 Amazon S3 存储桶必须与所创建的模型位于相同 AWS 区域 中。

多种模式的资源共享利用

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

推理组件

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

在设置中,您可以通过自定义如何为模型分配所需的 CPU 内核、加速器和内存来优化资源利用率。您可以为一个端点部署多个推理组件,每个推理组件包含一个模型和该模型的资源利用需求。

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

推理组件具有以下优点

弹性

推理组件将托管模型的细节与端点本身分离开来。这样就能更灵活地控制端点托管和提供模型的方式。您可以在同一基础设施上托管多个模型,也可以根据需要从端点添加或删除模型。您可以独立更新每个模型。

可扩展性

您可以指定要托管的每个模型的副本数量,还可以设置副本的最低数量,以确保模型加载的数量符合服务请求的要求。您可以将任何推理组件副本缩减为零,这样就可以为另一个副本的缩放腾出空间。

部署模型时,SageMaker 会将模型打包为推理组件:

  • SageMaker Studio Classic。

  • 使用 SageMaker Python SDK 部署模型对象(将端点类型设置为 EndpointType.INFERENCE_COMPONENT_BASED)。

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

使用 SageMaker Studio 部署模型

完成以下步骤,通过 SageMaker Studio 以交互方式创建和部署模型。有关 Studio 的更多信息,请参阅 Studio 文档。有关各种部署场景的更多演示,请参阅博客使用 Amazon SageMaker 轻松打包和部署经典 ML 模型和 LLM - 第 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 创建和部署模型的权限。

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

如果您选择在创建模型时上传模型构件(或上传样本有效载荷文件以获得推理建议),则必须创建一个 Amazon S3 存储桶。存储桶名称的前缀必须是 SageMaker。SageMaker 的其他大写字母也可以接受:Sagemakersagemaker

我们建议您使用存储桶命名规范 sagemaker-{Region}-{accountID}。该存储桶用于存储您上传的构件。

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

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

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

创建可部署模型

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

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

  1. 打开 SageMaker Studio 应用程序。

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

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

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

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

创建可部署模型页面上还有几个部分需要填写。

容器定义部分看起来就像下面的界面截图:

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

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

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

然后,填写构件部分,如下界面截图所示:

在 Studio 中创建模型的构件部分界面截图。
对于构件部分,请执行以下操作:
  1. 如果您使用的是 SageMaker 支持的用于打包模型构件的框架之一(PyTorch 或 XGBoost),那么在构件中,您可以选择上传构件选项。使用该选项,您只需指定原始模型构件、任何自定义推理代码和 requirements.txt 文件,SageMaker 就会为您打包归档。执行以下操作:

    1. 构件中,选择上传构件继续提供文件。否则,如果您已经有一个包含模型文件、推理代码和 requirements.txt 文件的 tar.gz 存档,则选择输入 S3 URI 到预打包构件

    2. 如果您选择上传构件,则在S3 存储桶中输入 Amazon S3 的路径,以便 SageMaker 在为您打包后将构件存储在该存储桶中。然后,完成以下步骤。

    3. 对于上传模型构件,请上传模型文件。

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

    5. 对于上传 requirements.txt,请上传一个文本文件,其中列出要在运行时安装的任何依赖关系。

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

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

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

下一部分是安全性,界面截图如下:

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

  2. (可选)对于虚拟私有云(VPC),您可以选择一个 Amazon VPC 来存储模型配置和构件。

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

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

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

  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 中部署模型页面的界面截图。

配置部署后,选择部署创建端点并部署模型。

使用 Python SDK 部署模型

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

下文将介绍创建模型和部署模型对象的两种方法。

设置

以下示例为模型部署过程做了准备。它们导入必要的库,并定义用于定位模型构件的 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 SDK (Boto3) 和 Python 标准库导入了模块。这些模块提供了有用的方法,可以帮助您部署模型,下面的示例也会用到它们。

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

下面的示例从 Python SDK (Boto3) 和 Python 标准库导入了模块。这些模块提供了有用的方法,可以帮助您部署模型,下面的示例也会用到它们。

import boto3 import botocore import datetime from time import gmtime, strftime
例 模型构件 URL

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

# Create a variable w/ the model S3 URL # The name of your S3 bucket: s3_bucket = "amzn-s3-demo-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 URL 保存在变量 model_url 中,并在下面的示例中使用。

概述

使用 SageMaker Python SDK 或 Python SDK (Boto3) 部署模型有多种方法。以下章节总结了几种可能方法的操作步骤。下面的示例演示了这些步骤。

SageMaker Python SDK

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

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

  • ModelBuilder 类创建模型对象:您只需提供模型构件或推理代码,ModelBuilder 就会自动捕捉您的依赖关系,推理出所需的序列化和反序列化函数,并打包您的依赖关系,创建您的 Model 对象。

    有关 ModelBuilder 的更多信息,请参阅 使用 ModelBuilder 在 Amazon SageMaker 中创建模型。更多信息,请参阅博客使用 SageMaker 轻松打包和部署经典的 ML 模型和 LLM - 第 1 部分

下面的示例介绍了创建模型和部署模型对象的两种方法。要以这些方式部署模型,您需要完成以下步骤:

  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 URL

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

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 为模型打包提供了统一的接口,在本例中,它为大型模型部署准备了一个模型。该示例利用 ModelBuilder 构建了一个 Hugging 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)
例 模型定义

下面的示例在 AWS SDK for Python (Boto3) 中使用 create_model 方法定义了一个 SageMaker 模型。

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:IAM 角色的 Amazon 资源名称 (ARN),Amazon SageMaker 可代入此角色以访问模型构件和 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 URL

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

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

在本例中,文件 production-variants.json 使用以下 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 命令

下面的示例使用 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

在本例中,文件 production-variants.json 使用以下 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 命令

下面的示例使用 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}"

在这个示例中,文件 specification.json 用以下 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 命令

下面的示例使用 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" }