为实时推理部署模型
重要
允许 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 服务 的列表,请参阅区域地图和边缘网络
重要
存储模型构件的 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 中,您有两种方法来获取构件和创建模型:
-
您可以携带预先打包好的
tar.gz
存档,其中应包括模型构件、任何自定义推理代码以及requirements.txt
文件中列出的任何依赖关系。 -
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 的其他大写字母也可以接受: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 PutBucketCors
-
使用 put-bucket-cors AWS CLI 命令:
aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
创建可部署模型
在此步骤中,您通过提供构件和其他规格(如所需的容器和框架、任何自定义推理代码和网络设置),在 SageMaker 中创建模型的可部署版本。
通过以下操作在 SageMaker Studio 中创建可部署模型:
-
打开 SageMaker Studio 应用程序。
-
在左侧导航窗格中,选择 模型。
-
选择可部署模型选项卡。
-
在可部署模型页面,选择创建。
-
在创建可部署模型页面上,在模型名称字段中输入模型名称。
在创建可部署模型页面上还有几个部分需要填写。
容器定义部分看起来就像下面的界面截图:
对于容器定义部分,请执行以下操作:
-
在容器类型中,如果您想使用 SageMaker 管理的容器,请选择预构建容器;如果您有自己的容器,请选择自带容器。
-
如果您选择了预构建容器,请选择要使用的容器框架、框架版本和硬件类型。
-
如果您选择了自带容器,请为容器映像的 ECR 路径输入 Amazon ECR 路径。
然后,填写构件部分,如下界面截图所示:
对于构件部分,请执行以下操作:
-
如果您使用的是 SageMaker 支持的用于打包模型构件的框架之一(PyTorch 或 XGBoost),那么在构件中,您可以选择上传构件选项。使用该选项,您只需指定原始模型构件、任何自定义推理代码和 requirements.txt 文件,SageMaker 就会为您打包归档。执行以下操作:
-
在构件中,选择上传构件继续提供文件。否则,如果您已经有一个包含模型文件、推理代码和
requirements.txt
文件的tar.gz
存档,则选择输入 S3 URI 到预打包构件。 -
如果您选择上传构件,则在S3 存储桶中输入 Amazon S3 的路径,以便 SageMaker 在为您打包后将构件存储在该存储桶中。然后,完成以下步骤。
-
对于上传模型构件,请上传模型文件。
-
在推理代码中,如果您想使用 SageMaker 为服务推理提供的默认代码,请选择使用默认推理代码。否则,请选择上传自定义推理代码,以使用您自己的推理代码。
-
对于上传 requirements.txt,请上传一个文本文件,其中列出要在运行时安装的任何依赖关系。
-
-
如果您没有使用 SageMaker 支持的框架来打包模型构件,Studio 就会显示预打包构件选项,您必须提供所有已打包为
tar.gz
存档的构件。执行以下操作:-
对于预打包构件,如果您已将
tar.gz
存档上传到 Amazon S3,请选择输入预打包模型构件的 S3 URI。如果您想直接将存档上传到 SageMaker,请选择上传预打包模型构件。 -
如果您选择了预打包模型构件的输入 S3 URI,请为 S3 URI 输入存档的 Amazon S3 路径。否则,请选择并从本地计算机上传存档。
-
下一部分是安全性,界面截图如下:
对于安全性部分,请执行以下操作:
-
对于 IAM 角色,输入 IAM 角色的 ARN。
-
(可选)对于虚拟私有云(VPC),您可以选择一个 Amazon VPC 来存储模型配置和构件。
-
(可选)如果您要限制容器的互联网访问,请打开网络隔离开关。
最后,您可以选择填写高级选项部分,如下界面截图所示:
(可选)对于高级选项部分,执行以下操作:
-
如果您想在创建模型后在模型上运行 Amazon SageMaker Inference Recommender 作业,请打开自定义实例推荐开关。Inference Recommender 是一项为您提供推荐实例类型的功能,用于优化推理性能和成本。您可以在准备部署模型时查看这些实例建议。
-
在添加环境变量中,为容器输入键值对形式的环境变量。
-
在标签中,以键值对形式输入任何标签。
-
完成模型和容器配置后,选择创建可部署模型。
现在,您在 SageMaker Studio 中应该有一个可以部署的模型了。
部署模型
最后,将上一步配置的模型部署到 HTTPS 端点。您可以将单个模型或多个模型部署到端点。
模型和端点兼容性
在将模型部署到端点之前,模型和端点必须兼容,以下设置的值必须相同:
-
IAM 角色
-
Amazon VPC,包括其子网络和安全组
-
网络隔离(启用或禁用)
Studio 可通过以下方式防止您将模型部署到不兼容的端点:
-
如果尝试将模型部署到新的端点,SageMaker 会使用兼容的初始设置配置端点。如果您更改了这些设置,破坏了兼容性,Studio 就会显示警告并阻止您的部署。
-
如果您尝试部署到现有端点,而该端点不兼容,Studio 会显示警告并阻止部署。
-
如果您尝试将多个模型添加到部署中,Studio 会阻止您部署彼此不兼容的模型。
当 Studio 显示有关模型和端点不兼容的警告时,您可以在警告中选择查看详情,以查看哪些设置不兼容。
部署模型的一种方法是在 Studio 中执行以下操作:
-
打开 SageMaker Studio 应用程序。
-
在左侧导航窗格中,选择 模型。
-
在模型页面,从 SageMaker 模型列表中选择一个或多个模型。
-
选择部署。
-
为端点名称打开下拉菜单。您可以选择一个现有的端点,也可以创建一个新的端点来部署模型。
-
在实例类型中,选择要用于端点的实例类型。如果您之前为模型运行过推理推荐作业,那么您推荐的实例类型就会出现在列表中,标题为推荐。否则,您会看到一些可能适合您的模型的预测性实例。
JumpStart 的实例类型兼容性
如果您部署的是 JumpStart 模型,Studio 只显示模型支持的实例类型。
-
对于初始实例数,请输入您希望为端点配置的初始实例数。
-
对于最大实例数,指定端点纵向扩展以适应流量增加时可提供的最大实例数。
-
如果您要部署的模型是模型中心中最常用的 JumpStart LLM 之一,那么其他配置选项就会出现在实例类型和实例数量字段之后。
对于最流行的 JumpStart LLM,AWS 已预先标定了实例类型,以优化成本或性能。这些数据可以帮助您决定使用哪种实例类型来部署 LLM。选择其他配置,打开包含预设基准数据的对话框。面板看起来就像下面的界面截图:
在其他配置框中执行以下操作:
-
选择一个实例类型。您可以选择每小时成本或最佳性能,查看为指定模型优化成本或性能的实例类型。您还可以选择其他支持的实例,查看与 JumpStart 模型兼容的其他实例类型列表。请注意,在此选择实例类型会覆盖之前在步骤 6 中指定的任何实例选择。
-
(可选)打开自定义所选配置开关,以指定最大总令牌数(允许的最大令牌数,即输入令牌数与模型生成的输出之和)、最大输入令牌长度(允许每个请求输入的最大令牌数)和最大并发请求数(模型一次可处理的最大请求数)。
-
选择选择确认实例类型和配置设置。
-
-
模型字段应已填入要部署的一个或多个模型的名称。您可以选择添加模型将更多模型添加到部署中。对于添加的每个模型,请填写以下字段:
-
在 CPU 内核数中,输入您希望专用于模型使用的 CPU 内核数。
-
在副本的最小数量中,输入您希望在任何给定时间在端点上托管的模型副本的最小数量。
-
在最小 CPU 内存 (MB)中,输入模型所需的最小内存量(单位:MB)。
-
在最大 CPU 内存 (MB)中,输入允许模型使用的最大内存容量(单位:MB)。
-
-
(可选)对于高级选项,执行以下操作:
-
对于 IAM 角色,可使用默认的 SageMaker IAM 执行角色,或指定具有所需权限的自己的角色。请注意,此 IAM 角色必须与创建可部署模型时指定的角色相同。
-
对于虚拟私有云(VPC),您可以指定一个 VPC 来托管端点。
-
在加密 KMS 密钥中,选择一个 AWS KMS 密钥,用于加密端点所在 ML 计算实例所连接存储卷上的数据。
-
打开启用网络隔离开关,以限制容器的互联网访问。
-
在超时配置中,输入模型数据下载超时(秒)和容器启动运行状况检查超时(秒)字段的值。这些值分别决定 SageMaker 将模型下载到容器和启动容器所允许的最长时间。
-
在标签中,以键值对形式输入任何标签。
注意
SageMaker 会配置 IAM 角色、VPC 和网络隔离设置,其初始值与您部署的模型兼容。如果您更改了这些设置,破坏了兼容性,Studio 就会显示警告并阻止您的部署。
-
配置完选项后,页面应如下界面截图所示。
配置部署后,选择部署创建端点并部署模型。
使用 Python SDK 部署模型
使用 SageMaker Python SDK,您可以通过两种方式构建模型。首先,从 Model
或 ModelBuilder
类中创建一个模型对象。如果您使用 Model
类创建 Model
对象,则需要指定模型包或推理代码(取决于模型服务器)、处理客户端与服务器之间数据序列化和反序列化的脚本,以及上传到 Amazon S3 供使用的任何依赖关系。构建模型的第二种方法是使用 ModelBuilder
,并为其提供模型构件或推理代码。ModelBuilder
会自动捕捉您的依赖关系,推导出所需的序列化和反序列化函数,并将您的依赖关系打包,创建您的 Model
对象。有关 ModelBuilder
的更多信息,请参阅 使用 ModelBuilder 在 Amazon SageMaker 中创建模型。
下文将介绍创建模型和部署模型对象的两种方法。
设置
以下示例为模型部署过程做了准备。它们导入必要的库,并定义用于定位模型构件的 S3 URL。
例 模型构件 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) 部署模型有多种方法。以下章节总结了几种可能方法的操作步骤。下面的示例演示了这些步骤。
配置
以下示例配置了将模型部署到端点所需的资源。
部署
以下示例将模型部署到端点。
使用 AWS CLI 部署模型
您可以使用 AWS CLI 将模型部署到端点。
概述
使用 AWS CLI 部署模型时,您可以使用推理组件,也可以不使用推理组件。以下章节概述了这两种方法下运行的命令。下面的示例将演示这些命令。
配置
以下示例配置了将模型部署到端点所需的资源。
部署
以下示例将模型部署到端点。